В чем разница между = и <= в verilog?

Я новичок здесь, как в Verilog... Я хочу спросить о разнице между = и <= в этой программе? а как распечатать значение данных?

    module always_example();
reg clk,reset,enable,q_in,data;

always @ (posedge clk)
if (reset)  begin
   data <= 0;
end else if (enable) begin   
   data <= q_in;
end
// if i put     $print("data=%d", data);   there is error
endmodule

2 ответа

Решение

<= неблокирующее назначение. Он используется для описания последовательной логики, как в вашем примере кода. См. IEEE Std 1800-2012, раздел 10.4.2 "Неблокирующие процедурные назначения".

= для блокировки назначений. Он используется для описания комбинационной логики.

См. Также Неблокирующие назначения в Verilog Synthesis, Стили кодирования, которые убивают!

Ты можешь использовать $display вместо $print напечатать значение переменных. См. Также стандарт IEEE 1800-2012, раздел 21.2 "Отображение системных задач".

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

<= неблокирует по своей природе. Это означает, что в always блок, каждая строка будет выполняться параллельно. Отсюда ведется реализация последовательных элементов.

Другие вопросы по тегам