- 主题:讨论:MUX要怎么写最好?
好像很多人的coding style都不一样
比如
sel[1:0]==0时选in0
sel[1:0]==1时选in1
sel[1:0]==2时选in2
sel[1:0]==3时无意义
风格1,这种最安全
case(sel)
0: out=in0;
1: out=in1;
2: out=in2;
default: out =0;
endcase
风格2,这种综出来最优化,但会有x
case(sel)
0: out=in0;
1: out=in1;
2: out=in2;
default: out ='bx;
endcase
风格3,这种综出来最优化,但仿真和综合结果不一致
case(sel) //synopsys full_case
0: out=in0;
1: out=in1;
2: out=in2;
endcase
风格4,这种好像也不是最优化的
out =
sel==0 & in0 |
sel==1 & in1 |
sel==2 & in2;
--
修改:Xaoyao FROM 101.87.111.*
FROM 101.87.111.*
当然用最安全的方法,timing这种事情交给工具去做
--
FROM 34.98.250.*
个人感觉用1,3跟4尤其是4(AOI实现)很可能出glitch
timing非常critical的时候,可以用one-hot mux,记得2009年的snug里有一篇amd的paper里专门讲了这个。
--
FROM 222.92.145.*
one-hot mux就是if-else,verilog std里面明确说了,时序不一定更好
--
FROM 124.114.130.*
我都用? :
【 在 Xaoyao 的大作中提到: 】
: 好像很多人的coding style都不一样
: 比如
: sel[1:0]==0时选in0
: ...................
--
FROM 117.136.0.*
泛泛的谈这种多选1逻辑,没有太多优化的地方,否则大家都会统一用一种方法,唯一比较通用的就是使用综合器的编译选项。具体到某一场景,会有各种优化方式,比如把mux放在整个数据通路优化甚至打散。
【 在 Xaoyao 的大作中提到: 】
: 好像很多人的coding style都不一样
: 比如
: sel[1:0]==0时选in0
: ...................
--
FROM 219.75.13.*