STEP: 1590 / Date: 2026-08-30 / Type: Phase C 13 diagnostic / Status: ★ silicon verify 完了 (programming transient 仮説 完全確定)
★★ 結論 (silicon verify 済): STEP 1574 generator の counter reset-comparison pattern に bug なし。 STEP 1586 Rev 1 の LED 点滅せず 現象は 一時的な programming transient (bitstream valid、 FPGA に load されず) と silicon 実機で 確定。
Rev 1 rebuild bitstream (UserCode 0x0000B4BF) を Nano 9K に program → fs↔programmed UserCode 一致 ✅ + LED ~0.5 Hz 点滅 (藤本さん目視)。
⚠ STEP 1586 への corrigendum: 「STEP 1574 generator の oscillator stub に bug」 との 記述は 推定に基づいた誤り。 実際は programming transient の 可能性が高い。 code 修正は 不要、 defensive practice (post-program UserCode 検証) 追加のみ 推奨。
| 項目 | STEP 1586 Rev 1 (失敗) | Rev 1 rebuild (本 STEP) | Rev 2 (成功) | STEP 1038 (成功) |
|---|---|---|---|---|
| Source Verilog | counter reset-comparison | 同一 (byte-for-byte) | free-running counter | free-running counter |
| Build 成功 | ✅ | ✅ | ✅ | ✅ |
| Resource (LUT/FF/CLS) | 35/26/19 | 35/26/19 | 26/25/15 | 25/24/15 |
fs //UserCode: | (上書き済不明) | 0x0000B4BF ★ | 0x0000F675 | 0x0000A5F4 |
| Programmed User Code | 0x00000000 | (未 program) | 0x0000F675 | 0x0000A5F4 |
| UserCode fs ↔ programmed | ❌ 一致せず | — | ✅ 一致 | ✅ 一致 |
| Status Code | 0x00035421 | — | 0x0003F020 | 0x0003F020 |
| LED 動作 | ❌ | (未 program) | ✅ | ✅ |
//UserCode: header = 0x0000B4BF (非零 valid checksum)DFFR (Gowin sync-reset D-FF) が 25 個生成、 RESET input は 25-bit comparator LUT chain の 出力 n24_4 に接続、 DFFE local_tick の CE 入力も 同じ n24_4。 これは Verilog の期待どおり合成:
DFFR local_counter_0_s0 (
.Q(local_counter[0]),
.D(n51_6),
.CLK(clk_d), // ← generic routing (TA1132 warning、 Rev 2/STEP 1038 と同じ)
.RESET(n24_4) // ← comparator output (== 26_999_999 で fire)
);
DFFE local_tick_s1 (
.Q(output_pulse_d),
.D(n77_5), // ← ~local_tick
.CLK(clk_d),
.CE(n24_4) // ← 同じ comparator output
);
∴ synthesized design は 「正しい silicon 動作の期待」 を持つ。
「User code mismatch」 warning は 実は critical signal: fs header の UserCode と programmed User Code が異なる = configuration 失敗。 progress bar 100% だけを見て信頼してはいけない。 STEP 1586 で 私 (Claude) が この signal を 軽視した (「cosmetic warning」 と 判断)。 これが 本 STEP の 主 lesson。
hardware/phase-c/13-.../impl/pnr/radio_clock_rev1.fs) を Nano 9K に program → LED 点滅すれば programming transient 仮説 確定# programmer_cli 実行後、 UserCode diff 自動 verify
FS_USERCODE=$(grep "UserCode:" impl/pnr/*.fs | awk '{print $NF}')
PROG_OUTPUT=$(programmer_cli --device GW1NR-9C --cable-index 1 --run 2 --fsFile impl/pnr/*.fs 2>&1)
PROG_USERCODE=$(echo "$PROG_OUTPUT" | grep "User Code is:" | awk '{print $NF}')
if [ "$FS_USERCODE" != "$PROG_USERCODE" ]; then
echo "★ Configuration MAY have failed: fs=$FS_USERCODE prog=$PROG_USERCODE"
echo " Retry recommended"
exit 1
fi
hardware/phase-c/13-nano9k-radio-clock-rev1-diagnostic/radio_clock_rev1.v (STEP 1586 Rev 1 byte-for-byte 再現)hardware/phase-c/13-nano9k-radio-clock-rev1-diagnostic/tang_nano_9k.csthardware/phase-c/13-nano9k-radio-clock-rev1-diagnostic/build.tclhardware/phase-c/13-nano9k-radio-clock-rev1-diagnostic/README.md (詳細分析)