A failure names one key point, one input vector, and the two values. That triple reproduces the divergence in simulation without further search.
Everything else is context. The vector is the fact; the cone explains it.
Field | Example | Use |
|---|---|---|
Key point | Output y. | Names the cone to inspect. |
Vector | a=0, b=0, c=1. | Replays the divergence. |
Values | RTL 1, netlist 0. | Shows the polarity of the bug. |
The script below places the RTL and the mutated block side by side with full input ports. On the vector a=0, b=0, c=1 the RTL gives 1 and the mutated block gives 0, since the mutated term drops the inverter on a.
The miter exposes the shared inputs as in_a, in_b and in_c. The solver call pins those to that vector and asks for the trigger output at 1, so it exits cleanly only when a counterexample exists there.
read_verilog <<EOV
module gold(input wire a, b, c, output wire y);
assign y = (a & b) | (~a & c);
endmodule
module gate(input wire a, b, c, output wire y);
assign y = (a & b) | (a & c);
endmodule
EOV
proc
opt
miter -equiv -flatten -make_outputs gold gate m
hierarchy -top m
sat -set in_a 0 -set in_b 0 -set in_c 1 -set trigger 1 -verify m
log PASS: vector a0 b0 c1 separates RTL 1 from mutated netlist 0Hand evaluation agrees: RTL gives (0 AND 0) OR (1 AND 1), which is 1. The mutated block gives (0 AND 0) OR (0 AND 1), which is 0.
From the failing key point, walk backwards through its fan-in on both sides. The first gate whose inputs agree but whose outputs differ is the divergence origin.
Here the origin is the inverter on a in the second product term. The full table splits eight vectors into five agreements and three differences.
8 vectors total: 5 agree, 3 differ
agree share = 5 / 8 = 62.5%
differ share = 3 / 8 = 37.5%
62.5 + 37.5 = 100The second product term. RTL computes NOT-a AND c as 1; the mutated block computes a AND c as 0.
Both differed too. The first shares the same cause at a=0 and c=1; the second diverges with opposite polarity, since at a=1 the RTL gives b=0 while the mutated block gives b OR c=1.