连续赋值语句
特点:
1.赋值目标只能是线网类型(wire)
2.在连续赋值中,只要赋值语句右边表达式任何一个变量有变化,表达式立即被计算,计算的记过立即赋值给左边的信号(若没有定义延时量)
3.连续赋值语句不能出现在过程块中。
4.多个连续赋值语句之间是并行语句,因此与位置顺序无关。
5.连续赋值语句中的延时具有硬件电路中惯性延时的特性,任何小于其延时的信号变化脉冲都将被滤除掉,不会体现在输出端口上。
硬件电路的延迟决定了工作频率。工作频率越高,干扰越容易到达输出端。
惯性延迟,惯性延迟小于干扰,干扰起作用,反之不起作用。
可以直接生成语句。
行为级建模
过程语句 initial语句 不具有综合性
always语句 可综合性
语句块 串行语句块 begin-end 可综合
并行语句块 fork-join 不可综合
赋值语句 过程连续赋值 assign 不可综合 //与连续赋值assign一点关系都没有
过程赋值 =,<= 可综合
条件语句 if-else 可综合
case,casez,casex 可综合
循环语句 forever 不可综合
repeat 不可综合
while 不可综合
initial语句 - 主要用在仿真,调试。硬件电路主要靠复位信号初始化。全局复位用复位信号。使用风险大,
initial过程语句的语法格式:
initial
begin
语句1;
语句2;
语句3;
…
语句n;
end
///////////////////////////////////////////
过程语句inital与always语句
例:用initial过程语句对变量ABC进行赋值
module inital_tb1;
reg A ,B,C;
inital
begin
A=0;B=0;C=0;
#100 A=1;B=0;
#100 A=0;C=1;
#100 B=1;
#100 B=0;C=0;
end
endmodule
always语句
从语法描述角度,always语句块的触发状态时一直存在的,只要满足always后面的敏感事件列表,就执行过程块。
其语法格式:
always@(敏感事件列表)
语句块;
敏感事件表没有and与的概念。
@(a) //当a信号值发生改变时
@(a or b) //当a或b信号值发生改变时 @(a,b)
@(poseedge clk) //当时钟上升沿到来时
@(negedge clk) //当始终下降沿到来时
@(poseedge clk or negedge clk) //当上升沿或者下降沿
**注意1:**always使用作为组合电路进行描述时,所有需要的敏感条件需要全部写入();
**注意2:always使用作为时许逻辑电路进行描述时,时钟信号和需要的信号写入();
D 触发器为clk边沿有效。
fpga 没有异步清零信号。
$finish 为结束语句,用于退出仿真。
module mux4_1 (out,in0,in1,in2,in3,sel)
output out;
input in0,in1,in2,in3;
input[1:0] sel;
reg out;
always@(in0 or in1 or in2 or in3 or sel)
case (sel)
2’b00 out = in0;
2’b01 out = in1;
2’b10 out = in2;
2’b11 out = in3;
default out = 2’bx;
endcse
endmodule