Например TDA7294

Форум РадиоКот :: Просмотр темы - Как перестать использовать защелки?
Форум РадиоКот
https://radiokot.ru/forum/

Как перестать использовать защелки?
https://radiokot.ru/forum/viewtopic.php?f=60&t=148151
Страница 1 из 1

Автор:  Plazmoid [ Чт сен 07, 2017 01:26:08 ]
Заголовок сообщения:  Как перестать использовать защелки?

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

Автор:  prx [ Сб сен 09, 2017 08:39:41 ]
Заголовок сообщения:  Re: Как перестать использовать защелки?

использовать if без else :) . Везде пишут, что это недопустимо, т.к. приводит к синтезу защелки (latch)
Это допустимо, например в обыкновенном счетчике с разрешением счета:
Код:
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.

Что посоветуете?
Изучить основы синтеза цифровых устройств на бумажке. Советую прорешать примеры из https://librusec.pro/b/474613 или чего-нибудь похожего.

Страница 1 из 1 Часовой пояс: UTC + 3 часа
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/