Verilog基础语法(6)之initial块

语法格式

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系统任务,它告诉仿真器终止当前的仿真。

如果最后一个块有30个时间单位的延迟,如下图所示,仿真将在30个时间单位结束,从而杀死了当时处于活动状态的所有其他initial块。

initial begin
	#30 $finish;
end
  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值