реклама на сайте
подробности

 
 
4 страниц V  < 1 2 3 4 >  
Reply to this topicStart new topic
> Защелки в FSM
Builder
сообщение May 26 2010, 14:38
Сообщение #16


iBuilder©
****

Группа: Свой
Сообщений: 519
Регистрация: 14-07-04
Из: Минск
Пользователь №: 322



Цитата(icyrock @ May 26 2010, 17:28) *
На мой взгляд использование защелок никакой проблемы не составляет. У меня половина обычных триггеров, а половина защёлок. Живу и радуюсь - никаких проблем.

А использовать ветку else только для того чтобы написать что триггер должен сохранить свое значение - это только засорять код. От ошибок это не защищает.
С защёлками могут возникать неочевидные ошибки. Просто нужно осознанно их использовать. Это как с асинхронщиной, если обосновано и со знанием дела - пожалуста, используйте, будет работать. Но как показывает практика, у многих почему-то не работает. На симуляторе вроде работает, а на железе - глючит.
Поэтому тут по моему должен действовать принцип - не уверен - не используй, уверен - нет проблем smile.gif
По else, пишу на V/SV, обычно ставлю _ff, и не имею проблем с засорением кода лишней информацие.

Добавлено: а разве защёлки во всех ПЛИС есть? Если нету - то тоже нарваться можно, т.к. она будет неким способом симитирована, и нужно ещё смотреть как именно...
Go to the top of the page
 
+Quote Post
ViKo
сообщение May 27 2010, 14:05
Сообщение #17


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Цитата(Builder @ May 26 2010, 17:38) *
а разве защёлки во всех ПЛИС есть?

Вот пример защелки
Код
assign out = in & out;
Go to the top of the page
 
+Quote Post
des333
сообщение May 27 2010, 14:26
Сообщение #18


Профессионал
*****

Группа: Свой
Сообщений: 1 129
Регистрация: 19-07-08
Из: Санкт-Петербург
Пользователь №: 39 079



Цитата(ViKo @ May 27 2010, 18:05) *
Вот пример защелки
Код
assign out = in & out;


Это не защелка, а комбинационная петля.


Защелка - это:

Код
always @(*)
  if(en)
   out = in;


--------------------
Go to the top of the page
 
+Quote Post
ViKo
сообщение May 27 2010, 14:30
Сообщение #19


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Цитата(des333 @ May 27 2010, 17:26) *
Это не защелка, а комбинационная петля.
Защелка - это:

Ну, нехай так будет. И то, и другое легко сделать в любой ПЛИС smile.gif
Вот пример, выполняющий то же самое. Но на него Quartus ругается, как на комбинационную петлю.
Код
  assign out = in & en | out & !en;
Go to the top of the page
 
+Quote Post
icyrock
сообщение May 27 2010, 15:02
Сообщение #20


Участник
*

Группа: Участник
Сообщений: 29
Регистрация: 27-04-07
Из: Санкт-Петербург
Пользователь №: 27 351



Цитата(des333 @ May 26 2010, 18:35) *
Главный вопрос: а зачем?

Алгоритмы у меня такие : нужно smile.gif
Go to the top of the page
 
+Quote Post
bogaev_roman
сообщение May 27 2010, 15:07
Сообщение #21


Профессионал
*****

Группа: Свой
Сообщений: 1 088
Регистрация: 20-10-09
Из: Химки
Пользователь №: 53 082



Цитата(icyrock @ May 27 2010, 19:02) *
Алгоритмы у меня такие : нужно smile.gif

А Вы уверены, что в Вашем алгоритме без защелок не обойтись? Все-таки защелки - хитрая вещь и ИМХО лучше без них.
Да и по себе могу сказать - читая чужой код и встречая защелки (особенно в case любят опускать состояния) ну очень настораживает - как бы в неопределенность не погрузиться, особенно если обратная связь.
assign out = in & en | out & !en; - Вот такая то оплошность быстро обнаружиться, а вот если case состояний этак на 100, ну и одно забыли - хана, не обнаружишь.

