请教if 和case语句,硬件消耗有区别么?
if(
(i_haddr[11:0]!=12'h000)&(i_haddr[11:0]!=12'h004)&(i_haddr[11:0]!=12'h008)&(i_haddr[11:0]!=12'h00C)&(i_haddr[11:0]!=12'h010))
error <= 1'b1;
else
error <= 1'b0;
end
// case(i_haddr[11:0])
// (12'h000),(12'h004),(12'h008),(12'h00C),(12'h010),(12'h83c): error <= #UDLY 1'b0;
// default : error <= #UDLY 1'b1;
// endcase
取决于综合器
没有任何区别,就是消耗掉两个ALM,现在综合器没有那么弱智
你是指的fpga吧,能不能试试dc和rc.我没试过,随意给不出答案.
if一般带有优先级,硬件消耗多
case一般没有优先级,硬件消耗少
现在综合工具差不多可以识别是否需要优先级,然后调整电路结构。很多原本条件相异,根本不需要优先级的
沒差別
fpga没试过,不晓得。
ASIC肯定是有差别的,理由5楼已讲。
只是你这个例子有点特殊,只有1层条件,肯定是互斥的,可能合出来还真没有区别。
如果你要追根究底,写个8层if else,和8个分支的case,就一定有区别了。
赫赫,if和case主要牵扯到优先级的问题,确实和综合器想关。
假定综合器只做map和cell size的调整,不做逻辑结构的调整,那么有一种方式最节省, 就是输入有优先届,并用if的顺序来体现这个优先级。
个人建议写代码的时候就想着逻辑实现,而不要指望综合器的优化能力,所谓靠tool不如靠己。
学习了
学习了
学习中~
有区别,if else带优先级,Case不带。
看综合结果了,应该是一样的。
there is no difference for power consumption.
only path delay is different so you need to take care timing if it's a critical path.
仅就这个例子而言,case无论从资源还是时序上都会好,因为这是个很简单的译码逻辑,而case就是干这个的。
至于if...else...,实际包含了case的功能,case只是它的特例。当if的各条件互斥时,理想的综合工具会综合出和case相当的逻辑。
如果是我,既不会用if也不会用case,而是用assign。
我觉得,assign 和if 是完全一样一样的
学习了
看来你理解的assign不过是assign out = cond ? in1 : in2;这种逻辑。
是的啊,是的啊,呵呵,请教你对assign的理解?
