Перейти к содержанию
    

параллельные блоки в верилоге

В HDL (для синтезатора) нет понятия 'выполнится раньше, выполнится позже' - там все выполняется параллельно и в тот момент, когда сработает условие в always.

А как же зависимости типа a=b; b=c; в сочетании с блокирующим присвоением?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Приведите более реальный пример.

Вот только что придумал реальный пример (то, что мне действительно нужно): Есть у нас модуль, со входами и выходами, причем один из выходов - бит, который должен принимать значение "1" когда содержимое модуля (точнее заданного блока always) выполнится. И не раньше, чтоб на эту единицу можно было приступить к чтению и использованию остальных выходов не боясь, что они "еще не окончательно изменились, а только в процессе изменения значения".

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А как же зависимости типа a=b; b=c; в сочетании с блокирующим присвоением?
Все равно за такт :1111493779: Применение блокирующего присваивания может изменить логику работы, но не время срабатывания блока always. При чистом моделировании все присваивания (и блокирующие и не блокирующие) выполняются за нулевое модельное время.

 

 

 

Вот только что придумал реальный пример (то, что мне действительно нужно): Есть у нас модуль, со входами и выходами, причем один из выходов - бит, который должен принимать значение "1" когда содержимое модуля (точнее заданного блока always) выполнится.
Константная 1. Почитайте уже наконец что нибудь про Verilog, и более внимательно про модель времени в нем и синтезируемые паттерны :smile3046:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

И не раньше, чтоб на эту единицу можно было приступить к чтению и использованию остальных выходов не боясь, что они "еще не окончательно изменились, а только в процессе изменения значения".

Выходы захватывать в триггера?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вот здесь есть кое-что про блокирующие и не блокирующие присвоения

http://marsohod.org/index.php/ourblog/11-b...-veriloglesson5

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Все равно за такт :1111493779: Применение блокирующего присваивания может изменить логику работы, но не время срабатывания блока always. При чистом моделировании все присваивания (и блокирующие и не блокирующие) выполняются за нулевое модельное время.

 

Нет, то что за такт, я понял. Вопрос в том будут ли коллизии со значениями. Типа, случайно, вначале в регистр "b" забивается "c", а потом в "a" "b" , а не наоборот, как хотелось.

 

Константная 1. Почитайте уже наконец что нибудь про Verilog, и более внимательно про модель времени в нем и синтезируемые паттерны :smile3046:

Читал, читаю и буду читать. Но некоторые нюансы не совсем были ясны - вот и спрашиваю :laughing:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Читал, читаю и буду читать. Но некоторые нюансы не совсем были ясны - вот и спрашиваю :laughing:

читайте стандарт и только его, там все написано.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

читайте стандарт и только его, там все написано.

Я дам совет - читайте всё, но в спорных вопросах доверяйтесь стандарту.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Типа, случайно, вначале в регистр "b" забивается "c", а потом в "a" "b" , а не наоборот, как хотелось.
Случайно в Verilog'е ничего не происходит ;) В стандарте вполне недвусмысленно описывается как именно происходят присваивания, как блокирующие, так и не блокирующие.

Если вкратце, то на каждом такте модельного времени определяется, какие блоки always должны сработать, потом они все запускаются. При этом результаты неблокирующих присваиваний в переменные НЕ пишутся, а запоминаются. Когда все вычисления устаканятся (это кстати итерационный процесс) результаты всех накопленных неблокирующих присваиваний ОДНОВРЕМЕННО пишутся в соответствующие переменные. Каждый момент модельного времени делится на стадии, и в каждой из них происходит та или иная работа - вычисление условвий блоков always, вычисление тел активных блоков, запись переменных и пр (см. стандарт - там около 15 состояний). И это все происходит в одно и тоже модельное время.

Так работает симулятор, а синтезатор раскладывает логику и регистры так, что бы работа реального железа совпала с логической моделью симулятора.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...