Verilog中的块语句有两种,一种是顺序块,以begin end引导,另一种是并行快,以fork join引导。
1. 顺序块
顺序块已经用的很多了,通常在initial引导的结构中使用,块内的语句顺序执行,每条语句的延迟时间是相对于前一天语句的仿真时间而言的。
例1:
begin
a_reg = b_reg;
c_reg = a_reg; // c_reg 的值即为b_reg的值
end
首先a_reg 的值更新为b_reg 的值,然后c_reg的值更新为a_reg的值,因为这两条赋值语句之间没有任何延时,所以c_reg的值实为b_reg的值。
例2:
parameter d=50;
reg [7:0]r;
begin
#d r = 'h35;
#d r = 'hE2;
#d r = 'h00;
#d r = 'hF7;
#d -> end_wave; // -> 表示触发事件end_wave使其翻转
end
2. 并行快
并行快有以下特点
1)块内语句同时执行
2)块内每条语句的延时都是相对于进入该块的时间
3)延迟时间是用来给赋值语句提供执行时序的
4)当按时间时序排序在最后的语句执行完后 或者 一个disable语句执行时,跳出该程序块。
例3:
parameter d=50;
reg [7:0]r;
fork
#d r = 'h35;
#(2*d) r = 'hE2;
#(3*d) r = 'h00;
#(4*d) r = 'hF7;
#(5*d) -> end_wave; // 触发事件end_wave
join
例3和例2生成的波形是一样的