Verilog学习笔记基本语法篇(八)········ 结构说明语句

Verilog中的任何过程都可以属于以下四种结构的说明语句;

1) initial;  2) always;  3) task;   4) function;

1) initial说明语句;

一个程序中的 initial 和 always 的次数是不受限制的,他们都是在仿真的一开始同时开始运行的。initial 只执行一次,而 always语句则是不断地重复活动,直到仿真活动结束、但是always 后面的过程快是否运行,则要看他的触发条件是否满足,满足则运行一次,再满足再运行,直至仿真结束。

格式:

initial

begin

语句1;

语句2;

...

语句n;

end

一个模块中可以有多个initial块,他们都是并行运行的。 initial 块常用于测试文件和虚拟模块的编写,用来产生仿真测试信号和设置信号记录等仿真环境。

2)always说明语句

其声明格式如下:

always  <时序控制>  <语句>

如果always没有时序控制,则会产生仿真器的死锁。 如:always  areg=~areg;这将产生0延迟的无限循环跳变过程,这时发生仿真死锁。

always 的时序控制可以是边沿触发也可以是电平触发,可以单个信号亦可以十多个信号,中间用关键词or链接。

A)  always @(posedge clock or posedge reset)

begin

....

end

B)  always @(posedge clock or posedge reset)

begin

....

end

上述中,A是由两个边沿触发的always只要其中一个沿出现,就立即执行一次过程块。B是有a b c 三个信号电平触发的,只要a b c 中任何一个发生变化,从高到低或从低到高都会执行过程块。

边沿触发的always 块常常描述时序行为,如有限状态机,通常对应于寄存器组和门级组合逻辑的结构。而电平触发的always块常常用来描述组合逻辑的行为。

在always语句中,由关键词or 链接的多个事件名或者信号名组成的列表称为敏感列表。用关键词or或者','表示这种关系。如果输入的逻辑变量较多,那么编写敏感列表会很繁琐而且容易出错。针对这种情况,Verilog中可以用@* 和 @(*),他们表示对后面语句块中所有的输入变量的变化是敏感的。

电平敏感的时序控制:

Verilog用关键字wait 来表示等待电平敏感的条件为真:

如: always

wait  (count_enabal)  #20 count = count+1;

这个例子中,仿真器连续见识count_enable的值,其值为0,则不执行后面语句。如果其值为1,则20个单位后执行这个语句,如果count_enable始终为1,那么count每20个单位时间+1。

 在always中,被赋值的只能是寄存器类型的变量,如reg,integer, real, time, realtime.等

上一篇:gerrit 使用笔记


下一篇:Linux磁盘及文件系统管理 3---- 文件系统