минимизация сегмента программы - если, иначе - PullRequest
0 голосов
/ 09 апреля 2011

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 ]

1 голос
/ 09 апреля 2011

У вас есть теги 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

Стоимость логики будет зависеть от других факторов, кроме только этого кода.

1 голос
/ 09 апреля 2011
if(!empty1)
  T
else if (!empty2)
  Z
else if (!empty3)
  Y
else if (!empty4)
  X

Вы не можете уменьшить сравнения, поскольку у вас есть действие, которое выполняется, если возвращаемое значение равно false для всех случаев.

...