Skip to content

Unbreak FPGA CI and correct two unbacked hardware claims - #2081

Open
dmitrii-f-t27 wants to merge 1 commit into
gHashTag:masterfrom
dmitrii-f-t27:fix/ci-unbreak
Open

Unbreak FPGA CI and correct two unbacked hardware claims#2081
dmitrii-f-t27 wants to merge 1 commit into
gHashTag:masterfrom
dmitrii-f-t27:fix/ci-unbreak

Conversation

@dmitrii-f-t27

Copy link
Copy Markdown

Four independent fixes, all small.

1. fpga-synthesis has been red since 2026-04-14. Both writers of synth.ys in bootstrap/src/main.rs (:4937 Docker branch, :4962 local-yosys branch) emit read_verilog {files} with the Verilog-2005 frontend, while the backend deliberately emits SystemVerilog static casts (compiler.rs:5068). Yosys therefore fails with Static cast is only supported in SystemVerilog mode on build/fpga/generated/uart.v. Both now read read_verilog -sv -DSIMULATION {files}, matching the invocation that already works at suite.rs:859.

That fpga-synthesis-arty passes today is not a counter-example: --minimal narrows the yosys input to {top}.v, which carries no test blocks.

2. fpga-bitstream has never succeeded once. .github/workflows/fpga-build.yml:327 clones upstream YosysHQ/nextpnr and configures -DARCH=xilinx, but upstream nextpnr has no xilinx architecture — nextpnr-xilinx is a separate fork. CMake rejects the arch and the job exits 1. Now clones gatecat/nextpnr-xilinx.

⚠️ This will not turn the job green on its own. The Create chipdb symlink step writes a 1 MB /dev/zero placeholder, and real nextpnr-xilinx will reject it. Building the chipdb from prjxray-db is a larger change and is deliberately not in this PR.

3. README claimed GREEN for three red rows. Measured from the API: fpga-build.yml has 881 runs — 36 success, 842 failure, 3 cancelled; last success 2026-04-14; the fpga-bitstream job is skipped behind needs: fpga-synthesis. Those three rows now read RED with the last-green date. The gen-verilog smoke rows are left GREEN — that path uses the correct invocation and does pass.

4. Two unbacked hardware figures.

specs/numeric/formats_catalog.t27:228 cited zenodo 10.5281/zenodo.19227877 as its hardware archive. That DOI resolves to Trinity B007: VSA Operations for Ternary Computing v5.0 — resource type Software, one 2.0 kB file, no FPGA frequency and no design. The 323 MHz figure and the Zenodo citation are removed; source now points at specs/numeric/gf16.t27. The 35/35 claim goes with them: the only 35/35 in this repo is Icarus and cocotb, i.e. simulation, not an FPGA run.

docs/arxiv-submission/trinity-gf16.tex:296 and docs/arxiv-trinity-gf16-draft.md:116 give the XC7A100T LUT count as 126,800. That is the part's flip-flop count; its LUT count is 63,400. Corrected. Note this makes the design's occupancy look better, not worse: 40,350/63,400 = 63.6%.

Not in this PR, flagged for you:

  • specs/igla/coder/benchmark.t27:670 and :677 carry the same 35/35 at 323 MHz. That file faithfully quotes arXiv:2606.05017, so editing it before a v4 correction would desynchronise it from its own source.
  • The spiOverJtag_xc7a100tfgg676.bit rename (the file is an FTG256 bitstream; the real FGG676 build is parked under .v2) involves binaries and a .gz regeneration.

bootstrap/src/main.rs:4937,4962 — both synth.ys writers (Docker branch and
  local-yosys branch) emitted `read_verilog {files}`, parsing the compiler's
  own output with the Verilog-2005 frontend. The Verilog backend deliberately
  emits SystemVerilog static casts (bootstrap/src/compiler.rs:5068,
  `format!("{}'({})", width, buf)`), so yosys aborted with "Static cast is only
  supported in SystemVerilog mode" on build/fpga/generated/uart.v. Switched
  both to `read_verilog -sv -DSIMULATION {files}`, matching the working
  invocation already used at bootstrap/src/suite.rs:859.

.github/workflows/fpga-build.yml:327 — the fpga-bitstream job cloned upstream
  YosysHQ/nextpnr and configured it with -DARCH=xilinx, but upstream nextpnr
  has no xilinx architecture, so CMake rejected the arch and the job exited 1.
  Clone gatecat/nextpnr-xilinx instead; dropped the `-b nextpnr-0.8` tag (it
  does not exist on the fork) and updated the following `cd` to the new
  directory name. The build/ and `cp nextpnr-xilinx` steps already match the
  fork's binary name and needed no change. prjxray clones left untouched.

README.md:60,61,70 — System Status advertised the FPGA end-to-end bitstream
  pipeline as GREEN. Per the GitHub API, fpga-build.yml has 881 runs: 36
  success, 842 failure, 3 cancelled; last success 2026-04-14; fpga-bitstream is
  skipped because its `needs: fpga-synthesis` never passes. Downgraded the
  three rows to RED with the measured numbers and the last-green date, while
  noting the local gen-verilog smoke still passes 5/5.

specs/numeric/formats_catalog.t27:228 — the gf16 row cited Zenodo DOI
  10.5281/zenodo.19227877 as its standard/source. That record is "Trinity B007:
  VSA Operations for Ternary Computing v5.0", resource type Software, a single
  2.0 kB file with no FPGA frequency and no design, so it backs neither the
  standard nor the "323 MHz" claim. Dropped the "FPGA 35/35 at 323 MHz Artix-7"
  clause and the zenodo reference; source now cites specs/numeric/gf16.t27,
  which exists in this repo. All other fields unchanged.

docs/arxiv-submission/trinity-gf16.tex:296 — XC7A100T LUT count was given as
  126,800, which is the part's flip-flop count; corrected to 63,400.
docs/arxiv-trinity-gf16-draft.md:116 — same correction.

Deferred: the spiOverJtag bitstream rename is not included; it involves binary
files and a .gz regeneration and is left for the maintainer.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant