📅  最后修改于: 2021-01-11 14:45:47             🧑  作者: Mango
块语句是两个或多个语句的组合,在语法上类似于单个语句。 Verilog中有两种类型的块:
如果应执行多个语句,则可以使用这些块。顺序块中的所有语句将以给定顺序顺序执行。
如果时序控制语句出现在一个块中,则在该延迟后将执行下一条语句。顺序块应由关键字begin和end分隔。
并行块中的所有语句都同时或并行执行。这意味着即使前一条语句包含时序控制语句,也不会延迟下一条语句的执行。并行块应由关键字fork和join分隔。
语句使用begin和end关键字包装,并以给定顺序顺序执行。相对于上一条语句的执行时间来处理延迟值。
在执行块中的所有语句之后,控制权可能会传递到其他地方。
句法
顺序块语句遵循以下语法:
begin: name
statement1;
…………..
end
特点
顺序块具有以下特征,例如:
例
module design0;
bit [31:0] data;
// initial block starts at time 0
initial begin
// After 10 time units, data becomes 0xfe
#10 data = 8'hfe;
$display ("[Time=%0t] data=0x%0h", $time, data);
// After 20 time units, data becomes 0x11
#20 data = 8'h11;
$display ("[Time=%0t] data=0x%0h", $time, data);
end
endmodule
在上面的示例中,由于相对性,开始和结束块中的第一条语句将以10个时间单位执行,第二条语句将以30个时间单位执行。执行上一条语句后,这是20个时间单位。
ncsim> run
[Time=10] data=0xfe
[Time=30] data=0x11
ncsim: *W,RNQUIE: Simulation is complete.
并行块可以同时执行语句,并且可以使用延迟控制来提供分配的时间顺序。通过将语句包装在fork和join关键字中来并行启动语句。
句法
并行块具有以下简化语法:
fork: name
statement;
…………
join
特点
并行块具有以下特征:
例
initial begin
#10 data = 8'hfe;
fork
#20 data = 8'h11;
#10 data = 8'h00;
join
end
在上面的示例中,fork和join块将在以10次为单位执行该语句后启动。
该块中的语句将并行执行,并且第一个语句将为数据分配8'h00的值,因为该延迟是在fork-join启动后的10倍单位。
再经过10个时间单位后,将启动第一个语句,数据将获得值8'h11。
initial begin
#10 data = 8'hfe;
fork
#10 data = 8'h11;
begin
#20 data = 8'h00;
#30 data = 8'haa;
end
join
end
上面的示例中有一个begin-end块,并且begin-end块中的所有语句将顺序执行。尽管如此,该块本身将与其他语句一起并行启动。数据将以20时间单位为8'h11,以30时间单位为8'h00,以60时间单位为8'haa。
通过在begin和fork关键字之后添加name_of_block ,可以命名顺序块和并行块。这样,可以在disable语句中引用该块。
begin: name_seq
[statements]
end
fork: name_fork
[statements]
join