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

Verilog, неблокирующее присваивание

Здравствуйте.

Изучаю Verilog, возник вопрос, который не понимаю.

пример счетчик 0-10:

===

module test1(clk, count);

input clk;

output reg[7:0]count;

 

always @(posedge clk) begin

count <= count + 8'b1;

if (count == 8'b00001010)count <= 0;

end

endmodule

 

что на него сгенерил Quartus:

image.jpg

 

меняю строки в always блоке местами:

 

always @(posedge clk) begin

if (count == 8'b00001010)count <= 0;

count <= count + 8'b1;

end

 

исчезает условие проверки на 8'hA:

 

image.jpg

 

Вот никак не пойму - почему так? вроде в данном случае результат не должен зависеть от последовательности строк?

 

Спасибо.

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


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

Приветствую!

 

Если есть несколько неблокирующих присваиваний в одну переменную то переменная получит значение ПОСЛЕДНЕГО активного присваивания.

 

В Вашем случае во втором варианте ВСЕГДА выполняется инкремент переменной поэтому проверка и выбрасывается при синтезе.

 

Успехов! Rob.

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


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

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

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


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

Если есть несколько неблокирующих присваиваний в одну переменную то переменная получит значение ПОСЛЕДНЕГО активного присваивания.

 

Спасибо.

Другими словами, мой пример просто некорректен с самого начала, а такие конструкции надо реализовывать через if-else, case и пр. ?

 

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


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

Приветствую!

 

Спасибо.

Другими словами, мой пример просто некорректен с самого начала, а такие конструкции надо реализовывать через if-else, case и пр. ?

 

Да - лучше писать так чтобы минимизировать неоднозначность в восприятии кода как синтезатором так и разработчиком.

Хотя первый вариант вполне корректен для синтеза и применяется в коде довольно часто.

Например чтобы при сложных условиях не плодить запутанные if-else

 

Удачи! Rob.

 

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


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

Да - лучше писать так чтобы минимизировать неоднозначность в восприятии кода как синтезатором так и разработчиком.

Хотя первый вариант вполне корректен для синтеза и применяется в коде довольно часто.

Народная мудрость для ТС - если у вас какой то кусок кода работает правильно, но вызывает вопросы как и почему, то так лучше не писать. Не только у вас могут возникнуть такие вопросы, но и у кого то, кто будет с вашей схемой разбираться. Только у него добавится третий вопрос - это так было задумано, или это ошибка? :smile3046:

 

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


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

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

 

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

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


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

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

Так зачем писать код хотя и совершенно правильный, но для осмысления которого придется смотреть в стандарт?

 

Очевидно, что 'прозрачность' и понятность конструкции определяется в первую очередь уровнем знаний того, кто на них смотрит. Если у ТС возникли вопросы, то ему лучше не использовать. У вас, например, скорее всего не только вопросов не возникнет, но даже и намека на них - уровень не тот :)

 

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


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

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

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

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

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

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

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

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

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

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