- 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
VHDL非阻塞赋值理解转载)VHDL非阻塞赋值理解(转载)
在always语句块中,verilog语言支持两种类型的赋值:阻塞赋值和非阻塞赋值。阻塞赋值使用“=”语句;非阻塞赋值使用“=”语句。注意,千万不要将这两种赋值方法与assign赋值语句混淆起来,assign赋值语句根本不允许出现在always语句块中。 位于begin/end块内的多条阻塞赋值语句是串行执行的,这一点同标准的程序设计语言是相同的。但是多条非阻塞赋值语句却是并行执行的,这些非阻塞赋值语句都会在其中任何一条语句执行完成之前开始执行。这正是硬件电路的特点,因为实际的逻辑门电路都是独立运转的,而不是等到其他门电路运转结束之后自己才开始运转。 下面我们以描述移位寄存器的两种方法为例来讲述两种赋值类型的区别。在下面的这种描述中,第一个触发器中的数据被移到第二个触发器中,第二个触发器中的数据被移到第三个触发器中……如此继续下去,直到最后一个触发器中的数据被移出该寄存器为止。 1 module shiftreg (input clk, 2 input sin, 3 outout reg [3:0]q);//这是正确使用非阻塞赋值的实例 4 always @(posedge clk) 5 begin 6 q[0] = sin;//非阻塞赋值:= 7 q[1] = q[0]; 8 q[2] = q[1] 9 q[3] = q[2];10 //这里写作q = {q[2:0],sin};更简单更好一些11 end12 endmodule 非阻塞赋值语句的功能是使得所有语句右侧变量的值都同时被赋给左侧的变量。因此,在上面的实例中,q[1]得到的是 q[0]的原始值,而非sin的值(在第一条语句中,sin的值被赋给了q[0])。这正是我们期望得到的实际硬件电路。当然,我们可以把上边的四条语句合并写成一条简短的语句:q= {q[2:0],sin}。 阻塞赋值语句的功能更接近于传统的程序设计语言,但是阻塞赋值语句并不是准确的硬件工作模型。下面考虑使用阻塞赋值语句来实现同一模块可以得到什么结果。在始终clk的上升沿,verilog将会把sin的值赋给q[0],然后 q[0]的新值被赋给q[1],如此继续执行下去。最终所有的四个寄存器都会得到相同的值:sin的值。 本部分内容用意在于:讲述使用always语句块对时序逻辑电路进行建模的时候,如何使用非阻塞赋值。如果设计者能够充分的灵活应用,比如倒转上例中四条语句的顺序,那么使用阻塞赋值语句仍然能实现相应的功能,但是与使用非阻塞赋值的方法相比,这种方法并不会带来任何好处,相反还暗藏了巨大的风险。 最后需要注意的是:每个always语句块都隐含表示一个独立的逻辑电路模块。因此,对于特定的reg类型的变量,只能在一个always语句块中对其进行赋值;否则就可能会出现两个硬件模块同时从同一个输出端口输出数据的情况,这种情况一般称为 短路输出(shorted output)。 过程赋值语句多用于对reg型变量进行复制,过程赋值有阻塞复制和非阻塞赋值两种。 非阻塞赋值的符号为:= 阻塞赋值符号为:= (1)非阻塞赋值的例子: reg c,b; HYPERLINK mailto:always@(posedgealways@(posedge clk) begin b = a; c = b; end (2)阻塞赋值的例子: reg c,b; always @ (posedge clk) begin b = a; c = b; end 上述例子中,使用非阻塞赋值方法,其中的每个=都可以理解为一个寄存器。而在同一 个时钟下面采用的非阻塞赋值方法,模块内所有寄存器都同时随时钟跳变。这是硬件处理 的精髓,也是时序电路中大量使用非阻塞赋值的原因。 在实际书写verilog HDL代码的过程中,对于always中reg型变量,如果不是处理组合逻 辑,尽量不使用阻塞赋值的方法。这主要是基于代码的可综合性考虑的,因为在verilog HDL代码编译的时候,对于有些从后编译的编译器,阻塞赋值会找成时序上与预想的不 一致。对于以上阻塞赋值的例子,采用非阻塞方法应该写为 reg c,b; always @ (posedge clk) begin b = a; c = a; end 实现电路和原方法一样。 而在always用于组合逻辑中,采用阻塞赋值表明未使用寄存器。 如 reg a,A,B,f_a; always @ (a or A or B) begin f_
您可能关注的文档
- 河南理工大学2012博士招生目录河南理工大学2012博士招生目录.doc
- PHP_程序编码规范PP_程序编码规范.doc
- opencv特征提取oencv特征提取.doc
- 河南理工大学本科专业设置及学科门类一览表河南理工大学本科专业设置及学科门类一览表.doc
- 河南瑞贝卡发制品股份有限公司 内部控制规范实施工作方案河南瑞贝卡发制品股份有限公司 内部控制规范实施工作方案.pdf
- 河南电力系统及其自动化自考本科考试科目河南电力系统及其自动化自考本科考试科目.doc
- 河南电力行业投资分析及前景预测报告河南电力行业投资分析及前景预测报告.doc
- PICC置管术后护理PCC置管术后护理.ppt
- PICC常见并发症及护PICC常见并发症及护理.ppt
- 河南电大1260软件工程期末试题带答案河南电大1260软件工程期末试题带答案.doc
- 泛研究化教学鼓励学生自主学习泛研究化教学鼓励学生自主学习.doc
- 泛光照明技术标准泛光照明技术标准.doc
- visio画图技巧viio画图技巧.doc
- 泥垭隧道D25中空注浆锚杆支护施工方案泥垭隧道D25中空注浆锚杆支护施工方案.doc
- 泡沫封堵型环保厕所方案说明泡沫封堵型环保厕所方案说明.doc
- VFP复习题第二章VF复习题第二章.doc
- 注会经济法科目考点解读第02章 基本民事法律制度05注会经济法科目考点解读第02章 基本民事法律制度05.doc
- 注会经济法科目第2章注会经济法科目第2章.doc
- visio绝版画图技巧isio绝版画图技巧.doc
- SNAP简介与应用SNP简介与应用.doc
最近下载
- 《活着读后感》课件.pptx VIP
- 活着读后感课件.docx VIP
- 企业数字化转型大数据湖一体化运营管理平台建设方案.docx VIP
- 企业大数据湖总体规划及大数据湖一体化运营管理建设方案.pdf VIP
- 鄂尔多斯市东胜区殡仪馆项目环境影响报告表环评报告.pdf
- 社会研究:设计与写作教学课件-第十二章 实例解析.pptx VIP
- 社会研究:设计与写作教学课件-第十一章 论文写作(下):结果、讨论、参考文献.pptx VIP
- 社会研究:设计与写作教学课件-第十章 论文写作(中):文献回顾、研究方法.pptx VIP
- 腾讯云原生湖仓一体技术在大规模数据场景中的应用实践.pdf VIP
- 腾讯数据湖技术分享专场.docx VIP
文档评论(0)