DATE 2027 · direction proposal · 3 August 2026
A reference-free, testbench-free correctness signal for LLM-generated Verilog. At zero false alarms it catches 95.5% of problems containing a wrong implementation. Every cheap text heuristic catches under 8%. Everything below ran on a MacBook Air with yosys and no paid API.
The decision I need on Monday
The instrument works and beats every cheap alternative with a significant margin. What is not yet proven is the causal claim: that adding a missing sentence to a specification repairs the failure. That is a one-week experiment with a clear kill gate. If the placebo row is not null, I stop and tell you.
Specific ask for Rolf's group: 26 of 156 problems were dropped because they are sequential circuits with no reset, so there is no defined start state. I have an untested zero-init contract. Does the group have a better sequential equivalence flow? That is where your expertise buys us 25% coverage directly.
Where the old direction went
The drift score was computed from text alone and never touched the model, so it could not be a statement about model competence. On ResBench, design category by itself explains R² = 0.610 of pass-rate variance across nine commercial models; specification length explains 0.016; the drift score adds nothing significant on top of category. That line of work is closed. Everything below is new.
Figure 1 · the method
In deployment there is no golden model and no testbench, so the usual correctness oracles are unavailable. The signal is built instead from the model's disagreement with itself, adjudicated formally rather than by simulation.
Two properties carry the whole argument. Soundness is free: if the k answers compute different functions, at most one can match intent, so at least one is wrong. That is a theorem, not a threshold. No language model sits in the measurement path: the model proposes, only the solver judges.
Figure 2 · the experiment
Two measurements, kept strictly independent. One consults the golden reference and is used only for grading. The other never sees it, matching the deployment condition.
Method note. The outcome variable is ground truth from the golden references, never the predictor. One half of the formal signal is analytic rather than empirical: if the samples fall into more than one class, at least one is wrong by construction. The empirical content is therefore the other half, the 44/47 figure, and the recall comparison against baselines. AUROC differences are paired bootstrap, 4,000 resamples.
Headline evidence
Evidence explorer
Unresolved and excluded rows are rendered inert and are excluded from every reported statistic, in both directions.
Specimens
Each verdict comes with a machine-derived witness, hand-checkable in under a minute.
air_quality_index · ResBench · both implementations passed the official testbench · solver proves they are different functions
Signal Name Dec Hex Bin \in_no2 251 fb 11111011 \in_pm10 255 ff 11111111 \in_pm2_5 254 fe 11111110 SAT proof finished - model found: FAIL!
assign min_val =
(pm2_5 <= pm10)
? ((pm2_5 <= no2) ? pm2_5 : no2)
: ((pm10 <= no2) ? pm10 : no2);end else begin // pm2_5 < pm10
if (pm10 >= no2) begin
max_val = pm10;
min_val = pm2_5; // never compares no2
endOutputs 355 instead of 354. The official testbench applies 3 input vectors over a 24-bit (16.7 million point) input space, and its test cases are numbered 3, 4 and 5: cases 1 and 2 do not exist in the file.
relu · ResBench · 22 of 23 compiling failures across GPT-4, GPT-4o, o1-mini, Llama-3.1-405B, qwen-max, qwen-plus, qwen2.5-coder-32B, Codestral and GPT-3.5 compute the identical wrong function
assign out = (in_0 > 16'd0) ? in_0 : 16'd0;
assign out = (in_0 > 0) ? in_0 : 0;
Unsigned literal forces an unsigned comparison, so the function is identity on all negative inputs. The specification is one sentence, “Implement a Verilog module to compute the ReLU activation function,” and never constrains signedness. The counterexample localises the defect to a single missing specification constraint. That is the input to the causal experiment.
Prob089_ece241_2014_q5a · VerilogEval · spec asks for a serial machine processing bits as they arrive, for numbers of arbitrary length
reg [31:0] shift_reg;
...
shift_reg <= {shift_reg[31:1], x};
...
assign z = output_valid
? ~shift_reg + 1 : 32'b0;
// 32-bit expression → 1-bit port
// fixed 32 bits, not arbitrary lengthparameter A=0,B=1,C=2;
reg [1:0] state;
always @(posedge clk, posedge areset)
if (areset) state <= A;
else case (state)
A: state <= x ? C : A;
B: state <= x ? B : C;
C: state <= x ? B : C;
endcase
assign z = (state == C);Every sample buffered the number then negated it, instead of streaming. Eight independent attempts, one coherent misconception. This is the method's honest failure mode: agreement is good news, not proof. It happens on 6.4% of agreement cases here, comparable to software (3% HumanEval, over 10% MBPP, per Richter & Papadakis).
Prob006_vectorr · spec: “reverse the bit ordering of the input port”
assign out = {in[7], in[6], in[5], in[4], in[3], in[2], in[1], in[0]};
Descending concatenation reconstructs the operand, so this is the identity. Five of eight samples emitted it. Conversely, on Prob009_popcount3 an addition chain, a bare sum and an eight-line case table were proved to be one circuit. Median textual diversity was 7 distinct programs out of 8 in correct and incorrect cases alike, so surface similarity carries no signal in either direction.
Positioning
Two papers from Schlichtmann's group at TU München do something adjacent. Both PDFs are in salvage/papers/. I read both in full; the quotes below are verbatim.
| Work | What it does | How it decides two candidates behave the same | Why ours is different |
|---|---|---|---|
| VRank ISQED 2025 arXiv:2502.00028 |
Generates candidates, clusters them, ranks clusters, picks the best. Reports +10.5% pass@1 on VerilogEval-Human. | “we group Verilog code candidates into clusters based on identical outputs when tested against the same testbench, which is also generated by LLMs” | Their rule is provably blind on the cases that matter: two candidates that both pass necessarily agree on every test case, so they always land in the same cluster. Measured gap: 4 of 7 ResBench modules where all passing implementations look identical to a testbench and are provably different circuits. Also: theirs is a generation method aimed at raising pass rate; ours is a verification signal aimed at telling the engineer when to stop. |
| VClare 25 Jul 2026 arXiv:2607.24854 |
Repairs imperfect specifications. Builds VerilogEval-Defect (156 tasks) by injecting spec defects. Reports +12.7%. | “ci and cj belong to the same cluster if and only if their outputs match on all test cases”. Searched the full text for formal, SAT, Yosys, miter, model checking, BMC: none appear. | |
| RealBench arXiv:2507.16200 |
IP-level benchmark with 100% line-coverage testbenches and a formal checker. | “44.2% of the Verilog code generated by GPT-4-Turbo, which passes the testbenches in RTLLMV2, fails in formal verification” | They check candidate against a golden reference. We check candidates against each other, which needs no reference and therefore works in deployment, where no reference exists. Their number is our motivation, not our competition. |
The unclaimed gap: candidate-versus-candidate formal partitioning of LLM RTL samples, used as a reference-free correctness signal and as a root-cause diagnostic. Searches for prior work on this returned nothing on point; that is an absence of evidence, and I would want one more pass before writing the related-work section.
Plan
Every week has a gate that can stop the project. The week-1 gate is the one that decides whether there is a paper.
Cut order if behind: drop RTLLM, then the third model, then calibration. Never cut the causal experiment or the placebo row. Without the placebo there is no causal claim and the paper reduces to a correlation, which is exactly what sank the last submission.
Risks
Reproduce
All figures on this page were produced by scripts run on a MacBook Air (M4, 16 GB) between 30 July and 3 August 2026. Numbers described as measured were re-run and reproduced independently; numbers read from published papers are quoted verbatim with their arXiv identifiers. Unresolved solver results are reported as unresolved and are never counted as evidence.