按照界定不同分为两种:
(1)begin……end,用来组合需要顺序执行的语句,被称为串行块。例如:
parameter d = 50;
reg[7:0] r;
begin //由一系列延迟产生的波形
# d r = ' h35 ; //语句1
# d r = ' hE2 ; //语句2
# d r = ' h00 ; //语句3
# d r = ' hF7 ; //语句4
# d –> end_wave; //语句5,触发事件end_wave
end
串行块的执行特点如下:
串行块内的各条语句是按它们在块内的语句逐次逐条顺序执行的,当前一条执行完之后,才能执行下一条。如上例中语句1至语句5是顺序执行的。
块内每一条语句中的延时控制都是相对于前一条语句结束时刻的延时控制。如上例中语句2的时延为2d。
在进行仿真时,整个语句块总的执行时间等于所有语句执行时间之和。如上例中语句块中总的执行时间为5d。
(2)fork……join,用来组合需要并行执行的语句,被称为并行块。例如:
parameter d = 50;
reg[7:0] r;
fork //由一系列延迟产生的波形
# d r = ' h35 ; //语句1
# 2d r = ' hE2 ; //语句2
# 3d r = ' h00 ; //语句3
# 4d r = ' hF7 ; //语句4
# 5d –> end_wave; //语句5,触发事件end_wave
join
并行块的执行特点为:
并行语句块内各条语句是各自独立地同时开始执行的,各条语句的起始执行时间都等于程序流程进入该语句块的时间。如上例中语句2并不需要等语句1执行完才开始执行,它与语句1是同时开始的。
块内每一条语句中的延时控制都是相对于程序流程进入该语句块的时间而言的。如上例中语句2的延时为2d。
在进行仿真时,整个语句块总的执行时间等于执行时间最长的那条语句所需要的执行时间,如上例中整个语句块的执行时间为5d。
(3)混合使用
在分别对串行块和并行块进行了介绍之后,还需要讨论一下二者的混合使用。混合使用可以分为下面两种情况。
串行块和并行块分别属于不同的过程块时,串行块和并行块是并行执行的。例如一个串行块和并行块分别存在于两个initial过程块中,由于这两个过程块是并行执行的,所以其中所包含的串行语句和并行语句也是同时并行执行的。在串行块内部,其语句是串行执行的;在并行块内部,其语句是并行执行的。
当串行块和并行块嵌套在同一过程块中时,内层语句可以看作是外层语句块中的一条普通语句,内层语句块什么时候得到执行是由外层语句块的规则决定的;而在内层语句块开始执行时,其内部语句怎么执行就要遵守内层语句块的规则。
文章评论(0条评论)
登录后参与讨论