所有的always块是并行的,达到触发就运行,assign也是,beign-end中是顺序,但这个所谓的顺序也是需要看实际情况,所以很多在begin-end中依然用if-else或case来解决,verilog重要的是时序,你可以在编完程序后做波形图来看,重点是上升沿下降沿等变化和赋值,可以用功能仿真来观察时序效果
不能单纯的看语言,看到语言应该想到相应的硬件才可以。
加入两个电路模块a和b,a中输出的信号送到b的输入,也就是b需要a先得出这个信号,那么在语言中,就是顺序的。反之,如果a,b两个模块的输入和输出之间的信号没有什么联系,就可以说二者在语言上是并行执行的。举个例子吧
begin //顺序的,c的赋值在a之后。
a=~b;
c=~a;
end
begin //并行的,a与c是同时赋值的
a=~b;
c=b;
end
个人理解,仅供参考!
initial中的语句顺序运行,其他都是并行执行的。应该区分并行与timing先后的概念。
尽量不要在一个always对多个寄存器赋值,这样你就搞清楚了,不同的always和assign语句之间都是并行的
所有always语句并行,always内部顺序执行,assign也是并行