Conversation
…plained (Closes #5908) Part of #5906. The FPGA Build / fpga-conformance ratchet printed 178 (baseline 176). iverilog version moved no row: CI installs 12.0 unpinned and master run 35677509145 printed 176 under 12.0. - ternary_isa 6 -> 7 (901ed4f, #4594): W459 bound an array parameter to a test-local `given stages = [...]`, deleting `input [263:0] stages;`. Compiler fix: bind only to a module-level const or var. Test first: bootstrap/tests/verilog_array_param_test_local.rs. FROZEN_HASH updated. - uart 0 -> 1 (942a001, #4651): the #2364 reproduction patch was applied to the spec. The on_comb line is restored. - adapter NEW 0 (d4a7164): a clean new module failed the step. check_elab_ratchet.py reports NEW-clean and exits 0. The self-check case NEW0 was written first and shown failing. adapter 0 recorded. The baseline was re-taken under iverilog 12.0, with the total unchanged at 176. Fifteen seals were resealed for the new Verilog hashes. GftGeneralizeDemo was resealed with --force because a test already fails on master; a tests-fail ledger row records it. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…5908) The comment above "The gates in this file's table must fail loudly" said the elaboration ratchet "has failed on every master run". That stops being true once #5948 lands. It now says what the ratchet checks: each generated module's iverilog elaboration count is at most its row in tools/elab_baseline.txt, and a module new to the set passes only at 0. The a90bdac..#5908 failure is kept as history. Only comment lines change. The parsed workflow is identical at HEAD and after the edit (8 jobs, 42 run steps), so the cli-tri census does not move. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
📓 NotebookLM Notebook linked to this PR
This notebook contains session context, decisions, and artifacts for this work. |
PR DashboardGenerated at: 2026-10-04 07:57:16 UTC
Summary
Seal Status
|
|
PR #6686 takes this PR's t27 and data parts (the uart |
Closes #5908
Part of #5906
FPGA Build / fpga-conformancefailed at the elaboration ratchet with178 (baseline 176). After this PR it prints176 (baseline 176) OKand exits 0. This was reproduced exactly with master's t27c and iverilog 12.0.(c) iverilog version: it moved no row
iverilog-version 13.0. CI does not pin iverilog: it runsapt-get install -y iverilog, which on ubuntu noble is12.0-2build2.Unpacking iverilog (12.0-2build2)and176 (baseline 176) OK. The 13.0-taken numbers therefore matched 12.0 row for row.(a) Per row: cause, commit, proof
ternary_isagiven stages = [...]. W459 binds a[N]Tparameter to the identifier at its call sites, test blocks included, and took that local for a module array.pipeline_total_latencylostinput [263:0] stages;and indexed an undeclared name:Unable to bind wire/reg/memory stages[...].git show 901ed4fcc^:specs/fpga/ternary_isa.t27-> 6 errors;git show 901ed4fcc:specs/fpga/ternary_isa.t27-> 7. The only Verilog diff is the lostinputline.uartfn on_comb(data: u8) -> bool { return uart_tx_send(data); }with anon_clockbody:uart.v:175: Could not find variable on_clock in ZeroDSP_UART.data/result, which is whatcontrib/formal/uart_formal_props.vbinds.adapterspecs/fpga/adapter.t27, which has 0 errors. The step still failed, becauseif worse or new: return 1counted a clean new module as a regression.NEW adapter 0, exit 1.Red runs on master: a90bdac (177, ternary_isa), 078f8ad (178, uart), then cadd11b (adds NEW adapter).
Fixes
constorvar; anything else is passed by value (gen-verilog: packed-array param element index emits bit-select, not part-select #1745 part-selects).bootstrap/stage0/FROZEN_HASHis updated.bootstrap/tests/verilog_array_param_test_local.rs.test_local_array_argument_is_passed_by_valuechecks forinput [127:0] xs;and runs iverilog/vvp, expectingtotal = 10. It FAILED before the fix.module_level_array_argument_is_still_boundis the W458 control: still bound, readsTABLE[i]. It passed before and after.verilog_array_param_indexstill passes.on_combline is restored. The gen-verilog: on_clock with a return type emits an assignment to an implicitly-declared identifier underdefault_nettype none#2364 compiler defect, anon_clockbody assigning to an undeclaredon_clock, is still live even though gen-verilog: on_clock with a return type emits an assignment to an implicitly-declared identifier underdefault_nettype none#2364 is closed. It is not fixed here.NEWplus a "clean, record it with --update-baseline" line and exits 0. A new module with errors still fails. The self-check caseNEW0was written first and shown failing (exit = 1 (want 0));--self-checknow passes.adapter 0, with a note on why. ternary_isa and uart were not absorbed into the baseline: they were fixed.Blast radius of the compiler fix
The Verilog of 10 specs changes; Zig, C and Rust output do not. iverilog error counts for those specs (only ternary_isa is in the ratchet set):
vsa/ops is unmasking, not a regression. The old output bound one argument for all three array parameters and computed
v+v+v. Now each is passed by value, and the remaining error is on lines that were already there.Seals. The 15 seals whose Verilog hash moved are resealed with
t27c seal --save.tools_GftGeneralizeDemowas resealed with--force: itssoftmax_picks_the_max_indextest already fails with master's t27c (it was recordedblocked).tools/seal_baseline.txtgets atests-failrow for it. UART_Bridge's seal records the restored uart spec.check_seal_currency.pyandcheck_seal_coverage.pyboth exit 0.The rest of fpga-conformance and the other FPGA jobs
On master run 37185428922 every fpga-conformance step after the ratchet was skipped, so none was red on its own. Locally on this branch they all pass:
read_verilog -sv -DSIMULATION; hierarchy -toppasses for 37/37 generated modules.t27c synth-readinessreports 38/38, READY FOR SYNTHESIS.t27c fpga-build --docker false --synth-onlycompletes under yosys 0.67, with and without--minimal. ZeroDSP_UART is synthesised inside ZeroDSP_TopLevel.The other FPGA jobs (smoke, synthesis, synthesis-arty, formal, bitstream, report) were green on master. No hardware was touched or flashed.
Left open
default_nettype none#2364's compiler defect is still live; see above.gft_generalize_demo'ssoftmax_picks_the_max_indextest is failing..github/workflows/fpga-build.yml:839says the ratchet "has failed on every master run". It goes stale once this lands and is not edited here.🤖 Generated with Claude Code