最小化程序段 - 如果,否则

时间:2011-04-09 14:58:54

标签: c logic verilog hdl

X,Y,Z,T是不同的工作。例如,X =多路复用器(...)

if ( empty1 ) 
   if ( empty2 )
      if ( empty3 ) 
         if ( empty4 )
             // Do nothing
         else 
             X  
      else 
         Y
   else 
      Z
else 
   T 

编辑:     emptyA是数字1或0,A是集合{1,2,3,4}

的成员

如何重写该程序段以获得最低比较成本

2 个答案:

答案 0 :(得分:1)

if(!empty1)
  T
else if (!empty2)
  Z
else if (!empty3)
  Y
else if (!empty4)
  X

如果在所有情况下返回值为false,则执行的操作无法减少比较。

答案 1 :(得分:1)

你有Verilog / HDL标签所以假设这是可合成逻辑:

//This may be more readable
    wire [3:0] empties = {empty4,empty3,empty2,empty1};
    casex (empties)
      4'xxx0: blah = T;
      4'xx01: blah = Z;
      4'x011: blah = Y;
      4'0111: blah = X;
      default: blah = something_else; //Shouldn't do nothing
    endcase

逻辑成本将取决于除此代码之外的其他因素。