- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Verilog中的延时、阻塞与非阻塞赋值仿真
PAGE
PAGE2 / NUMPAGES12
从仿真语义的角度看Verilog中的延时、阻塞与非阻塞赋值
1 Verilog中的延时
Verilog没有和VHDL中类似的最小延时概念,所有的延时都由符号“#”来定义,如果没有这个符号就意味着没有延时,清单1中描述了一个有关延时的简单例子。
清单1 简单的延时
wire #5 Y = A B;
清单1 中使用持续赋值语句描述了一个两输入端与门逻辑,并且在表达式前插入了5ns(#5)的延时,意义为Verilog仿真器会在5ns的延时后将A和B相与赋值给Y。通过这个例子可以看出,延时的插入只需要在原本的语句中加入“#”关键字即可,但在实际的使用中却经常产生错误,实际中的延时时间是由具体的硬件电路来决定的。使我们更深入的理解Verilog中的延时,更加关注描述的电路意义而不是描述语句本身,Verilog也是一种机于硬件的语言。
1.1 实际中的延时
在实际的电路中,只存在着两种延时行为,一个是惯性延时,另一个是传输延时。
1.1.1 惯性延时(Inertial Day)
惯性延时通常在信号通过逻辑门的时候发生,图1所示是信号通过一个具有5ns延迟的非门时的行为。
图1 惯性延时
输入信号WireIn有两个高电平脉冲,一个宽度为3ns,另一个宽度为9ns。当第一个3ns的脉冲到达非门时,因为其宽度小于非门的本身延时(5ns),输出还来不及建立低电平,输入脉冲就已经过去,所以在输出信号WireOut上没有体现出第一个3ns脉冲的响应。第二个脉冲宽度为9ns,大于非门的本身延时,所以在脉冲上升沿5ns之后,WireOut输出了一个宽度为9ns的低脉冲,这个脉冲与输入脉冲等宽、反向而且延迟了5ns。
这种延时称为惯性延时或惰性延时。如果输入的变化过快,小于逻辑门本身的延时,就不会被体现在输出上。
1.1.2 传输延时(Transport Delay)
传输延时相对于惯性延时更容易理解,相当于信号通过了一条拥有固定延时的传输线。如图2所示是信号通过一条5ns的延时线地示意图与波形。
图2 传输延时
容易看出来,WireOut实际上就是被延迟了5ns的WireIn。所以传输延时的意义就是将输入信号延迟一定时间后体现在输出上,而且输入信号上的所有细节都不会丢失。
1.2 持续赋值语句中的延时
在持续赋值语句只有一种合法的延时描述,如清单2所示:
清单2 持续赋值语句中的延时
assign #5 WireOut = ~ WireIn;
这种描述用语表示电路中的惯性延时,任何小于5ns的输入变化都会被过滤而不会体现在输出上。
1.3 过程赋值语句中的延时
过程赋值语句中的延时情况比较复杂,但是结论很简单:
在持续赋值语句中使用正规延时,可以描述惯性延时。
在非阻塞赋值语句中使用内定延时,可以描述传输延时。
1.3.1 正规延时和内定延时
正规延时和内定延时的定义见清单3。
清单3 正规延时和内定延时
#N sum = a+b; //正规延时
sum = #N a+b; //内定延时
定义于赋值语句前面的延时称为正规延时,其意义是:若赋值语句的执行条件在T时刻得到满足,该语句并不会立即执行,而是在延时N时间后,也就是在T+N时刻将T+N时刻的a+b赋值给sum。
内定延时定义于赋值语句的右式之前,其意义是:若赋值语句的执行条件在T时刻得到满足,立即将T时刻的a与b相加,并不是立即赋值给sum,而是在延时N时间后,也就是在延时N时间后将a+b赋值给sum。
了解了正规延时和内定延时的概念,不难想象出,对应Verilog中的持续性赋值、阻塞性赋值和非阻塞赋值这三种赋值形式,一共有六种插入延时的方法。但是在持续赋值中插入内定延时是非法的,这是因为内定延时需要将T时刻的结果保持到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 A=4d3;
#2 A=4d5;B=4d5;
#5 B=4d8;
end
always@(A or B)
b
您可能关注的文档
- The little Red Hen 英语舞台剧话剧台词.doc
- The Story of an Hour 一小时的故事,英文读后感.docx
- The Story Of An Hour 译文欣赏.doc
- There_be和have区别.doc
- The way to rainy mountain 修辞格分析.doc
- The Tale of Peter Rabbit 彼得兔的故事1.doc
- they stood chatting together as easily and naturally as could be这句话最后用could be麻烦解释下.doc
- The translator27s invisibility Venuti 译者的隐形.doc
- The-very-hungry-caterpillar绘本内容.doc
- ThinkPad如何实现关闭屏盖时播放音乐功能doc.doc
文档评论(0)