EDA技术
主讲:信息与通信学院谢跃雷(副教授)
6/30/2017
1
GUET School of Information & Communications
第三讲 Verilog HDL行为设计
结构化的过程语句
过程赋值语句
时序控制。
条件语句
分支语句
循环语句
6/30/2017
2
GUET School of Information & Communications
行为级描述是对系统的高抽象级描述。在这个抽象级,注重的是整个系统的功能而不是实现。
Verilog有高级编程语言结构用于行为描述,包括:
wait, while, if then, case和forever,for等
行为描述:从电路的外部行为角度进行描述,即描述电路的输入与输出之间的关系。
行为建模
6/30/2017
3
GUET School of Information & Communications
一、结构化过程语句
Verilog中有两种结构化过程语句:initial和always语句,是行为建模的两种基本语句,所有的行为语句只能出现在这两种结构化过程语句里。
always语句代表一个独立的执行过程(或过程块)
initial语句仅用于仿真
这两种语句不能嵌套使用。
verilog本质上是并发的,这些块并发执行,而不是顺序执行。
6/30/2017
4
GUET School of Information & Communications
. always语句
循环执行
按顺序执行其中的语句,最后一条语句执行完后,再次执行第一条语句
一个模块中若有多个always块,则它们同时执行。
module………..;
……..
reg clock;
always
clock = ~clock;
endmodule
always块语句是verilog行为建模的主要块语句,是学习的重点。
6/30/2017
5
GUET School of Information & Communications
二、过程赋值语句
在always过程块中的赋值称为过程赋值。
左边的信号必须是寄存器类型(如reg类型)
等式右边可以是任何有效的表达式数据类型也没有限制。
如果一个信号没有声明则缺省为wire类型。使用过程赋值语句给wire赋值会产生错误。
Verilog包括两种过程赋值语句
阻塞赋值
非阻塞赋值
6/30/2017
6
GUET School of Information & Communications
使用“=”作为赋值符
阻塞赋值语句按顺序执行,一条语句完全执行完后,才执行下一条语句,即有“阻塞”作用。
reg x, y, z;
reg [15:0] reg_a, reg_b;
interget counter;
always @(*)
begin
count=count +1;
reg_b[15:13]={x, y, z};
reg_a=regb+count;
end
6/30/2017
7
GUET School of Information & Communications
使用“<=”作为赋值符
非阻塞赋值语句并行执行,即一条语句不会“阻塞”其它语句执行,充许赋值调度。
reg x, y, z,clk;
reg [15:0] reg_a, reg_b;
interget counter;
always @ (clk)
if (clk)
begin
count<=count +1;
reg_b[15:13]<={x, y, z};
reg_a<=regb+count; end
end
6/30/2017
8
GUET School of Information & Communications
非阻塞赋值常用来描述多个数据并发传输的行为。
always @ ( posedge clock)
begin
reg1<= in1;
reg2<= in2 ^ in3;
reg3<= reg1;
end
在每个时钟上升沿时读取in1,in2,in3和reg1,计算右侧表达式,该值临时保存。
对左侧的赋值在相应的调度时刻发生。
每个赋值操作在被调度的仿真时刻完成。
6/30/2017
9
GUET School of Information & Communications
阻塞与非阻塞语句使用原则
组合逻辑模型,用阻塞赋值。
时序逻辑电路建模,使用非阻塞赋值。
锁存器电路建模,使用非阻塞赋值。
时序和组合逻辑电路混合时,用非阻塞。
在同一个always块不要同时使用两种
EDA技术3 来自淘豆网m.daumloan.com转载请标明出处.