Verilog中的延时、阻塞与非阻塞赋值仿真.docVIP

Verilog中的延时、阻塞与非阻塞赋值仿真.doc

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 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

文档评论(0)

baoyue + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档