arcer 0 10 февраля, 2011 Опубликовано 10 февраля, 2011 · Жалоба В HDL (для синтезатора) нет понятия 'выполнится раньше, выполнится позже' - там все выполняется параллельно и в тот момент, когда сработает условие в always. А как же зависимости типа a=b; b=c; в сочетании с блокирующим присвоением? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
arcer 0 10 февраля, 2011 Опубликовано 10 февраля, 2011 · Жалоба Приведите более реальный пример. Вот только что придумал реальный пример (то, что мне действительно нужно): Есть у нас модуль, со входами и выходами, причем один из выходов - бит, который должен принимать значение "1" когда содержимое модуля (точнее заданного блока always) выполнится. И не раньше, чтоб на эту единицу можно было приступить к чтению и использованию остальных выходов не боясь, что они "еще не окончательно изменились, а только в процессе изменения значения". Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
xvr 12 11 февраля, 2011 Опубликовано 11 февраля, 2011 · Жалоба А как же зависимости типа a=b; b=c; в сочетании с блокирующим присвоением?Все равно за такт :1111493779: Применение блокирующего присваивания может изменить логику работы, но не время срабатывания блока always. При чистом моделировании все присваивания (и блокирующие и не блокирующие) выполняются за нулевое модельное время. Вот только что придумал реальный пример (то, что мне действительно нужно): Есть у нас модуль, со входами и выходами, причем один из выходов - бит, который должен принимать значение "1" когда содержимое модуля (точнее заданного блока always) выполнится.Константная 1. Почитайте уже наконец что нибудь про Verilog, и более внимательно про модель времени в нем и синтезируемые паттерны :smile3046: Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dvladim 0 11 февраля, 2011 Опубликовано 11 февраля, 2011 · Жалоба И не раньше, чтоб на эту единицу можно было приступить к чтению и использованию остальных выходов не боясь, что они "еще не окончательно изменились, а только в процессе изменения значения". Выходы захватывать в триггера? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
nckkm 0 11 февраля, 2011 Опубликовано 11 февраля, 2011 · Жалоба Вот здесь есть кое-что про блокирующие и не блокирующие присвоения http://marsohod.org/index.php/ourblog/11-b...-veriloglesson5 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
arcer 0 11 февраля, 2011 Опубликовано 11 февраля, 2011 · Жалоба Все равно за такт :1111493779: Применение блокирующего присваивания может изменить логику работы, но не время срабатывания блока always. При чистом моделировании все присваивания (и блокирующие и не блокирующие) выполняются за нулевое модельное время. Нет, то что за такт, я понял. Вопрос в том будут ли коллизии со значениями. Типа, случайно, вначале в регистр "b" забивается "c", а потом в "a" "b" , а не наоборот, как хотелось. Константная 1. Почитайте уже наконец что нибудь про Verilog, и более внимательно про модель времени в нем и синтезируемые паттерны :smile3046: Читал, читаю и буду читать. Но некоторые нюансы не совсем были ясны - вот и спрашиваю :laughing: Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
des00 25 11 февраля, 2011 Опубликовано 11 февраля, 2011 · Жалоба Читал, читаю и буду читать. Но некоторые нюансы не совсем были ясны - вот и спрашиваю :laughing: читайте стандарт и только его, там все написано. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ViKo 1 11 февраля, 2011 Опубликовано 11 февраля, 2011 · Жалоба читайте стандарт и только его, там все написано. Я дам совет - читайте всё, но в спорных вопросах доверяйтесь стандарту. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
xvr 12 11 февраля, 2011 Опубликовано 11 февраля, 2011 · Жалоба Типа, случайно, вначале в регистр "b" забивается "c", а потом в "a" "b" , а не наоборот, как хотелось.Случайно в Verilog'е ничего не происходит ;) В стандарте вполне недвусмысленно описывается как именно происходят присваивания, как блокирующие, так и не блокирующие. Если вкратце, то на каждом такте модельного времени определяется, какие блоки always должны сработать, потом они все запускаются. При этом результаты неблокирующих присваиваний в переменные НЕ пишутся, а запоминаются. Когда все вычисления устаканятся (это кстати итерационный процесс) результаты всех накопленных неблокирующих присваиваний ОДНОВРЕМЕННО пишутся в соответствующие переменные. Каждый момент модельного времени делится на стадии, и в каждой из них происходит та или иная работа - вычисление условвий блоков always, вычисление тел активных блоков, запись переменных и пр (см. стандарт - там около 15 состояний). И это все происходит в одно и тоже модельное время. Так работает симулятор, а синтезатор раскладывает логику и регистры так, что бы работа реального железа совпала с логической моделью симулятора. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться