目录
1、数据流建模(通过连续赋值语句进行逻辑描述的建模方式)
1.1连续赋值
连续赋值语句(assign)只能对连线型(wire等)变量进行赋值,分为显式连续赋值语句、隐式连续赋值语句。
1.1.1显式连续赋值语句
格式如下:
连线型变量类型 位宽 名称
assign #(延时)名称=变量赋值表达式
1.1.2隐式 连续赋值语句
格式如下:
连续型变量类型 赋值驱动强度 位宽 #(延时)名称=变量赋值表达式
(赋值驱动强度和延时是可选项)
//例如:
wire [3:0] a,b,c;
assign #(2,1,3) c = a|b; //显式
wire [3:0]#(2,1,3) c = a|b; //隐式
1.1.3连续赋值语句使用中的注意事项
1)赋值目标只能是wire型,且assign连续赋值语句不能出现在过程块中
2)多个连续赋值语句之间是并行关系,与位置顺序无关。
2、行为级建模(从电路外部行为的角度对其进行逻辑描述的建模方式)![](https://i-blog.csdnimg.cn/blog_migrate/6ee420fdbdc01fc514ba21275d8d9583.jpeg)
2.1过程语句(initial、always)
2.1.1 initial过程语句
格式如下:
initial
begin
语句1;
语句2;
...
语句n;
end //它在仿真过程中只执行一次,之后就不再执行。
//例:用initial产生测试信号
module initial_tb;
reg s1;
initial
begin
s1=0;
#10 s1=1;
#20 s1=0;
#100 $stop;
end
endmodule
initial语句常出现于测试代码中,通常用于仿真模块中对激励向量的描述、或用于给reg型变量赋初值。
2.1.2 always过程语句
格式如下:
//例如:
always@(敏感事件列表)
语句块 //当列表中变量的值改变时,就会引发块内语句的执行
/*敏感信号分为边沿触发型、电平触发型两种。
电平触发:always@(a or b)
边沿触发:always@(posedge clk or negedge rst_n )*/
2.1.3 过程语句使用中的注意事项
1)在过程语句中,被赋值的信号必须定义为reg型
2)用其描述组合逻辑电路时,需把全部的输入的信号写入敏感列表 或always@(*)。
3)用其描述时序逻辑电路时,需把时间信号和部分输入信号写入敏感列表。