Verilog数据流建模

在电路设计过程中,Verilog HDL有三种设计方式:数据流建模、行为级建模、结构型建模。更多采用的是数据流建模和行为级建模。

数据流建模就是:连续赋值语句+上一节讲的运算符

连续赋值语句

目标类型

线网类型。

  • 标量类型,如 wire a,b;
  • 向量类型,如 wire [3:0] a,b;

显式连续赋值语句(建议使用)

信号定义和assign语句分成两条。

<net_declaration><range><name>;
assign #<delay><name><assignment表达式>

例:

module example1_assignment(a,b,m,n,c,y);
input[3:0]a,b,m,n;
output[3:0]c,y;
wire[3:0]a,b,m,n,c,y;
assign y=m|n;	//四个或门
assign #(3,2,4)c=a&b;	//四个与门
endmodule

隐式连续赋值语句

信号定义和assign语句在一条中。
类似C语言中的int i=0;

<net_declaration><drive_strength><range>#<delay><name>=assignment表达式

例:

module example2_assignment(a,b,m,n,c,y,w);
input[3:0]a,b,m,n;
output[3:0]c,y,w;
wire[3:0]a,b,m,n;
wire[3:0]y=m|n;
wire[3:0]#(3,2,4)c=a&b;
wire(strong0,weak1)[3:0]#(2,1,3)w=(a^b)&(m^n);
endmodule

注意

  • 赋值目标只能是线网类型(wire
  • 只要赋值语句右边表达式任何一个变量有变化,表达式立刻被计算,结果立即赋给左边的信号
  • 连续赋值语句不能出现在always,initial等过程块
  • 多个连续赋值语句之间是并行的,与位置顺序无关
  • 连续赋值语句中的延时具有硬件电路中惯性延时的特性,任何小于其延时的信号变化脉冲都将被滤除掉,不会体现在输出端口上:
    数字电路是一个基于MOS的电路,在信号传输过程中,输出信号和输入信号一定有延迟,这种延迟称为硬件电路的延迟,决定了整个电路的工作频率,随着器件的速度越来越快,器件的延迟非常小,电路中的毛刺现象就会被带到输出端。整个电路代表的是一种电容特性(通交流,阻直流),早期的电路延迟很大,相当于电容容抗很大,对快速变化电流的阻碍作用就越强,而现在的电路延迟很小,相当于电容容抗很小,对快速变化电流的阻碍作用就弱,因此毛刺会被带到输出端。
    惯性延迟就是指这个毛刺不被带到输出端的最大宽度。如果干扰毛刺宽度大于惯性延迟,这个干扰就会被带到输出端口,如果小于惯性延迟,就会被滤除。
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值