网站大量收购独家精品文档,联系QQ:2885784924

阻塞赋值与非阻塞赋值.pdf

  1. 1、本文档共15页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
阻塞赋值与非阻塞赋值

阻塞赋值与非阻塞赋值 作者:zhsj 日期:2015-7-27 在 Verilog 语法中,阻塞赋值和非阻塞赋值是非常难理解的一个概念,尤其是对于初学者, 往往搞不懂何时使用非阻塞赋值及何时使用阻塞赋值才能设计出符合要求的电路。本文是笔者 学习此概念时的学习笔记,主要分为概念解析和实例分析,并对一些编程要点进行总结分析, 希望对各位初学者有所帮助。 在正式讲解之前先定义两个英文缩写字: RHS——赋值符合右边的表达式或变量; LHS——赋值符号左边的表达式或变量。 一、概念解析 1.1 阻塞赋值 阻塞赋值操作符为等号(即“= ”) ,当采用阻塞赋值方式赋值时,需要先计算等号右手方向(RHS) 部分的值,这时赋值语句不允许任何别的Verilog 语句的干扰,直到现行的赋值完成时刻,即把 RHS 赋值给 LHS 的时刻,它才允许别的赋值语句的执行。一般可综合的阻塞赋值操作在RHS 不 能设定有延迟,即使是零延迟也不允许。若在 RHS 上加上延迟,则在延迟期间会阻止赋值语句 的执行,延迟后才执行赋值,这种赋值语句是不可综合的,在需要综合的模块中不可使用这种 风格的代码。 阻塞赋值的执行可以认为是只有一个步骤的操作,即计算RHS 并更新LHS,此时不允许有来 自任何其他Verilog 语句的干扰。所谓阻塞的概念是指在同一个always 块中,其后面的赋值语句 从概念上是前一句赋值语句结束后在开始赋值的,请注意,这只是概念上的先后,而无实质上 的延迟。 在使用阻塞赋值时,如果在一个过程块中阻塞赋值的 RHS 变量正好是另一个过程块中阻塞 赋值的 LHS 变量,这两个过程块又使用同一个时钟沿触发,这时阻塞赋值操作会出现问题,即 如果阻塞赋值的顺序安排不好,就会出现竞争。若这两个赋值操作用同一个时钟沿触发,则执 行的顺序是无法确定的,在后面的例子中会看到这一问题。 1.2 非阻塞赋值 非阻塞赋值操作符为小于等于号(即 “= ”),当采用非阻塞赋值时,在赋值操作开始的时刻 计算非阻塞赋值符 RHS 表达式,赋值操作结束的时刻才更新 LHS。在计算非阻塞赋值的RHS 表 1 达式和更新 LHS 期间,其他的Verilog 语句,包括其他的 Verilog 非阻塞赋值语句都能同时计算 RHS 表达式和更新 LHS 。非阻塞赋值允许其他的Verilog 语句同时进行操作。非阻塞赋值的操作 过程可以看做两个步骤: (1)在赋值开始的时刻,计算非阻塞赋值RHS 表达式; (2 )在赋值结束的时刻,更新非阻塞赋值LHS 表达式。 非阻塞赋值操作只能用于对寄存器类型变量进行赋值,因此只能使用在“initial ”块和“always ” 块等过程块中,而且非阻塞赋值不允许用于连续赋值。 2 二、实例分析 2.1 阻塞赋值与非阻塞赋值的执行顺序 【例1】用阻塞赋值实现反馈振荡器 module fbosc1(a, b, clk, rst_n); input clk; input rst_n; output reg a, b; always @(posedge clk or negedge rst_n) begin if (!rst_n) a = 0; //reset else a = b; end always @(posedge clk or negedge rst_n) begin if (!rst_n) b = 1; //reset else b = a; end endmodule 在本例中,两个always 块是并行执行的,若复位信号

文档评论(0)

dajuhyy + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档