From d328b3545b5ea11731a38dc306f005e4e65ec515 Mon Sep 17 00:00:00 2001 From: Dmitrii Vasilev Date: Sun, 4 Oct 2026 22:56:56 +0700 Subject: [PATCH] ci(fpga): place gf12-clean, gf14-add and gf14-sub with HeAP, not SA All three came back "no clean seed" on seeds 1-8 in the #862 audit dispatch, the same way gf10-sub did (#856, #861). The SA/HeAP A/B on exp/sa-audit-ab (run 37213406352, regymm/openxc7 sha256:35c91073, seeds 1-16, the same Yosys and nextpnr flags as these workflows) puts it on the SA placer bug in openXC7/nextpnr-xilinx#162, "post-placement validity check failed for Bel 'SLICE_.../A5FF'": design SA clean HeAP clean HeAP s/seed HeAP Fmax gf12_clean 0 of 16 16 of 16 6-8 48.7-53.0 MHz gf14_add 3 of 16 16 of 16 4-5 43.5-47.9 MHz gf14_sub 0 of 16 16 of 16 6-9 36.8-39.9 MHz gf14_add's three SA seeds (10, 11, 15) took 44-52 s each and reached 25.6-27.9 MHz. These are conformance workflows: they run with --timing-allow-fail and none of them records Fmax, so the placer is not part of anything they claim. The seed range stays 1-8. Refs #862 Co-Authored-By: Claude Opus 5.5 --- .github/workflows/ax7203-gf12-clean.yml | 5 ++++- .github/workflows/ax7203-gf14-add.yml | 6 +++++- .github/workflows/ax7203-gf14-sub.yml | 5 ++++- 3 files changed, 13 insertions(+), 3 deletions(-) diff --git a/.github/workflows/ax7203-gf12-clean.yml b/.github/workflows/ax7203-gf12-clean.yml index 96791df5e0..4d88b036df 100644 --- a/.github/workflows/ax7203-gf12-clean.yml +++ b/.github/workflows/ax7203-gf12-clean.yml @@ -37,6 +37,9 @@ jobs: docker run --rm -v "$PWD:/work" -w /work regymm/openxc7 bash -c "cd /nextpnr-xilinx && python3 xilinx/python/bbaexport.py --device xc7a200tfbg484-2 --bba /work/build/gf12_clean/chipdb/xc7a200tfbg484-2.bba && bbasm -l /work/build/gf12_clean/chipdb/xc7a200tfbg484-2.bba /work/build/gf12_clean/chipdb/xc7a200tfbg484-2.bin" - name: nextpnr (seed search) run: | + # --placer heap, not sa (#862). SA leaves invalid tiles on this design ("post-placement validity + # check failed for Bel 'SLICE_.../A5FF'", openXC7/nextpnr-xilinx#162) and placed 0 of seeds 1-16. + # HeAP placed 16 of 16, 6-8 s each, Fmax 48.7-53.0 MHz (regymm/openxc7 sha256:35c91073, run 37213406352). CLEAN=0; for s in $(seq 1 8); do rm -f build/gf12_clean/gf12_clean_ax7203.fasm docker run --rm -v "$PWD:/work" -w /work regymm/openxc7 timeout --signal=KILL 1800 nextpnr-xilinx \ @@ -45,7 +48,7 @@ jobs: --json /work/build/gf12_clean/gf12_clean_ax7203.json \ --write /work/build/gf12_clean/gf12_clean_ax7203_routed.json \ --fasm /work/build/gf12_clean/gf12_clean_ax7203.fasm \ - --freq 50.0 --seed $s --placer sa --router router1 --timing-allow-fail > /tmp/np_$s.log 2>&1 || true + --freq 50.0 --seed $s --placer heap --router router1 --timing-allow-fail > /tmp/np_$s.log 2>&1 || true if grep -q "Failed to find a route" /tmp/np_$s.log || [ ! -f build/gf12_clean/gf12_clean_ax7203.fasm ]; then continue; fi cp /tmp/np_$s.log /tmp/np.log; CLEAN=$s; break done; [ "$CLEAN" = "0" ] && { echo "::error::no clean seed"; exit 1; }; echo "seed=$CLEAN" diff --git a/.github/workflows/ax7203-gf14-add.yml b/.github/workflows/ax7203-gf14-add.yml index 54037e87bc..1adfc66c23 100644 --- a/.github/workflows/ax7203-gf14-add.yml +++ b/.github/workflows/ax7203-gf14-add.yml @@ -37,6 +37,10 @@ jobs: docker run --rm -v "$PWD:/work" -w /work regymm/openxc7 bash -c "cd /nextpnr-xilinx && python3 xilinx/python/bbaexport.py --device xc7a200tfbg484-2 --bba /work/build/gf14_add/chipdb/xc7a200tfbg484-2.bba && bbasm -l /work/build/gf14_add/chipdb/xc7a200tfbg484-2.bba /work/build/gf14_add/chipdb/xc7a200tfbg484-2.bin" - name: nextpnr (seed search) run: | + # --placer heap, not sa (#862). SA leaves invalid tiles on this design ("post-placement validity + # check failed for Bel 'SLICE_.../A5FF'", openXC7/nextpnr-xilinx#162) and placed 3 of seeds 1-16 + # (10, 11, 15; 44-52 s each, Fmax 25.6-27.9 MHz). HeAP placed 16 of 16, 4-5 s each, Fmax 43.5-47.9 MHz + # (regymm/openxc7 sha256:35c91073, run 37213406352). CLEAN=0; for s in 1 2 3 4 5 6 7 8; do rm -f build/gf14_add/gf14_add_ax7203.fasm docker run --rm -v "$PWD:/work" -w /work regymm/openxc7 timeout --signal=KILL 1800 nextpnr-xilinx \ @@ -45,7 +49,7 @@ jobs: --json /work/build/gf14_add/gf14_add_ax7203.json \ --write /work/build/gf14_add/gf14_add_ax7203_routed.json \ --fasm /work/build/gf14_add/gf14_add_ax7203.fasm \ - --freq 50.0 --seed $s --placer sa --router router1 --timing-allow-fail > /tmp/np_$s.log 2>&1 || true + --freq 50.0 --seed $s --placer heap --router router1 --timing-allow-fail > /tmp/np_$s.log 2>&1 || true if grep -q "Failed to find a route" /tmp/np_$s.log || [ ! -f build/gf14_add/gf14_add_ax7203.fasm ]; then continue; fi cp /tmp/np_$s.log /tmp/np.log; CLEAN=$s; break done; [ "$CLEAN" = "0" ] && { echo "::error::no clean seed"; exit 1; }; echo "seed=$CLEAN" diff --git a/.github/workflows/ax7203-gf14-sub.yml b/.github/workflows/ax7203-gf14-sub.yml index 8dab954f9b..216e5bb4fe 100644 --- a/.github/workflows/ax7203-gf14-sub.yml +++ b/.github/workflows/ax7203-gf14-sub.yml @@ -37,6 +37,9 @@ jobs: docker run --rm -v "$PWD:/work" -w /work regymm/openxc7 bash -c "cd /nextpnr-xilinx && python3 xilinx/python/bbaexport.py --device xc7a200tfbg484-2 --bba /work/build/gf14_sub/chipdb/xc7a200tfbg484-2.bba && bbasm -l /work/build/gf14_sub/chipdb/xc7a200tfbg484-2.bba /work/build/gf14_sub/chipdb/xc7a200tfbg484-2.bin" - name: nextpnr (seed search) run: | + # --placer heap, not sa (#862). SA leaves invalid tiles on this design ("post-placement validity + # check failed for Bel 'SLICE_.../A5FF'", openXC7/nextpnr-xilinx#162) and placed 0 of seeds 1-16. + # HeAP placed 16 of 16, 6-9 s each, Fmax 36.8-39.9 MHz (regymm/openxc7 sha256:35c91073, run 37213406352). CLEAN=0; for s in 1 2 3 4 5 6 7 8; do rm -f build/gf14_sub/gf14_sub_ax7203.fasm docker run --rm -v "$PWD:/work" -w /work regymm/openxc7 timeout --signal=KILL 1800 nextpnr-xilinx \ @@ -45,7 +48,7 @@ jobs: --json /work/build/gf14_sub/gf14_sub_ax7203.json \ --write /work/build/gf14_sub/gf14_sub_ax7203_routed.json \ --fasm /work/build/gf14_sub/gf14_sub_ax7203.fasm \ - --freq 50.0 --seed $s --placer sa --router router1 --timing-allow-fail > /tmp/np_$s.log 2>&1 || true + --freq 50.0 --seed $s --placer heap --router router1 --timing-allow-fail > /tmp/np_$s.log 2>&1 || true if grep -q "Failed to find a route" /tmp/np_$s.log || [ ! -f build/gf14_sub/gf14_sub_ax7203.fasm ]; then continue; fi cp /tmp/np_$s.log /tmp/np.log; CLEAN=$s; break done; [ "$CLEAN" = "0" ] && { echo "::error::no clean seed"; exit 1; }; echo "seed=$CLEAN"