~ cd блокирующие и неблокирующие присваивания в verilog
В Verilog существует два основных типа присваиваний: блокирующее и неблокирующее. Блокирующее присваивание выполняется последовательно, не допуская параллельных операций, в то время как неблокирующее присваивание позволяет выполнить операции параллельно. Разберем их синтаксис и приведем примеры для наглядного понимания.
Блокирующее присваивание Verilog
В синтаксис 1 показывается блокирующее присваивание variable_b в variable_a.
variable_a = variable_b;
Пример блокирующего присваивания. Если тактового сигнала восходящий фронт, все 3 переменные будут равны variable_a, variable_b и variable_c. RTL схема: выход variable_b соединенный с информационными входами 2-х регистров variable_a и variable_c.
always @(posedge clk)
begin
variable_a = variable_b;
variable_c = variable_a;
endНеблокирующее присваивание Verilog
В синтаксис 2 показывается неблокирующее присваивание variable_a в variable_b:
variable_a <= variable_b;
Пример неблокирующего присваивания. При восходящем фронте тактового сигнала variable_a поменяет свое значение на variable_b, а variable_c присваивает старое значение variable_a. RTL схема: 3 последовательно подключенных регистра, значения которые передается из variable_b в variable_a, а из variable_a в variable_c.
always @(posedge clk)
begin
variable_a <= variable_b;
variable_c <= variable_a;
endЗаключение
Таким образом, блокирующие и неблокирующие присваивания в Verilog имеют свои особенности и применяются в зависимости от требуемого функционала и последовательности выполнения операций в цифровых схемах.
Надеюсь, что данное описание поможет вам освоить блокирующие и неблокирующие присваивания в Verilog.