ALU NOOP 案例推断出一个闩锁:这样可以吗?

ALU NOOP case infers a latch: Is this OK?

我正在 Verilog 中设计一个 ALU,其中包含一个组合 always 块和每个 opcode 的案例。在 NOOP 的情况下,应该不会发生任何事情,所以我只是设置 result = result。我明白为什么这会推断出一个闩锁。我的问题是:在这种情况下是否有更好的方法或推断的锁存器是否是正确的决定?

always@(Rdest, Rsrc, opcode, reset) begin
  case(opcode)
    ...
    default:
    NOOP: result = result; //  Infers a latch
  endcase
end

这种情况下,避开latch应该很简单。您可以将 result 设置为一个常量值,例如 0。使用 result 的逻辑可能会在 ALU 执行 NOOP 时忽略它:

  case(opcode)
    ...
    ADD     : result = a + b;
    NOOP    : result = 0; // some known value  
    default : result = 0; // some known value 
  endcase

由于计时问题,在许多情况下最好避免闩锁。另见:Why are inferred latches bad?