Verilog中的延时阻塞与非阻塞赋值仿真设计.doc
《Verilog中的延时阻塞与非阻塞赋值仿真设计.doc》由会员分享,可在线阅读,更多相关《Verilog中的延时阻塞与非阻塞赋值仿真设计.doc(11页珍藏版)》请在课桌文档上搜索。
1、 从仿真语义的角度看Verilog中的延时、阻塞与非阻塞赋值1 Verilog中的延时Verilog没有和VHDL中类似的最小延时概念,所有的延时都由符号“#来定义,如果没有这个符号就意味着没有延时,清单1中描述了一个有关延时的简单例子。清单1 简单的延时wire #5 Y = A & B;清单1 中使用持续赋值语句描述了一个两输入端与门逻辑,并且在表达式前插入了5ns#5的延时,意义为Verilog仿真器会在5ns的延时后将A和B相与赋值给Y。通过这个例子可以看出,延时的插入只需要在原本的语句中参加“#关键字即可,但在实际的使用中却经常产生错误,实际中的延时时间是由具体的硬件电路来决定的。使
2、我们更深入的理解Verilog中的延时,更加关注描述的电路意义而不是描述语句本身,Verilog也是一种机于硬件的语言。1.1 实际中的延时在实际的电路中,只存在着两种延时行为,一个是惯性延时,另一个是传输延时。1.1.1 惯性延时Inertial Day惯性延时通常在信号通过逻辑门的时候发生,图1所示是信号通过一个具有5ns延迟的非门时的行为。图1 惯性延时输入信号WireIn有两个高电平脉冲,一个宽度为3ns,另一个宽度为9ns。当第一个3ns的脉冲到达非门时,因为其宽度小于非门的本身延时5ns,输出还来不与建立低电平,输入脉冲就已经过去,所以在输出信号WireOut上没有表达出第一个3n
3、s脉冲的响应。第二个脉冲宽度为9ns,大于非门的本身延时,所以在脉冲上升沿5ns之后,WireOut输出了一个宽度为9ns的低脉冲,这个脉冲与输入脉冲等宽、反向而且延迟了5ns。这种延时称为惯性延时或惰性延时。如果输入的变化过快,小于逻辑门本身的延时,就不会被表达在输出上。1.1.2 传输延时Transport Delay传输延时相对于惯性延时更容易理解,相当于信号通过了一条拥有固定延时的传输线。如图2所示是信号通过一条5ns的延时线地示意图与波形。图2 传输延时容易看出来,WireOut实际上就是被延迟了5ns的WireIn。所以传输延时的意义就是将输入信号延迟一定时间后表达在输出上,而且输
4、入信号上的所有细节都不会丢失。1.2 持续赋值语句中的延时在持续赋值语句只有一种合法的延时描述,如清单2所示:清单2 持续赋值语句中的延时assign #5 WireOut = WireIn;这种描述用语表示电路中的惯性延时,任何小于5ns的输入变化都会被过滤而不会表达在输出上。1.3 过程赋值语句中的延时过程赋值语句中的延时情况比拟复杂,但是结论很简单:l 在持续赋值语句中使用正规延时,可以描述惯性延时。l 在非阻塞赋值语句中使用定延时,可以描述传输延时。1.3.1 正规延时和定延时正规延时和定延时的定义见清单3。清单3 正规延时和定延时#N sum = a+b; /正规延时sum = #N
5、 a+b; /定延时定义于赋值语句前面的延时称为正规延时,其意义是:假设赋值语句的执行条件在T时刻得到满足,该语句并不会立即执行,而是在延时N时间后,也就是在T+N时刻将T+N时刻的a+b赋值给sum。定延时定义于赋值语句的右式之前,其意义是:假设赋值语句的执行条件在T时刻得到满足,立即将T时刻的a与b相加,并不是立即赋值给sum,而是在延时N时间后,也就是在延时N时间后将a+b赋值给sum。了解了正规延时和定延时的概念,不难想象出,对应Verilog中的持续性赋值、阻塞性赋值和非阻塞赋值这三种赋值形式,一共有六种插入延时的方法。但是在持续赋值中插入定延时是非法的,这是因为定延时需要将T时刻的
6、结果保持到T+N时刻进展赋值,表现出记忆特性,与持续赋值的意义相冲突。下文介绍阻塞赋值和非阻塞赋值中的延时。1.3.2 阻塞赋值中的延时在阻塞赋值中可以插入正规延时和定延时,示例如清单4所示。由Quartus II综合后得到时间戳report和RTL图形分别如图3和图4所示,由Modelsim仿真产生的仿真波形如图5所示。清单4阻塞赋值语句中的延时module DelayDemo(A,B,C,D); output A,B,C,D; reg 3:0 A,B,C,D;initial begin A=4d0;B=4d0; #4 A=4d2;B=4d4; #2 A=4d3; #2 A=4d4; #9
7、A=4d3; #2 A=4d5;B=4d5; #5 B=4d8; end always(A or B)begin C =#3 A+B; /阻塞赋值中的定延时endalways(A or B)begin #3 D= A+B; /阻塞赋值中的正规延时endendmodule图3清单4的message图4清单4的RTL图5清单4的仿真波形在图5的仿真图中,对于不断变化的输入A和B,C为插入了3ns定延时的A+B,D为插入了3ns正规延时的A+B。先讨论在阻塞赋值中插入定延时的效果:l 0ns时刻Start1:always进程启动,仿真器计算0时刻A+B的值后进程挂起,等待3ns后赋值给C。l 3ns
8、时刻Display1:C承受赋值更新,由未知出跳变为0。l 4ns时刻Start2:A和B同时变化,启动进程,仿真器计算A+B的值,并在等待3ns后赋值给C。 l 6ns时刻:由于阻塞赋值的特性,A由2到3的跳变被忽略,不会反响在C上。l 7ns时刻Start2:C由0跳变为4ns时刻A+B的值6再来讨论在阻塞赋值中插入正规延时的效果:l 0ns时刻Start1:always进程启动,由于设定了3ns的正规延时,进程被挂起等待3ns后执行。l 3ns时刻Display1:执行赋值,将该时刻的A+B=0赋值给C。l 4ns时刻Start2:A和B同时变化,启动进程,仿真器计算A+B的值,并在等待
9、3ns的延时,在7ns时刻再次执行。 l 6ns时刻:由于阻塞赋值的特性,A由2到3的跳变被忽略,不会反响在C上。l 7ns时刻Start2:执行赋值,将该时刻的A+B=7赋值给C。由上面的分析可知,在阻塞赋值语句中插入延时的效果是;在语句启动后延时的一段时间输出当前时刻正规延时或语句启动时刻定延时的逻辑结果,并且会忽略这段时间所有的输入改变事件。但是这种行为不能模拟实际电路中的惯性延时或者传输延时,因此不适合在阻塞赋值中插入延时。1.3.3 非阻塞赋值中的延时与阻塞赋值一样,非阻塞赋值也可以插入正规延时和定延时,示例如清单5,图6和图7分别是Quartus II综合产生的时间戳report和
10、RTL图形,图8是由Modelsim仿真产生的波形。清单5 非阻塞赋值语句中的延时always(A or B)begin C =#3 A+B; /非阻塞赋值中的定延时endalways(A or B)begin #3 D= A+B; /非阻塞赋值中的正规延时end/*其余局部与清单4一样*/图6清单5的时间戳report图7清单5的RTL图形图8清单5的仿真波形在图8的仿真图中,对于不断变化的输入A和B,C为插入了3ns定延时的A+B,D为插入了3ns正规延时的A+B。先讨论在非阻塞赋值中插入定延时的效果:l 0ns时刻Start1:always进程启动,计算A+B的值,然后进程挂起,等待3n
11、s后赋值给C。l 3ns时刻Display1:C承受赋值更新,由未知出跳变为0。l 4ns时刻Start2:A和B同时变化,启动进程,仿真器计算A+B的值,并在等待3ns后赋值给C。 l 6ns时刻:由于非阻塞赋值的左式更新操作在仿真事件中的优先级要低于阻塞赋值的右式计算、左式更新,也低于由于输入改变而启动的非阻塞赋值本身的右式计算,所以在该时刻C的更新操作会被放入执行队列,并在3ns后执行赋值。l 7ns时刻Display2:C由0跳变为4ns时刻A+B的值6l 8ns时刻Start3:进程再次启动,并会在3ns以后将C赋值为8ns的A+B值l 9ns时刻:执行6ns时刻放入队列中的赋值操作
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Verilog 中的 延时 阻塞 赋值 仿真 设计

链接地址:https://www.desk33.com/p-13751.html