System verilog 赋值vs if语句

System verilog 赋值vs if语句,system-verilog,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 &

这是:

  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
  ...

他们生产同样数量的硬件吗?一个比另一个好吗

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

通常,至少在以下情况下,
始终\u comb
是首选:

  • 如果右侧有一个函数,并且它依赖于一个全局网络或变量,那么使用
    总是\u comb
    更准确,因为它“对函数内容内的更改很敏感”
  • 始终\u comb
    将生成有关推断闩锁的警告
同样,你也可以写:

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

请注意,通过连续赋值或始终将
组合
signalA和&signalB
分配给
ON
,您并没有创建额外的逻辑。把它看作是一个内部信号,不管是哪种方式存在,但是你可以选择或者不给它指派一个名字。这样做的一个原因是为了调试和查看波形显示器上
signalA和&signalB
的值

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