使用case语句来改善verilog代码中if……else分支过多的问题

always@(a,b,c,d)
begin
  if(a)
  begin
    y = 2'b00;
  end
  else if(b)
  begin
    y = 2'b01;
  end
  else if(c)
  begin
    y = 2'b10;
  end
  else if(d)
  begin
    y = 2'b11;
  end
  else
  begin
      y = 2'b00;
  end
end

可以改写成

 

always@(a,b,c,d)
begin
  case(1'b1)
  a: y = 2'b00;
  b: y = 2'b01;
  c: y = 2'b10;
  d: y = 2'b11;
  default:y = 2'b00;
  endcase
end

 

将两端代码用synplify综合

前段代码综合为各个输入不互斥的多路选择器

后段代码综合为各个输入互斥的多路选择器

你可能感兴趣的:(c)