在芯片设计中,前仿真通过了,不代表你的设计就没问题。
组合逻辑毛刺,本质上就是电路在状态切换时产生的短暂脉冲干扰。想象一下,当多个信号同时变化时,由于传输路径不同,它们到达目标的时间就会有差异,这种时间差会在输出端产生意料之外的瞬间跳变。
举个实际的例子。假设我们设计了一个简单的地址译码器:
module addr_decoder( input [2:0] addr, output reg out ); always @(*) begin if (addr == 3'b101) out = 1'b1; else out = 1'b0; end endmodule当地址从3'b100变到3'b101时,理论上只有最低位变化。但在实际电路中,各位的信号延迟不同以及A&~A的电路存在可能会出现3'b100 → 3'b000 → 3'b001 → 3'b101这样的中间态,每个中间态都会让输出产生一次跳变。