Сообщение отредактировал bogaev_roman - May 27 2010, 15:17
Go to the top of the page
 
+Quote Post
des333
сообщение May 27 2010, 15:25
Сообщение #22


Профессионал
*****

Группа: Свой
Сообщений: 1 129
Регистрация: 19-07-08
Из: Санкт-Петербург
Пользователь №: 39 079



Цитата(icyrock @ May 27 2010, 19:02) *
Алгоритмы у меня такие : нужно smile.gif

Это как с оператором goto. Всегда можно обойтись и без него.  smile.gif


--------------------
Go to the top of the page
 
+Quote Post
icyrock
сообщение May 27 2010, 15:38
Сообщение #23


Участник
*

Группа: Участник
Сообщений: 29
Регистрация: 27-04-07
Из: Санкт-Петербург
Пользователь №: 27 351



Цитата(bogaev_roman @ May 27 2010, 19:07) *
А Вы уверены, что в Вашем алгоритме без защелок не обойтись? Все-таки защелки - хитрая вещь и ИМХО лучше без них.
Да и по себе могу сказать - читая чужой код и встречая защелки (особенно в case любят опускать состояния) ну очень настораживает - как бы в неопределенность не погрузиться, особенно если обратная связь.


Вижу в использовании защёлки (когда это требуется) следующие факторы увеличивающие наглядность кода
1. Нет лишней засоряющей пространство ветви else
2. Чем реже меняет значение триггер тем меньше "ряби" и посторонних (промежуточных) значений на симуляции
3. Текст
always @(posedge clk)
if (ce)
dout<=din;
Прямо говорит что меняется значение dout тогда когда ce в единице
4. В принципе можно напрячься и избавиться от защёлок. Но это может привести к тому, что код хоть и будет работать правильно но идею алгоритма придётся расшифровывать внимательно вглядываясь в превращение входных данных в выходные.
Go to the top of the page
 
+Quote Post
Builder
сообщение May 27 2010, 15:58
Сообщение #24


iBuilder©
****

Группа: Свой
Сообщений: 519
Регистрация: 14-07-04
Из: Минск
Пользователь №: 322



Цитата(icyrock @ May 27 2010, 18:38) *
3. Текст
always @(posedge clk)
if (ce)
dout<=din;
Чёт-т туплю к концу дня, это разве защёлка? Вы точно уверены?
По моему это банальный тригер, и тогда все остальные рассуждения теряют смысл.
Go to the top of the page
 
+Quote Post
des333
сообщение May 27 2010, 16:07
Сообщение #25


Профессионал
*****

Группа: Свой
Сообщений: 1 129
Регистрация: 19-07-08
Из: Санкт-Петербург
Пользователь №: 39 079



Цитата(icyrock @ May 27 2010, 19:38) *
3. Текст
always @(posedge clk)
if (ce)
dout<=din;

Это не защелка. Смотрите пример защелки выше.


--------------------
Go to the top of the page
 
+Quote Post
bogaev_roman
сообщение May 27 2010, 17:29
Сообщение #26


Профессионал
*****

Группа: Свой
Сообщений: 1 088
Регистрация: 20-10-09
Из: Химки
Пользователь №: 53 082



Цитата(icyrock @ May 27 2010, 19:38) *
always @(posedge clk)
if (ce)
dout<=din;

Это триггер-защелка (синтезирован будет как обычный триггер). Тока вот теперь ответьте на вопрос что Вы будете делать если будет вложенный оператор
if else if else и забудете первый else поставить? А вообще можно просто написать else ; И насчет читабельности я бы еще поспорил.

Сообщение отредактировал bogaev_roman - May 27 2010, 17:30
Go to the top of the page
 
+Quote Post
ViKo
сообщение May 27 2010, 20:19
Сообщение #27


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Цитата(bogaev_roman @ May 27 2010, 20:29) *
Это триггер-защелка (синтезирован будет как обычный триггер).

