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