在顺序块(begin ....end)和并行块(fork....join)中可以给块命名。一般用于testbench仿真激励文件中,对每条语句执行的顺序及时序进行自由设计。fork....join无法综合。
例如:
begin 块1
块内声明语句
语句1
语句2
end
fork 块2
块内声明语句
语句1
语句2
join
这样的好处有3点:
1. 可以在块内定义局部变量,只在这个块内使用;
2. 可以被其他语句调用,例如disable语句;
3. 因为变量是静态的,所有的变量只有一个唯一的存储地址,因此块名可用于确认变量值。
在begin-end语句块中,begin-end和fork-join块可以相互嵌套,也可以自我嵌套。如果begin-end中包含有局部声明,则他必须被命名(必须有一个标志)。如果要禁止一个begin-end块,那么被禁止的begin-end必须有名字。
例如如下代码:
module clk_tsb( );
reg clk1,clk2,clk3,clk4,clk5,clk6;
initial
begin
clk1 = 0;
clk2 = 0;
clk3 = 0;
#10 clk1 = 1;
fork
#20 clk2 = 1;
#30 clk3 = 1;
join
end
initial
begin
clk4 = 0;
clk5 = 0;
clk6 = 0;
fork
#10 clk4 = 1;
begin
#10 clk5 = 1;
#20 clk5 = 0;
end
#30 clk6 = 1;
join
end
endmodule