Repository navigation
research/benchmark: bit0 same-machine campaigns (openXC7 vs Vivado 2026.1): raw CSVs, machine files, harness - #613
Conversation
…26.1): raw CSVs, machine files, harness The raw artefacts of the bit0 (same-machine) half of the openXC7 vs Vivado benchmark, mirrored where the write-up will cite them. research/benchmark/bit0/README.md says which file answers what: the clean openXC7 campaign (N=5 per design, toolchain revisions stamped from the built tree at run time), the clean Vivado 2026.1 v2 campaign, both harness scripts and vivado-nonet.sh (the rootless network-namespace wrapper that stopped Flexera's raw connect() telemetry from booking minutes into write_bitstream), the contaminated v1 archived as evidence with its NOTE, REVISIONS.txt, and openxc7/timing-context/max-frequency-lines.txt: every "Max frequency" line of every stage log with its line number, so the timing column can be re-read from the LAST block (the routed one; the mid-log block is the placer's pre-route estimate).
|
Reviewed. The bundle is in better shape than the write-up it supports — I verified the numbers rather than reading the summary: Two things to add before this becomes the citable record. 1. The 12 MHz caveat says "(issue to be filed)". It is filed: openXC7/nextpnr-xilinx#155. Worth replacing the parenthetical with the link so a reader can follow it. 2. The missing caveat — ten of these rows time a bitstream that cannot run. Both The seconds are unaffected — the harness times three subprocesses and none of this touches that. What is affected is any sentence placed near them. "openXC7 built this in N seconds" stands; "…and it met timing" does not, and for these two designs "…and it ran" does not either. I would put that in Neither is a blocker on the data. Both are edits to the README. One thing that is not mine to wave through: So: I would merge with a |
…le was missing Follow-up to #613, kept separate so the measurement record stays exactly as @cavearr handed it over. harness/NOTE.md states why three .sh files are retained against the no-shell-scripts rule: they are the reproduction path for numbers this project quotes publicly. Rewriting them in Zig after the fact would produce a different harness and break the link between the artefacts and the thing that made them. The note is explicit that they must not be sourced, extended, or used as a template, and the rule file and CLAUDE.md now carry the same exemption so it is auditable rather than silent -- and so no future .sh sweep deletes them. README gains two things it needed before being citable. The 12 MHz caveat now links nextpnr-xilinx#155 instead of saying 'issue to be filed'. And the caveat that was absent: ten of the twenty openXC7 rows timed a bitstream that does not run -- both litex-ddr-arty-s7 designs are VexRiscv SoCs and the frozen toolchain predates the fix in nextpnr-xilinx#150. The seconds are unaffected; what is affected is any sentence placed next to them. Also states the routed figures with their log line numbers, since a published 65.5-69.7 MHz range took its floor from a placement estimate and its ceiling from a routed value. Routing came out above the estimate on one design and below it on the other, so mixing them is wrong in an unpredictable direction. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
|
Merged as delivered — Follow-up in The caveat that was missing is now in (Ignore the previous comment; my shell ate every backtick in it. A quoting bug that silently deletes the identifiers and posts the rest is a fair addition to this week's collection.) |
|
@cavearr Before you spend a bit0 slot on this: a re-run against a post-#150 toolchain would not move the seconds, and the diff settles it without a campaign. I was asked to re-measure now that #150 is merged, on the reasoning that ten of our twenty openXC7 rows timed a bitstream that does not run. Read the fix first.
So the wall-clock rows stand as measured and so does the ratio. The fix changes what the bitstream contains, not how long it took to produce. Which means the caveat I added to the bundle README needed sharpening rather than the numbers needing replacing, and I have done that ( The re-run that IS worth doing is functional, not temporal — does Two constraints worth stating so nobody proposes the shortcut: the campaign is same-machine by construction, and Vivado does not run on Apple Silicon at all, so the comparison half cannot be reproduced anywhere but bit0. A timing re-run on my hardware would produce numbers that cannot be placed beside the Vivado column — which is a worse outcome than no number. Separately, while checking this I verified all three commit ids against the upstream tree rather than carrying them forward: |
|
@gHashTag Agreed on all three counts, and thank you for handling the merge and the NOTE.md exemption the way you did — the harness stays what produced the numbers, which is the whole point of shipping it. On the re-run: right, #150 lives in The re-run that matters is functional, and it belongs to @hansfbaier: the Arty S7 is his board and litex-ddr-arty-s7 is his design (he already reports litex-minimal-arty-s7 booting after #134, at 50 MHz). We do not have an Arty S7 here; if Hans confirms the DDR design boots with |
As offered in the thread: the raw artefacts of the bit0 (same-machine) half of the openXC7 vs Vivado benchmark, mirrored where the write-up will cite them, under research/benchmark/bit0/.
The README there says which file answers what:
openxc7/: the clean openXC7 campaign (N=5 per design, toolchain revisions stamped from the built tree at run time), its machine snapshot, REVISIONS.txt (provisioning record; the harness re-reads revisions from the tree and does not trust it), and timing-context/max-frequency-lines.txt: every "Max frequency" line of every stage log with its line number, so the timing column can be re-read from the LAST block (the routed analysis; the mid-log block is the placer's pre-route estimate).
vivado/: the clean Vivado 2026.1 v2 campaign (two consecutive batches, both v2) with machine snapshots, and contaminated-v1/ archived as evidence with its NOTE (Flexera RUI telemetry making raw connect() calls that ignore the proxy environment, booking 4 to 7 nondeterministic minutes into write_bitstream).
harness/: both harness scripts, the Vivado tcl, designs.tsv, and vivado-nonet.sh (the rootless unshare -r -n wrapper with a dummy interface carrying the licensed MAC; the fix for the stall).
Known caveats are stated in the README: litex-ddr-arty-s7 (main) fails DRC BIVRU-1 under Vivado as frozen; picosoc's create_clock is commented out in its XDC; every openXC7 timing PASS is against nextpnr's 12 MHz default, because the design's create_clock on the pad net does not propagate through IBUF/BUFG/PLL (issue to be filed).