Verilog_HDL中阻塞賦值与非阻塞赋值的区别与应用.docVIP

Verilog_HDL中阻塞賦值与非阻塞赋值的区别与应用.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_HDL中阻塞賦值与非阻塞赋值的区别与应用

PAGE PAGE 3 Verilog HDL中阻塞赋值与非阻塞赋值的区别与应用 张文波 摘要:Verilog HDL语言是世界上应用最广泛的硬件描述语言之一。在Verilog HDL语言中最容易混淆的概念之一就是阻塞赋值与非阻塞赋值,甚至一些非常有经验的Verilog HDL设计师也不能完全理解为什么和什么时候使用阻塞赋值和非阻塞赋值。本文详细阐述了阻塞赋值与非阻塞赋值的概念和区别,通过仿真和举例进一步解释了阻塞赋值与非阻塞赋值在工程中的典型应用和技巧。本文中的所有程序代码,在ISE10.1应用软件中均测试通过,可以直接引用。 关键词: 阻塞赋值;非阻塞赋值;仿真 中图分类号:TP368 文献标识码: The Difference and Application of Blocking assignment and Nonblocking assignment in Verilog HDL ZHANG Wen-bo (China Airboren Missile Academy, Henan Luoyang 471000, China) ABSTRACT:In the world,one of the most extensive hardware description language is Verilog HDL.One of the most misunderstood constructs in the Verilog language is the blocking assignment and nonblocking assignment,even very experienced Verilog designers do not understand when and why blocking assignment and nonblocking assignment should be used.This paper details the difference and the constructs of the blocking assignment and nonblocking assignment,and makes a further explanation about the typical application and skills whit the simulation and examples.In this paper,all of the code were validated by ISE10.1. KEYWORDS:blocking assignment; nonblocking assignment; simulation 1 引言 Verilog HDL语言是目前世界上最流行的硬件描述语言之一,被广泛的应用于基于可编程逻辑器件的项目开发。在Verilog HDL语言中,信号有两种赋值方式:阻塞赋值方式和非阻塞赋值方式。 2 功能定义 赋值语句的功能是用赋值语句右端的表达式所定义的逻辑来驱动该赋值语句左端表达式的变量。 2.1 阻塞赋值语句 阻塞赋值用符号“=”表示。阻塞赋值表示在当前的赋值完成前阻塞其他的赋值任务。即在赋值时,先计算“=”右边的值,此时赋值语句不允许任何别的赋值任务的干扰,直到现行的赋值完成时,才允许别的赋值语句的执行。也就是说,在同一个块语句中,其后面的赋值语句是在前一句赋值语句结束后再开始赋值的。 比如下面的程序: initial begin a=0; //阻塞赋值语句S1 a=1; //阻塞赋值语句S2 end 中包含了两条阻塞赋值语句S1和S2,我们假设initial块是在仿真时刻0得到执行的。由于S1和S2都是阻塞赋值语句,所以在执行S1时,S2被“阻塞”而不能得到执行;只有在S1执行完毕,a被赋值为0之后,S2才开始执行。而S2的执行将使变量a重新被赋值为1。 2.2非阻塞赋值语句 非阻塞赋值用符号“<=”表示。非阻塞赋值表示在当前的赋值未完成前不阻塞其他的赋值任务。即在赋值操作开始时计算“<=”右边的表达式,在赋值操作结束时更新“<=”左边的变量,并且在赋值操作的过程中,允许其他赋值语句同时执行。也就是说,在同一个块语句中,其后面的赋值语句是在前一句非阻塞赋值语句开始时,同时开始赋值的,并且是在块语句结束时,同时更新左边的变量后一起结束的。 比如下面的程序: initial begin A=1; //非阻塞赋值语句S3 B=1; //非阻塞赋值语句S4 end 中包含了两条非阻塞赋值语句S3和S4,我们假设initial块是在仿真时刻0得到执行的。语句S3首先得到执行,但是对被赋值对象A的赋值操作

文档评论(0)

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

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

1亿VIP精品文档

相关文档