当前位置:文档之家› verilog行为建模

verilog行为建模

▪ 循环执行 ▪ 按顺序执行其中的语句,最后一条语句执行完后,再次执行第一条语句
module clock_gen (clock); output clock; reg clock; initial clock=1’b0; always #10 clock = ~clock; endmodule
▪ always语句从仿真0时刻起,每隔10个时间单位执行一次clock信号取反 操作。
同时进行端口/数据声明和初始化
module adder (sum,co,a,b,ci);
output reg [7:0] 位sum
output reg 化1位co
sum=0;//初始化8 co=0;//初始
input [7:0] a, b;
input
ci;
…..
endmodule
2. always语句
▪ 在每个时钟上升沿时读取in1,in2,in3和reg1,计算右 侧表达式,该值临时保存。
▪ 对左侧的赋值在相应的调度时刻发生。 ▪ 每个赋值操作在被调度的仿真时刻完成。
▪ 使用非阻塞赋值来避免竞争
//使用阻塞语句的两个并行always块 always @ ( posedge clock)
a=b; always @ ( posedge clock)
b=a; //使用非阻塞语句的两个并行always块 always @ ( posedge clock)
x=0; y=0; z=1; counter=0; reg_a= 16’b0; reg_b=reg_a; #15 reg_a[2] <=1’b1; #10 reg_b[15:13]<={x, y, z} count<=count +1; end
▪ reg_a[2]=1在15时 刻执行
▪ reg_b[15:13]={x,y, z}在时刻10执行。
5.2 过程赋值语句
▪ 在过程块中的赋值称为过程赋值。 ▪ 在过程赋值语句中表达式左边的信号必须是寄存器类型
(如reg类型) ▪ 在过程赋值语句等式右边可以是任何有效的表达式,数据
类型也没有限制。 ▪ 如果一个信号没有声明则缺省为wire类型。使用过程赋值
语句给wire赋值会产生错误。
▪ Verilog包括两种过程赋值语句
时间
所执行语句
0
பைடு நூலகம்
m=1’b0;
5
a=1’b1;
10
x=1’b0;
30
b=1’b0;
35
y=1’b1;
end
endmodule
Initial块语句在仿真期间只执行一次,一般用于初始化、信号监 视、生成仿真波形等。也可用变量声明的方式来进行初始化。
在变量声明的同时进行初始化
//定义时钟变量 reg clock; //设置值为0 initial clock=0; //不用上术方法,只直接在变 //量声明时初始化 reg clock=0;
5.1 结构化过程语句
Verilog中有两种结构化过程语句:initial和always语句,是 行为建模的两种基本语句,所有的行为语句只能出现在这两种 结构化过程语句里。
➢每个initial语句和always语句代表一个独立的执行过程 (或过程块)。
这两种语句不能嵌套使用。verilog本质上是并发的,这些 块并发执行,而不是顺序执行。
▪ 行为级描述是对系统的高抽象级描述。在这个抽象级,注重 的是整个系统的功能而不是实现。
▪ Verilog有高级编程语言结构用于行为描述,包括: wait, while, if then, case和forever,for等
▪ Verilog的行为建模是用一系列以高级编程语言编写的并行的、 动态的过程块来描述系统的工作。
▪ 使用“<=”作为赋值符 ▪ 非阻塞赋值语句并行执行,即一条语句不会“阻塞”其
它语句执行,充许赋值调度。
reg x, y, z; reg [15:0] reg_a, reg_b; interget counter; //所有的行为语句放在initial或always
块内 initial begin
initial begin
Time 0
x=0; y=0; z=1; counter=0;
reg_a= 16’b0; reg_b=reg_aT;ime 15
#15 reg_a[2] =1’b1; #10 reg_b[15:13]={x, y, Tzi}me 25
count=count +1;
end
2.非阻塞赋值语句
1.initial语句
▪ 只能执行一次 ▪ 一个模块中若有多个initial块,则它们同时执行。 ▪ 块内若有多条语句,需要用begin和end将它们组合,一条语句则不需要。
module stimulus;
reg x, y, a, b, m;
initial m=1’b0;//一条语句,无需begin-end initial begin //多条语句,需begin-end #5 a=1’b1; #25 b=1’b0; end initial begin #10 x=1’b0; #25 y=1’b1;
第五讲 行为建模
结构化的过程语句 过程赋值语句 时序控制。 条件语句 分支语句 循环语句 顺序块和并行块
随着设计复杂程度的不断提高,在设计早期对所采用的算法和 各种整体结构进行全面的评价变得十分重要,这时需要进行 行为描述。
行为描述:从电路的外部行为角度进行描述,即描述电路的 输入与输出之间的关系。
▪ count=count+1在 时刻0执行
▪ 此处仅为说明阻塞 和非阻塞之区别, 不要在同一个块内 同时使用两种语句。
非阻塞赋值常用来描述多个数据并发传输的行为。
always @ ( posedge clock) begin
reg1<= #1 in1; reg2<= @ (negedge clock ) in2 ^ in3; reg3<= #1 reg1; end
▪ 阻塞赋值 ▪ 非阻塞赋值
1.阻塞赋值语句
▪ 使用“=”作为赋值符 ▪ 阻塞赋值语句按顺序执行,一条语句完全执行完后,才
执行下一条语句,即有“阻塞”作用。
reg x, y, z;
reg [15:0] reg_a, reg_b;
interget counter;
//所有的行为语句放在initial或always 块内
相关主题