集成电路技术分享

 找回密码
 我要注册

QQ登录

只需一步,快速开始

搜索
查看: 1168|回复: 1

Verilog HDL的基本语法

[复制链接]
LYF 发表于 2021-8-9 15:53:29 | 显示全部楼层 |阅读模式
3.7.结构说明语句
Verilog语言中的任何过程模块都从属于以下四种结构的说明语句。
1) initial说明语句
2) always说明语句
3) task说明语句
4) function说明语句
initial和always说明语句在仿真的一开始即开始执行。initial语句只执行一次。相反,always语
句则是不断地重复执行,直到仿真过程结束。在一个模块中,使用initial和always语句的次数是不
受限制的。task和function语句可以在程序模块中的一处或多处调用。其具体使用方法以后再详细地
加以介绍。这里只对initial和always语句加以介绍。
3.7.1.initial语句
initial语句的格式如下:
initial
begin
语句1;
语句2;
......
语句n;
end
举例说明:
[例1]:
initial
begin
areg=0; //初始化寄存器areg
for(index=0;index<size;index=index+1)
memory[index]=0; //初始化一个memory
end
在这个例子中用initial语句在仿真开始时对各变量进行初始化。
[例2]:
initial
begin
inputs = 'b000000; //初始时刻为0
#10 inputs = 'b011001;
44
第三章 Verilog HDL 基本语法
--------------------------------------------------------------------------------------------------------------------------------------------
------
#10 inputs = 'b011011;
#10 inputs = 'b011000;
#10 inputs = 'b001000;
end
从这个例子中,我们可以看到initial语句的另一用途,即用initial语句来生成激励波形作为电路的
测试仿真信号。一个模块中可以有多个initial块,它们都是并行运行的。initial块常用于测试文件
和虚拟模块的编写,用来产生仿真测试信号和设置信号记录等仿真环境。
3.7.2.always语句
always语句在仿真过程中是不断重复执行的。
其声明格式如下:
always <时序控制> <语句>
always语句由于其不断重复执行的特性,只有和一定的时序控制结合在一起才有用。如果一个always
语句没有时序控制,则这个always语句将会发成一个仿真死锁。见下例:
[例1]:always areg = ~areg;
这个always语句将会生成一个0延迟的无限循环跳变过程,这时会发生仿真死锁。如果加上时序控制,
则这个always语句将变为一条非常有用的描述语句。见下例:
[例2]:always #half_period areg = ~areg;
这个例子生成了一个周期为:period(=2*half_period) 的无限延续的信号波形,常用这种方法来描
述时钟信号,作为激励信号来测试所设计的电路。
[例3]:reg[7:0] counter;
reg tick;
always @(posedge areg)
begin
tick = ~tick;
counter = counter + 1;
end
这个例子中,每当areg信号的上升沿出现时把tick信号反相,并且把counter增加1。这种时间控制是
always语句最常用的。
always 的时间控制可以是沿触发也可以是电平触发的,可以单个信号也可以多个信号,中间需要用
关键字 or 连接,如:
always @(posedge clock or posedge reset) //由两个沿触发的always块
begin
……
end

always @( a or b or c ) //由多个电平触发的always块
begin
……
45
第三章 Verilog HDL 基本语法
--------------------------------------------------------------------------------------------------------------------------------------------
------
end
沿触发的always块常常描述时序逻辑,如果符合可综合风格要求可用综合工具自动转换为表示时序逻
辑的寄存器组和门级逻辑,而电平触发的always块常常用来描述组合逻辑和带锁存器的组合逻辑,如
果符合可综合风格要求可转换为表示组合逻辑的门级逻辑或带锁存器的组合逻辑。一个模块中可以有
多个always块,它们都是并行运行的。
3.7.3.task和function说明语句
task和function说明语句分别用来定义任务和函数。利用任务和函数可以把一个很大的程序模块分解
成许多较小的任务和函数便于理解和调试。输入、输出和总线信号的值可以传入、传出任务和函数。
任务和函数往往还是大的程序模块中在不同地点多次用到的相同的程序段。学会使用task和function
语句可以简化程序的结构,使程序明白易懂,是编写较大型模块的基本功。
lihongkun16 发表于 2021-8-10 14:31:25 | 显示全部楼层
Verilog HDL的基本语法
您需要登录后才可以回帖 登录 | 我要注册

本版积分规则

关闭

站长推荐上一条 /1 下一条

QQ|小黑屋|手机版|Archiver|fpga论坛|fpga设计论坛 ( 京ICP备20003123号-1 )

GMT+8, 2024-11-15 19:26 , Processed in 0.059397 second(s), 19 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表