分配vs if语句

时间:2014-11-12 23:18:17

标签: system-verilog

这是:

  assign ON = signalA && signalB;
  always_comb begin
    case (blabla)
      case_A: begin
        if (ON) next_state = some_state;
      end
  ...

相当于:

  always_comb begin
    case (blabla)
      case_A: begin
        if (signalA && signalB) next_state = some_state;
      end
  ...

他们生产相同数量的硬件吗?这个比那个好吗?

1 个答案:

答案 0 :(得分:5)

在这种情况下,他们应该产生相同数量的逻辑。

一般情况下,至少following reasons

首选always_comb
  • 如果右侧有一个函数,它取决于全局网络或变量,那么使用always_comb会更准确,因为它“对函数内容的变化很敏感”。
  • always_comb会生成有关推断锁存器的警告。

同样,你也可以写:

 always_comb ON = signalA && signalB;
 always_comb begin
    case (blabla)
      case_A: begin
        if (ON) next_state = some_state;
      end
 end

或:

 always_comb begin
    ON = signalA && signalB;
    case (blabla)
      case_A: begin
        if (ON) next_state = some_state;
      end
 end

请注意,通过连续分配或signalA && signalBON分配给always_comb,您无需创建额外的逻辑。将其视为内部信号,无论哪种方式存在,但您可能会或可能不会选择为其指定名称。执行此操作的一个原因是在波形显示上调试和查看signalA && signalB的值。