Verilog系列:【4】initial和always区别
Verilog中的过程性语句结构主要有以下两种:
-
intial语句;
- always语句;
在数字设计或者验证平台的搭建过程中,一个模块可以包含任意多个initial语句和always语句,并且这些语句在同一个模块中是并行执行的(需要注意避免竞争情况出现,特别是多个进程对同一个信号的控制)。两者的主要区别如下表所示:
initial | always |
不可综合,可用来构建仿真平台和仿真模型 | 可综合 |
仿真0时刻开始运行,并且按照其中指定的序列顺序执行 | 仿真0时刻开始运行,可以按照其中敏感信号列表的变化反复执行 |
其中的各条过程性语句仅执行一次,除非使用forever和repeat等结构构成内循环从而可实现多次执行(仿真时钟的产生) | 可以根据敏感信号列表信号的变化情况反复执行,除非在结构中使用了wait等挂起结构 |
...... initial begin clk = 1'b0; forever #PERIOD clk = ~clk; end ...... | ...... always@(posedge clk) begin ... reg_1 <= reg_0; reg_2 <= reg_1; ... end ...... |
reg var_init = 1'b0; | reg var_init; initial begin var_init = 1'b0; end |