verilog语句执行顺序的疑问?

2024-11-06 07:59:01
推荐回答(3个)
回答1:

可综合的都是并行执行的。其实也不难理解,verilog是硬件语言,也就可以看成是一个电路。在实际的电路中没办法延迟,没办法让一边先通电,再让另一边通电,所以一切都是同时进行的。

这并行的前提都是“可综合”。

如果是写testbench,会用到不可综合的模块,这些模块是行为级的,在实际电路中无法实现。比如task,比如阻塞赋值等等,这些都是有顺序的。

回答2:

所有块是并行的。always块和forever通电后只要满足触发条件就始终执行,initial是仿真用的,只执行一次。
举例如下:
always@(posedge clk)
begin
a=b;
c=d;
end

always@ (posedge clk or negedge rst)
if(scl)
df=1'b1;
else df=1'b0;
上面的两个块为并行。在时钟上升沿到来时同时判定两个always块内逻辑是否符合,符合则执行相关语句。

回答3:

各个ALWAYS模块都是并行执行的,这比较难理解,你需要慢慢理解