Как перестать использовать защелки?

Программируемая логика - это не так уж и сложно. Разберемся вместе.
Ответить
Plazmoid
Встал на лапы
Сообщения: 97
Зарегистрирован: Пн дек 31, 2012 02:36:32

Как перестать использовать защелки?

Сообщение Plazmoid »

Приветствую.
Начал изучать verilog, но не могу избавиться от "сишной" привычки использовать if без else :) . Везде пишут, что это недопустимо, т.к. приводит к синтезу защелки (latch), надо обязательно ставить else или делать инициализацию. Это все понятно, но проблема именно в том, что данная конструкция "есть событие - меняем переменную, нет события - оставляем как было" очень удобная, но приходится постоянно выкручиваться и каждый раз что-то изобретать, чтобы ее не использовать. Вроде как старый инструмент отобрали, а новый не выдали - очень некомфортно :) . Что посоветуете?
prx
Родился
Сообщения: 5
Зарегистрирован: Пн авг 07, 2017 23:05:44

Re: Как перестать использовать защелки?

Сообщение prx »

[uquote="Plazmoid",url="/forum/viewtopic.php?p=3177773#p3177773"]использовать if без else :) . Везде пишут, что это недопустимо, т.к. приводит к синтезу защелки (latch)[/uquote]Это допустимо, например в обыкновенном счетчике с разрешением счета:

Код: Выделить всё

always @(posedge clk) begin
  if (enable) begin
    cnt <= cnt + 1'b1;
  end
end
Защелки - это триггеры со статическим управлением, соответственно они появляются там где присваивание происходит не по фронту тактового сигнала. Например RS-триггер:

Код: Выделить всё

always @(S, R, C, Q)
  if(C) begin
    Q <= (~R & Q) | S;
  end else begin
    Q <= Q;
  end
end
Такое действительно не желательно, потому что затрудняет временной анализ САПР-у и создает значительные задержки.
Для того чтобы этого не происходило, достаточно в блоках always делать присваивание только по фронту тактового сигнала и не использовать блокирующие присваивания. Если требуется описать комбинационную логику отдельно, то хорошим вариантом будет использовать assign, а не always.

[uquote="Plazmoid",url="/forum/viewtopic.php?p=3177773#p3177773"]Что посоветуете?[/uquote]Изучить основы синтеза цифровых устройств на бумажке. Советую прорешать примеры из https://librusec.pro/b/474613 или чего-нибудь похожего.
Ответить

Вернуться в «ПЛИС»