Это - не триггер-защелка.
Защелка (Latch) - это триггер, который передает входной сигнал, когда L = 1 (прозрачный), и не передает входной сигнал, когда L = 0. В момент перехода L из 1 в 0 триггер "защелкивает" сигнал, а до этого момента сигнал на выходе мог меняться вместе с входным.

P.S. А для case есть слово default.
Go to the top of the page
 
+Quote Post
bogaev_roman
сообщение May 28 2010, 06:21
Сообщение #28


Профессионал
*****

Группа: Свой
Сообщений: 1 088
Регистрация: 20-10-09
Из: Химки
Пользователь №: 53 082



Цитата(ViKo @ May 28 2010, 00:19) *
Это - не триггер-защелка.
Защелка (Latch) - это триггер, который передает входной сигнал, когда L = 1 (прозрачный), и не передает входной сигнал, когда L = 0. В момент перехода L из 1 в 0 триггер "защелкивает" сигнал, а до этого момента сигнал на выходе мог меняться вместе с входным.

P.S. А для case есть слово default.

Все-таки откопал из старого форума-конференции - вот собственно тема http://www.telesys.ru/wwwboards/fpga/270/m...ges/21837.shtml
А вот подробное описание отличий - http://www.telesys.ru/wwwboards/fpga/270/m...ges/22311.shtml
Так что то о чем говорил des333 - это latch, то о чем писал я -flip-flop and latch в общем случае, и речь шла немного о разных вещах.
Некоторым лень сознательно ставить default так же как и else - типа читается лучше да и строчек меньше, а потом начинается в крупных проектах "выковыривание" ошибки.
Интересно, а вот сходу скажет кто-нибудь - стандарт рекомендует по стилю вставлять else и default? По-моему рекомендует, хотя и не обязывает...

Сообщение отредактировал bogaev_roman - May 28 2010, 06:24
Go to the top of the page
 
+Quote Post
ViKo
сообщение May 28 2010, 09:24
Сообщение #29


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Во всяком случае, Quartus предлагает следующий шаблон для case:
Код
case(<constant_expr>)
<constant_expr>:
  begin : <block_name>
    // Generate Items
  end
<constant_expr>:
  begin : <block_name>
    // Generate Items
  end
// ...
default:
  begin : <block_name>

  end
endcase

// NOTE: Block names are optional but Altera recommends them.


Кстати...
Цитата(bogaev_roman @ May 27 2010, 18:07) *
assign out = in & en | out & !en; - Вот такая то оплошность быстро обнаружиться

Это не оплошность, а осознанное решение. Ничего плохого в нем нет. Именно - триггер-защелка, применяется часто. Пример - 74HC373 - Octal 3-State Noninverting Transparent Latch.
Бывают защелки "полезные", а бывают "непредусмотренные" smile.gif
Go to the top of the page
 
+Quote Post
des333
сообщение May 28 2010, 10:03
Сообщение #30


Профессионал
*****

Группа: Свой
Сообщений: 1 129
Регистрация: 19-07-08
Из: Санкт-Петербург
Пользователь №: 39 079



Цитата(bogaev_roman @ May 28 2010, 10:21) *
Так что то о чем говорил des333 - это latch, то о чем писал я -flip-flop and latch в общем случае, и речь шла немного о разных вещах.


Ну, я думал, по контексту темы все поняли, что имеется в виду та защелка, которая latch.  smile.gif




Цитата(ViKo @ May 28 2010, 13:24) *
Это не оплошность, а осознанное решение. Ничего плохого в нем нет. Именно - триггер-защелка, применяется часто. Пример - 74HC373 - Octal 3-State Noninverting Transparent Latch.
Бывают защелки "полезные", а бывают "непредусмотренные" smile.gif


Altera рекомендует не использовать latch вообще.


--------------------
Go to the top of the page
 
+Quote Post

4 страниц V  < 1 2 3 4 >
Reply to this topicStart new topic
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 19th July 2025 - 09:19
Рейтинг@Mail.ru


Страница сгенерированна за 0.01548 секунд с 7
ELECTRONIX ©2004-2016