欢迎来到天天文库
浏览记录
ID:22016465
大小:170.00 KB
页数:20页
时间:2018-10-26
《verilog非阻塞赋值仿真综合问题》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、ef9008d41f42b6f6120de71bdd757259.docPRELIMINARY七八零一研究所Verilog非阻塞赋值的仿真/综合问题源文件作者:CliffordE.Cummings(SunburstDesign,Inc.)原标题:NonblockingAssignmentsinVerilogSynthesis,CodingStylesThatKill!ATTN:所有括号内“外注”为理解方便或有疑问的地方,原文里并没有。所有翻译都是为遵循“共同进步”的理想但并没有去努力得到原作者的任何书面和其它方式许可,所以仅供大家参考。本人英
2、文和设计水平都极有限,所以不能保证与原文的精确一致和正确(只能以“驽马十步”稍作安慰吧),惭愧之后还希望大家多指教!在Verilog语言最难弄明白的结构中“非阻塞赋值”要算一个。甚至是一些很有经验的工程师也不完全明白“非阻塞赋值”在仿真器(符合IEEE标准的)里是怎样被设定执行的,以及什么时候该用“非阻塞赋值”。这篇文章将介绍怎样设定“非阻塞赋值”和“阻塞赋值”,给出了重要的使得编码可以被正确地综合的编码指导方针,和避免仿真竞争的编码风格细节。1.0介绍众所周知的逻辑建模方针是:*在always块里用“阻塞赋值”产生组合逻辑。*在always
3、块里用“非阻塞赋值”产生时序逻辑。但是为什么?(外注:在实现组合逻辑的assign结构中,当然采用阻塞赋值语句否则的话编译工具会提醒你进行修改的。)普通的回答是:那只是关于仿真的,即使不遵照上面的规则也照样可以产生正确的综合结果。但问题是综合前的仿真结果也许会跟综合后的电路行为仿真不匹配。要明白上述建模方针背后的原因,就必须明白“非阻塞赋值”和“阻塞赋值”它们的功能和时序安排(thefunctionalityandschedulingofblockingandnonblockingassignments.)。这篇文章将详细描述有关问题。文章里
4、将用到两个缩写形式:RHS(right-hand-side)和LHS(left-hand-side)。前者指等式右边的表达式或者变量(RHSexpressionorRHSvariable),后者指指等式左边的表达式或者变量(RHSexpressionorRHSvariable)。2.0Verilog仿真竞争条件IEEEVerilogStandard[2]定义:“保证性的赋值描述”和“非保证性的赋值”描述分别用“非阻塞赋值”和“阻塞赋值”。("Determinism",section5.4.1;"Nondeterminism",section5
5、.4.2&"Raceconditions",section5.5)IEEEVerilog标准允许在同一仿真时间里赋值竞争的产生。当赋值陈述有所不同时,会产生不同的结果。(译注:即可以认为:“非阻塞赋值”有更高的优先权对变量进行赋值或者是指陈述的次序不同会产生不同结果?)为了避免含竞争的描述(racecondition),明白Verilog“非阻塞赋值”和“阻塞赋值”的时序安排是非常重要的。3.0阻塞赋值(blockingassignments)阻塞赋值由等号“=”表示。“阻塞赋值”由它的赋值操作行为而得名:当没有其它的Verilog描述可以打
6、断“阻塞赋值”时,操作将会估计RHS的值并完成赋值。“阻塞”即是说在当前的赋值完成前阻塞其它类型的赋值任务。一个例外是:对阻塞操作的RHSbtltz@mail.china.comCreatedon2004/3/3020:24:00Page20of20ef9008d41f42b6f6120de71bdd757259.docPRELIMINARY七八零一研究所进行延时(delays)的阻塞赋值(在延时未完成前不会阻塞其它赋值任务),但是这被我们认为是不好的编码方式。“阻塞赋值“可以看作一步进程(one-stepprocess):当没有其它可以打断
7、赋值的描述时,估计等式右边(RHS)的指并赋予左边(LHS)。在同一个always块里面,阻塞赋值结果将一直持续下去直到赋值结束。阻塞赋值的一个问题是:当一个程序块(比如always块)阻塞赋值描述里面的“RHS变量”同时是另外一个程序块(比如always块)阻塞赋值描述里面的“LHS变量”,并且两个等式的执行被安排在同一个仿真时间步里面执行(比如同一个时钟上升沿),那么竞争条件就产生了,这样的情况下其执行次序将是未知的。为了举例说明这种情况,请看Verilog代码描述的例一:modulefbosc1(y1,y2,clk,rst);outpu
8、ty1,y2;inputclk,rst;regy1,y2;always@(posedgeclkorposedgerst)if(rst)y1=0;//resetels
此文档下载收益归作者所有