Builder 1 26 мая, 2010 Опубликовано 26 мая, 2010 · Жалоба На мой взгляд использование защелок никакой проблемы не составляет. У меня половина обычных триггеров, а половина защёлок. Живу и радуюсь - никаких проблем. А использовать ветку else только для того чтобы написать что триггер должен сохранить свое значение - это только засорять код. От ошибок это не защищает. С защёлками могут возникать неочевидные ошибки. Просто нужно осознанно их использовать. Это как с асинхронщиной, если обосновано и со знанием дела - пожалуста, используйте, будет работать. Но как показывает практика, у многих почему-то не работает. На симуляторе вроде работает, а на железе - глючит. Поэтому тут по моему должен действовать принцип - не уверен - не используй, уверен - нет проблем :) По else, пишу на V/SV, обычно ставлю _ff, и не имею проблем с засорением кода лишней информацие. Добавлено: а разве защёлки во всех ПЛИС есть? Если нету - то тоже нарваться можно, т.к. она будет неким способом симитирована, и нужно ещё смотреть как именно... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ViKo 1 27 мая, 2010 Опубликовано 27 мая, 2010 · Жалоба а разве защёлки во всех ПЛИС есть? Вот пример защелки assign out = in & out; Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Des333 0 27 мая, 2010 Опубликовано 27 мая, 2010 · Жалоба Вот пример защелки assign out = in & out; Это не защелка, а комбинационная петля. Защелка - это: always @(*) if(en) out = in; Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ViKo 1 27 мая, 2010 Опубликовано 27 мая, 2010 · Жалоба Это не защелка, а комбинационная петля. Защелка - это: Ну, нехай так будет. И то, и другое легко сделать в любой ПЛИС :) Вот пример, выполняющий то же самое. Но на него Quartus ругается, как на комбинационную петлю. assign out = in & en | out & !en; Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
icyrock 0 27 мая, 2010 Опубликовано 27 мая, 2010 · Жалоба Главный вопрос: а зачем? Алгоритмы у меня такие : нужно :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
bogaev_roman 0 27 мая, 2010 Опубликовано 27 мая, 2010 (изменено) · Жалоба Алгоритмы у меня такие : нужно :) А Вы уверены, что в Вашем алгоритме без защелок не обойтись? Все-таки защелки - хитрая вещь и ИМХО лучше без них. Да и по себе могу сказать - читая чужой код и встречая защелки (особенно в case любят опускать состояния) ну очень настораживает - как бы в неопределенность не погрузиться, особенно если обратная связь. assign out = in & en | out & !en; - Вот такая то оплошность быстро обнаружиться, а вот если case состояний этак на 100, ну и одно забыли - хана, не обнаружишь. Изменено 27 мая, 2010 пользователем bogaev_roman Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Des333 0 27 мая, 2010 Опубликовано 27 мая, 2010 · Жалоба Алгоритмы у меня такие : нужно :) Это как с оператором goto. Всегда можно обойтись и без него. :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
icyrock 0 27 мая, 2010 Опубликовано 27 мая, 2010 · Жалоба А Вы уверены, что в Вашем алгоритме без защелок не обойтись? Все-таки защелки - хитрая вещь и ИМХО лучше без них. Да и по себе могу сказать - читая чужой код и встречая защелки (особенно в case любят опускать состояния) ну очень настораживает - как бы в неопределенность не погрузиться, особенно если обратная связь. Вижу в использовании защёлки (когда это требуется) следующие факторы увеличивающие наглядность кода 1. Нет лишней засоряющей пространство ветви else 2. Чем реже меняет значение триггер тем меньше "ряби" и посторонних (промежуточных) значений на симуляции 3. Текст always @(posedge clk) if (ce) dout<=din; Прямо говорит что меняется значение dout тогда когда ce в единице 4. В принципе можно напрячься и избавиться от защёлок. Но это может привести к тому, что код хоть и будет работать правильно но идею алгоритма придётся расшифровывать внимательно вглядываясь в превращение входных данных в выходные. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Builder 1 27 мая, 2010 Опубликовано 27 мая, 2010 · Жалоба 3. Текст always @(posedge clk) if (ce) dout<=din; Чёт-т туплю к концу дня, это разве защёлка? Вы точно уверены? По моему это банальный тригер, и тогда все остальные рассуждения теряют смысл. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Des333 0 27 мая, 2010 Опубликовано 27 мая, 2010 · Жалоба 3. Текст always @(posedge clk) if (ce) dout<=din; Это не защелка. Смотрите пример защелки выше. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
bogaev_roman 0 27 мая, 2010 Опубликовано 27 мая, 2010 (изменено) · Жалоба always @(posedge clk) if (ce) dout<=din; Это триггер-защелка (синтезирован будет как обычный триггер). Тока вот теперь ответьте на вопрос что Вы будете делать если будет вложенный оператор if else if else и забудете первый else поставить? А вообще можно просто написать else ; И насчет читабельности я бы еще поспорил. Изменено 27 мая, 2010 пользователем bogaev_roman Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ViKo 1 27 мая, 2010 Опубликовано 27 мая, 2010 · Жалоба Это триггер-защелка (синтезирован будет как обычный триггер). Это - не триггер-защелка. Защелка (Latch) - это триггер, который передает входной сигнал, когда L = 1 (прозрачный), и не передает входной сигнал, когда L = 0. В момент перехода L из 1 в 0 триггер "защелкивает" сигнал, а до этого момента сигнал на выходе мог меняться вместе с входным. P.S. А для case есть слово default. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
bogaev_roman 0 28 мая, 2010 Опубликовано 28 мая, 2010 (изменено) · Жалоба Это - не триггер-защелка. Защелка (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? По-моему рекомендует, хотя и не обязывает... Изменено 28 мая, 2010 пользователем bogaev_roman Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ViKo 1 28 мая, 2010 Опубликовано 28 мая, 2010 · Жалоба Во всяком случае, 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. Кстати... assign out = in & en | out & !en; - Вот такая то оплошность быстро обнаружиться Это не оплошность, а осознанное решение. Ничего плохого в нем нет. Именно - триггер-защелка, применяется часто. Пример - 74HC373 - Octal 3-State Noninverting Transparent Latch. Бывают защелки "полезные", а бывают "непредусмотренные" :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Des333 0 28 мая, 2010 Опубликовано 28 мая, 2010 · Жалоба Так что то о чем говорил des333 - это latch, то о чем писал я -flip-flop and latch в общем случае, и речь шла немного о разных вещах. Ну, я думал, по контексту темы все поняли, что имеется в виду та защелка, которая latch. :) Это не оплошность, а осознанное решение. Ничего плохого в нем нет. Именно - триггер-защелка, применяется часто. Пример - 74HC373 - Octal 3-State Noninverting Transparent Latch. Бывают защелки "полезные", а бывают "непредусмотренные" :) Altera рекомендует не использовать latch вообще. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться