atom100 发表于 2017-8-19 12:14:55

verilog 里if else 和 a = b ?e1 :e2选择语句有何区别 ?

verilog 里ifelse和a = b ?e1 :e2选择语句有何区别 ?

honeybear 发表于 2017-8-19 12:48:38

没什么区别吧

linjpxt 发表于 2017-8-19 13:05:19

可以看一下综合后的RTL图或技术图,没有区别。

mcu5i51 发表于 2017-8-19 16:37:58

好像是组合和时序的区别吧,记不清了

ackyee 发表于 2017-8-19 16:40:39

( a = b) ?e1 :e2 可以直接用在线定义上 ,不需要经过alywas@块,这样也就不会生成触发器
if else 则过程需要生成触发器

sungngai 发表于 2017-8-19 19:13:10

ackyee 发表于 2017-8-19 16:40
( a = b) ?e1 :e2 可以直接用在线定义上 ,不需要经过alywas@块,这样也就不会生成触发器
if else 则过程 ...

不一定会生成触发器吧...

always @ (*)
begin
        if(a=b)
                out = e1;
        else
                out = e2;
end       

lansen0815 发表于 2017-8-19 19:56:44

看各个厂商的综合策略了,这么简单的逻辑差别应该不会很大
如果是组合逻辑的话if else 和 xx?1:b 综合结果很可能都是选择器
可以用quartus 或者 ISE 或者diamond 综合一下看生成的结果

lansen0815 发表于 2017-8-19 19:57:59

sungngai 发表于 2017-8-19 19:13
不一定会生成触发器吧...

always @ (*)


是的这个组合逻辑不会用到触发器,

yangff 发表于 2017-9-4 20:50:04

后者在一些情况下会出现疑似有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]
查看完整版本: verilog 里if else 和 a = b ?e1 :e2选择语句有何区别 ?