1. 关键词:initial,always
过程结构语句有两种,initial 与 always 语句,它们是行为建模的 2 种基本语句。
一个模块可以包含多个 initial 和 always 语句,但 2 种语句不能嵌套使用。
initial 和 always 语句内部可以理解为顺序执行的(非阻塞赋值除外)。
每个 initial 和 always 语句都会产生一个独立的控制流,执行时间都是从 0 时刻开始的。
2. initial 语句
initial 语句从 0 时刻开始执行,只执行一次
,多个 initial 块之间是相互独立的。
如果 initial 块包含多个语句,需要使用关键字 begin 和 end 组成一个块语句。
如果 initial 块内只有一条语句,关键字 begin 和 end 可使用也可不使用。
tip
个人建议,即使 initial 块内只有一条语句,也尽量使用 begin 和 end 语句,这样可以增强代码的可读性。
initial 是不可综合的,经常用于初始化,信号检测等。
示例如下
wire a ;
initial begin
a = 0 ;
# 5 ;
a = 1 ;
# 10 ;
a = 0 ;
# 15 ;
a = 1 ;
end
3. always 语句
与 initial 相反,always 语句是 重复执行的
。
always 语句块从 0 时刻开始执行其中的行为语句;当执行完最后一条语句后,就再次执行 always 语句中的第一条语句,如此循环反复。
由于循环执行的特点,always 语句多用于仿真时钟的产生,信号行为的检测。
示例如下
parameter PERIOD = 100 ;
reg clk ;
always #(PERIOD/2) clk = ~clk ;