块语句是一种将语句组合在一起的方法,这样它们在语法上就像一条语句。Verilog HDL 中有两种块:
- 顺序块,也称为begin-end block
- 并行块,也称fork-join block
顺序块由关键字 begin 和 end 限定,顺序块中的过程语句应按指定顺序依次执行。并行块由关键字 fork 和 join 限定,并行块中的过程语句应同时执行。下面分别介绍:
1,顺序块
顺序块应具有以下特征:
- 语句应依次执行。
- 每条语句的延迟时间应对应于执行前一条语句所需的仿真时间。
- 在执行完最后一条语句后,控制权应从过程块中流出。
下表1给出了顺序块的正式语法:
表1:顺序块语句的语法
例1:一个顺序块能使下面两个赋值产生确定的结果:
begin
areg = breg;
creg = areg; // creg stores the value of breg
end
例子1在执行第一个赋值后,areg会在编译器执行第二个赋值之前被更新。
例2:延时控制可用于顺序块中,在时间上将两个赋值分开。
begin
areg = breg;
@( posedge clock) creg = areg; // assignment delayed until
end // posedge on clock
例3:下面的示例展示了如何将顺序块和延迟控制结合起来用于指定时序波形:
parameter d = 50; // d declared as a parameter and
reg [7:0] r; // r declared as an 8-bit reg
begin // a waveform controlled by sequential delay
#d r = 'h35;
#d r = 'hE2;
#d r = 'h00;
#d r = 'hF7;
#d -> end_wave; //trigger an event called end_wave
end
2,并行块
并行代码块应具有以下特征:
- 语句应同时执行。
- 执行每个语句的延迟时间应与进入过程块的仿真时间相对应。
- 语句的延迟控制可用于为赋值操作提供时间排序。
- 当执行最后一条按时间排序的语句后,过程块结束。
并行块的语法如下表2所示:
表2:并行块的语法规则
下面的示例使用了并行块对波形进行描述:
fork
#50 r = 'h35;
#100 r = 'hE2;
#150 r = 'h00;
#200 r = 'hF7;
#250 -> end_wave;
join
顺序块和并行块都可以通过在关键字 begin 或 fork 后添加name_of_block 来命名。块语句命名后允许为代码块声明局部变量、参数。块语句内声明的所有变量都应是静态的,也就是说,所有变量都有一个唯一的位置,离开或进入过程块都不会影响其中存储的值,而且过程块名称提供了在任何仿真时间唯一标识所有变量的方法。
点赞加关注博主(ID:FPGA小飞)的博文,咱们一起系统学习verilog最终标准IEEE Std 1364-2005吧!