verilog中没有always的@如何理解?

2024-11-17 09:58:51
推荐回答(2个)
回答1:

----------------------------------------
@(条件表达式) do_something;
表示等待条件表达式满足,然后do_something,然后就往下走了。通常用在testbench中,不可综合。

------------------------------------
always @(a or b or c) begin
do_something;
end
表示不停地监测a、b、c,一旦它们任何一个发生变化,就立刻do_something,并且这个“监测”是始终存在的。这种电路综合出来时组合逻辑电路。

------------------------------------
always @(posedge clk) begin
do_something;
end
表示不停地监测clk的上升沿,一旦监测到,就立刻do_something,并且这个“监测”是始终存在的。这种电路综合出来时时序逻辑电路。
当然,也可以把posedge改成negedge,那就成了监测下降沿。
带异步复位端的寄存器的写法类似是这样的
always @(posedge clk or negedge rst_n) begin // reset is active low
if(rst_n) reset_process;
else set_register_value;
end

//////////////////////////////////////

你的截图中显示的是testbench中的task中用到的“@事件”,它属于上面所说的第一种情况,是不可综合的,也就是根据这些代码不能生产实际的电路,只能用来仿真。

回答2:

我想问一下多个@(posedge clk)语句一起是并行执行还是串行执行的呢?