语法格式
initial块可以理解为一个初始化块,在initial的起始位置的语句在0时刻即开始执行,之后如果遇到延时,则延时之后执行接下来的语句。其语法如下:
initial
[single statement]
initial begin
[multiple statements]
end
如果initial中有多条语句,则置于begin …end之间。
initial块的作用
初始块是不可综合的,因此不能将其转化为带有数字元素的硬件原理图。因此初始块除了在仿真中使用外,并没有太大的作用。这些块主要用于初始化变量和用特定的值驱动设计端口。
- 注意:在芯片逻辑设计中,initial块确实只能用于行为仿真,但是在FPGA设计中,简单的使用initial进行变量的初始化是可以综合的。
例如:
reg a, b, c;
initial begin
a = 0;
b = 0;
c = 0;
end
但我们更多地在变量定义时刻就进行了初始化,这是推荐的用法。
例如:
reg a = 0;
或者使用复位信号进行初始化,但这会增加综合布线的负担,可以有意识的减少,除非不得不。
例如:
reg a;
always@(posedge i_clk) begin
if(i_rst) begin
a <= 0;
end
end
initial块的开始和结束
在仿真开始时,在时间0单位开始一个初始块。在整个仿真的过程中,这个代码块只执行一次。一旦initial块中的所有语句被执行,initial块的执行就结束了。
如果initial块中就一条语句,那么开始也是结束,语句执行完就结束这个initial块,如:
给信号b分配了一些值,但是这只发生在执行前一条语句的10个时间单位之后。这意味着a首先被分配给给定的值,然后在10个时间单位之后,b被分配给0。
initial块的数量
可以有多个(任意多)initial块。多个initial块是同时执行的,都是从时刻0开始执行。
下图所示的代码有三个初始块,所有的初始块都在同一时间启动并并行运行。然而,根据每个初始块中的语句和延迟,完成该块所需的时间可能会有所不同。
$finish是一个Verilog系统任务,它告诉仿真器终止当前的仿真。文章来源:https://www.toymoban.com/news/detail-764140.html
如果最后一个块有30个时间单位的延迟,如下图所示,仿真将在30个时间单位结束,从而杀死了当时处于活动状态的所有其他initial块。文章来源地址https://www.toymoban.com/news/detail-764140.html
initial begin
#30 $finish;
end
到了这里,关于Verilog基础语法(6)之initial块的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!