语句"/>
Verilog中的iniial和always语句
首先说一下结构说明语句,Verilog语言中的任何过程模块都从属于以下4种结构的说明语句:(1)initial说明语句;
(2)always说明语句;
(3)task说明语句;
(4)function说明语句。
一个程序模块可以有多个initial和always过程快。每个initial和always说明语句在仿真的一开始同时立即执行。initial语句只执行一次,而always语句则不断地重复活动着,直到仿真过程结束。但always语句后紧跟的过程块是否运行,则要看它的出发条件是否满足,如满足则运行过程中执行一次,再次满足再运行一次,直至仿真结束。
1 initial语句
initial语句格式如下:
initial
begin
语句1;
语句2;
........
语句n;
end
举例说明:
【例1】用initial快对存储器变量赋值。
initialbeginareg=0;//初始化寄存器aregfor(index=0;index<size;index=index+1)memory[index]=0;//初始化一个memoryend
在这个例子中initial语句在仿真开始时对各变量进行初始化,这个初始化过程不需要任何仿真时间,即在0ns时间内,便可完成存储器的初始化工作。
【例2】用initial语句来生成激励波形。
initialbegininput ='b000000;//初始时刻0#10 input=‘b011001;#10 input=‘b011011;#10 input=‘b011000;#10 input=‘b001000;end
从这个例子中,可以看到initial语句的另一个用途,即用initial语句来生成激励波形作为电路的测试仿真信号。
2 always语句
always语句在仿真过程中是不断活动着的,但always语句后跟着的过程块死否执行,则要看它的触发条件是否满足,如满足则运行过程块一次;如不满足,则不断地循环执行。其声明格式如下:
always <时序控制> <语句>
如果一个always语句没有时序控制,则这个always语句将会使仿真器产生死锁,如
always areg=~areg;
这个always语句将会生成一个0延迟的无限循环跳变过程,这时会发生仿真死锁。
always的时间控制可以是沿触发也可以是电平触发的,可以是单个信号也可以多个信号,中间需要用关键字or连接
always @(posedge clock or posedge reset)
摘自《Verilog数字系统设计教程》第四版,夏宇闻,韩彬编著
更多推荐
Verilog中的iniial和always语句
发布评论