一.数据流建模
1.连续赋值语句
-连续赋值的目标类型主要是标量线网和向量线网
(1)标量线网,如:wire a,b;
(2)向量线网,如:wire【3:0】a,b;
显式连续赋值语句;
隐式连续赋值语句。
注意事项:
-赋值目标只能是线网类型(wire);
-在连续赋值中,只要赋值语句右边表达式没有任何一个变量有变化,表达式立即被计算,计算的结果立即赋给左边信号(若没有定义延迟量);
-多个连续赋值语句之间是并行语句,因此与位置顺序无关。
-多个连续赋值语句中的延时具有硬件电路中惯性延时的特征,任何小于其延时的信号变化脉冲都将被滤除掉,不会体现在输出端口上。
2.行为级建模
二.过程语句
1.initial过程语句
格式为
initial
begin
语句1;
语句2;
...
语句n;
end
例:用initial过程语句对变量A,B,C进行赋值
module initial_tb1;
reg A;B,C;
initial
begin
A=0;B=1;C=0;
#100 A=1;B=0;
#100 A=0;C=1;
#100 B=1;
#100 B=0;C=0;
end
endmodule
2.always语句块
相对于initial过程块,always语句块的触发状态是一直存在的,只要满足always后面的敏感事件列表,就执行过程块。
格式为:
always@(<敏感事件列表>)
语句块;
例:用always语句描述同步置数,同步清零计算器
module counter1(out,data,load,reset,clk);
output[7:0] out;
input[7:0] data;
input load,clk,reset;
reg[7:0] out;
always@(posedge clk) //clk上升沿触发
begin
if(lrest) out = 8'h00; //同步清零,低电平有效
else if(load) out = data; //同步置数
else out = out + 1;
end
endmodule
例:用always过程语句描述异步清零计数器
module counter2(clear,clk,out);
output[7:0] out;
intput clk,clear;
reg[7:0] out;
always @(posedge clk or negedge clear) //clk上升沿和clear低电平清零有效
begin
if(lclear)
out=0;
else out = out + 1;
end
endmodule