所需E币: 4
时间: 2020-1-14 19:39
大小: 409.01KB
Verilog中阻塞和非阻塞的区别Verilog_NBA.docPRELIMINARY七八零一研究所Verilog非阻塞赋值的仿真/综合问题源文件作者:CliffordE.Cummings(SunburstDesign,Inc.)原标题:NonblockingAssignmentsinVerilogSynthesis,CodingStylesThatKill!ATTN:所有括号内“外注”为理解方便或有疑问的地方,原文里并没有。所有翻译都是为遵循“共同进步”的理想但并没有去努力得到原作者的任何书面和其它方式许可,所以仅供大家参考。本人英文和设计水平都极有限,所以不能保证与原文的精确一致和正确(只能以“驽马十步”稍作安慰吧),惭愧之后还希望大家多指教!在Verilog语言最难弄明白的结构中“非阻塞赋值”要算一个。甚至是一些很有经验的工程师也不完全明白“非阻塞赋值”在仿真器(符合IEEE标准的)里是怎样被设定执行的,以及什么时候该用“非阻塞赋值”。这篇文章将介绍怎样设定“非阻塞赋值”和“阻塞赋值”,给出了重要的使得编码可以被正确地综合的编码指导方针,和避免仿真竞争的编码风格细节。1.0介绍众所周知的逻辑建模方针是:*在always块里用“阻塞赋值”产生组合逻辑。*在always块里用“非阻塞赋值”产生时序逻辑。但是为什么?(外注:在实现组合逻辑的assign结构中,当然采用阻塞赋值语句否则的话编译工具会提醒你进行修改的。)普通的回答是:那只是关于仿真的,即使不遵照上面的规则也照样可以产生正确的综合结果。但问题是综合前的仿真结果也许会跟综合后的电路行为仿真不匹配。要明白上述建模方针背后的原因,就必须明白“非阻塞赋值”和“阻塞赋值”它们的功能和时序安排(thefunctionalityands……