В чем разница между = и <= в 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
блок, каждая строка будет выполняться параллельно. Отсюда ведется реализация последовательных элементов.