verilog 里if else 和 a = b ?e1 :e2选择语句有何区别 ?
verilog 里ifelse和a = b ?e1 :e2选择语句有何区别 ? 没什么区别吧 可以看一下综合后的RTL图或技术图,没有区别。 好像是组合和时序的区别吧,记不清了 ( a = b) ?e1 :e2 可以直接用在线定义上 ,不需要经过alywas@块,这样也就不会生成触发器if else 则过程需要生成触发器 ackyee 发表于 2017-8-19 16:40
( a = b) ?e1 :e2 可以直接用在线定义上 ,不需要经过alywas@块,这样也就不会生成触发器
if else 则过程 ...
不一定会生成触发器吧...
always @ (*)
begin
if(a=b)
out = e1;
else
out = e2;
end 看各个厂商的综合策略了,这么简单的逻辑差别应该不会很大
如果是组合逻辑的话if else 和 xx?1:b 综合结果很可能都是选择器
可以用quartus 或者 ISE 或者diamond 综合一下看生成的结果 sungngai 发表于 2017-8-19 19:13
不一定会生成触发器吧...
always @ (*)
是的这个组合逻辑不会用到触发器, 后者在一些情况下会出现疑似有bug(我不知道是不是特性),
具体来说就是在?:中直接这样用$signed
(1'b1) ? ($signed(mux_b) >>> mux_a) : 33'h0
会导致完全错误的结果
参考这个,我当时搞了半天,最后别人告诉窝不能这样做……
https://stackoverflow.com/questions/44330700/arithmetic-shift-by-signal-give-different-result-in-conditional-expression-and
页:
[1]