1、结构描述形式
从电路结构的角度来描述电路模块,称为结构描述形式。
Verilog HDL中定义了26个有关门级的关键字,比较常用的有8个:
and nand nor or xor xnor buf not。
其调用格式为:
门类型 《实例名》(输出,输入1,输入2,。。。。,输入N)
eg. nand na01(na_out, a, b, c);
表示一个名字为na01的与非门,输出为na_out,输入为a,b,c。
2、数据流描述形式
对线型变量进行操作,就是数据流描述形式。数据流描述一般采用assign连续赋值语句来实现,主要用于实现组合功能。连续赋值语句右边所有的变量受持续监控,只要这些变量有一个发生变化,整个表达式就被重新赋值给左端。
其格式为:
assign L_s = R_s;
3、行为描述形式
从功能和行为的角度来描述一个实际电路,称为行为级描述形式。行为描述主要包括过程结构、语句块、时序控制、流控制四个方面,主要用于时序逻辑功能的实现。
1、过程结构
过程结构采用下面四种过程模块来实现:
initial模块 always模块 任务(task)模块 函数(function)模块
(1)initial模块
在进行仿真时,一个initial模块从模拟0时刻开始执行,且在仿真过程中只执行一次,在执行完一次后,该initial就被挂起,不再执行。如果仿真中有两个initial模块,则同时从0时刻开始执行
initial模块是面向仿真的,是不可综合的,通常被用来描述测试模块的初始化、监视、波形生成等功能。
其格式为:
initial
begin/fork
块内变量说明
时序控制1 行为语句1;
。。。。
时序控制n 行为语句n;
end/join
其中,begin/end块定义语句是串行执行的,而fork/join块语句中的语句定义是并行执行的。
(2)always模块
always模块是一直重复执行且可综合的,多个always模块是同时并行执行的。其格式为:
always@(敏感时间列表)
begin/fork
块内变量说明
时序控制1 行为语句1;
。。。。
时序控制n 行为语句n;
end/join
2、语句块
语句块就是在initial或always模块中位于begin.。.end/fork.。.join块定义语句之间的一组行为语句。
(1)begin.。.end
串行块,块内的语句逐次逐条顺序执行。
(2)fork.。.join
并行块,块内的语句都是各自独立地同时开始执行。
3、时序控制
Verilog HDL提供两种类型的显示时序控制:延时控制和事件控制。
(1)延时控制
其格式如下:
# 延时数 表达式;
延时控制只能在仿真中使用,是不可综合的。在综合时,所有的延时控制都会被忽略。
(2)事件控制
分为两种:边沿触发事件和电平触发事件控制。
边沿触发:上升沿posedge,下降沿negedge。
4、流控制
流控制语句包括3类:跳转、分支、循环。
(1)if语句
else分支可缺省,但会生成本不期望的锁存器,所以不要省去。
(2)case语句
其格式如下:
case(变量)
情况1:语句1 ;
。。。。。
情况n:语句n;
default: 语句n+1;
endcase
default语句缺省也会生成锁存器,所以不要省去。
if语句是串行执行的,case语句是并行执行的,选用if语句要占用额外的硬件资源。
(3)循环语句
for循环。
while循环。
forever循环:forever语句必须写在initial模块中,用于产生周期性波形。
repeat循环:执行指定的循环数,如果循环计数表达式的值不确定(x或z),那么循环次数按0处理,其格式:
repeat(表达式)
begin
。。。。。
end
编辑:jq
全部0条评论
快来发表一下你的评论吧 !