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?
我正在 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?