分配vs如果语句

use*_*669 2 system-verilog

这是:

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

等效于:

  always_comb begin
    case (blabla)
      case_A: begin
        if (signalA && signalB) next_state = some_state;
      end
  ...
Run Code Online (Sandbox Code Playgroud)

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

Ari*_*Ari 5

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

通常,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
Run Code Online (Sandbox Code Playgroud)

要么:

 always_comb begin
    ON = signalA && signalB;
    case (blabla)
      case_A: begin
        if (ON) next_state = some_state;
      end
 end
Run Code Online (Sandbox Code Playgroud)

请注意,通过分配signalA && signalBON连续作业或任always_comb,没有创建额外的逻辑。可以将其视为内部信号,以任何一种方式存在,但是您可以选择也可以不为其指定名称。这样做的一个原因是调试和查看signalA && signalB波形显示上的值。