欢迎来到天天文库
浏览记录
ID:15434089
大小:150.00 KB
页数:16页
时间:2018-08-03
《verilog 非阻塞赋值的仿真综合问题》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、在Verilog语言最难弄明白的结构中“非阻塞赋值”要算一个。甚至是一些很有经验的工程师也不完全明白“非阻塞赋值”在仿真器(符合IEEE标准的)里是怎样被设定执行的,以及什么时候该用“非阻塞赋值”。这篇文章将介绍怎样设定“非阻塞赋值”和“阻塞赋值”,给出了重要的使得编码可以被正确地综合的编码指导方针,和避免仿真竞争的编码风格细节。 1.0介绍 众所周知的逻辑建模方针是: *在always块里用“阻塞赋值=”产生组合逻辑。
2、 *在always块里用“非阻塞赋值<=”产生时序逻辑。 但是为什么?(外注:在实现组合逻辑的assign结构中,当然采用阻塞赋值语句否则的话编译工具会提醒你进行修改的。) 普通的回答是:那只是关于仿真的,即使不遵照上面的规则也照样可以产生正确的综合结果。但问题是综合前的仿真结果也许会跟综合后的电路行为仿真不匹配。 要明白上述建模方针背后的原因,就必须明白“非阻塞赋值”和“阻塞赋值”它们的功能和时序安排(thefu
3、nctionalityandschedulingofblockingandnonblockingassignments.)。这篇文章将详细描述有关问题。文章里将用到两个缩写形式:RHS(right-hand-side)和LHS(left-hand-side)。前者指等式右边的表达式或者变量(RHSexpressionorRHSvariable),后者指指等式左边的表达式或者变量(RHSexpressionorRHSvariable)。 2.0Verilog 仿真竞争条件 IEEEVeril
4、ogStandard[2]定义: “保证性的赋值描述”和“非保证性的赋值”描述分别用“非阻塞赋值”和“阻塞赋值”。("Determinism",section5.4.1;"Nondeterminism",section5.4.2&"Raceconditions",section5.5) IEEEVerilog标准允许在同一仿真时间里赋值竞争的产生。当赋值陈述有所不同时,会产生不同的结果。(译注:即可以认为:“非阻塞赋值”有更高的优先权对变量进行赋值或者是指陈述的次序不同会产生不同结果?)
5、 为了避免含竞争的描述(racecondition),明白Verilog“非阻塞赋值”和“阻塞赋值”的时序安排是非常重要的。 3.0 阻塞赋值(blockingassignments) 阻塞赋值由等号“=”表示。“阻塞赋值”由它的赋值操作行为而得名:当没有其它的Verilog描述可以打断“阻塞赋值”时,操作将会估计RHS的值并完成赋值。“阻塞”即是说在当前的赋值完成前阻塞其它类型的赋值任务。一个例外是:对阻塞操作的RHS进行延时(delays)的阻塞赋值(在延时未完成前不会阻塞其它赋值任务),但是
6、这被我们认为是不好的编码方式。 “阻塞赋值“可以看作一步进程(one-stepprocess): 当没有其它可以打断赋值的描述时,估计等式右边(RHS)的指并赋予左边(LHS)。 在同一个always块里面,阻塞赋值结果将一直持续下去直到赋值结束。 阻塞赋值的一个问题是:当一个程序块(比如always块)阻塞赋值描述里面的“RHS变量” 同时是另外一个程序块(比如always块)阻塞赋值描述里面的“LHS变量”,并且两个等式的执行被安
7、排在同一个仿真时间步里面执行(比如同一个时钟上升沿),那么竞争条件就产生了,这样的情况下其执行次序将是未知的。 为了举例说明这种情况,请看Verilog代码描述的例一: modulefbosc1(y1,y2,clk,rst); outputy1,y2; inputclk,rst; regy1,y2; always@(posedgeclkorposedgerst) if(rst)y1=0;//reset elsey1=y2; always@(posedgeclkorposedgerst) if(rst)y2=1;
8、//preset elsey2=y1; endmodule Example1-Feedbackoscillatorwithblockingassignments 依据IEEEVerilog标准,这两个always块可以以任意的次序执行。如果在reset后第一个块先被执行,结果将是y1和y2都获得赋值1;如果在reset后第二个块先被执行,结果将是y1和y2
此文档下载收益归作者所有