|
4 | 4 | "date": "2026-03-14", |
5 | 5 | "category": "JTAG", |
6 | 6 | "action": "Flash uart_echo_top.bit via jtag_program", |
7 | | - "result": "DIAGNOSED", |
| 7 | + "result": "MISDIAGNOSED", |
8 | 8 | "symptom": "TDO always returns 0x00000000, IDCODE reads as 0x00000000", |
9 | | - "root_cause": "CPLD version 0xFFFE — TDO path through CPLD is dead, cable cannot read back", |
10 | | - "lesson": "If IDCODE is all-zeros, check CPLD version first — it's a hardware path issue, not a software bug", |
11 | | - "tags": ["jtag", "cpld", "tdo", "idcode"], |
12 | | - "data": {"idcode_expected": "0x13631093", "idcode_actual": "0x00000000"} |
| 9 | + "root_cause": "CORRECTED: Was missing bitrev() on CFG_OUT reads, NOT dead CPLD. Fixed in FPGA-015.", |
| 10 | + "lesson": "If config reads return garbage, check bit ordering (bitrev per byte) before assuming hardware fault.", |
| 11 | + "tags": ["jtag", "cpld", "tdo", "idcode", "corrected"], |
| 12 | + "data": {"idcode_expected": "0x13631093", "idcode_actual": "0x00000000", "real_fix": "FPGA-015 bitrev()"} |
13 | 13 | }, |
14 | 14 | { |
15 | 15 | "id": "FPGA-002", |
|
63 | 63 | "id": "FPGA-006", |
64 | 64 | "date": "2026-03-14", |
65 | 65 | "category": "HARDWARE", |
66 | | - "action": "Order replacement equipment: new Platform Cable USB II + soldering kit for UART headers", |
67 | | - "result": "PENDING", |
68 | | - "symptom": "Current cable has dead CPLD, UART headers not soldered", |
69 | | - "root_cause": "Hardware limitations cannot be fixed with software", |
70 | | - "lesson": "When hardware is defective, order replacement — don't waste time on software workarounds", |
71 | | - "tags": ["ordering", "replacement", "cable", "soldering"], |
72 | | - "data": {"items": ["Platform Cable USB II (new)", "Soldering iron kit", "Pin headers"]} |
| 66 | + "action": "Order replacement equipment: soldering kit for UART headers", |
| 67 | + "result": "CANCELLED_CABLE", |
| 68 | + "symptom": "UART headers not soldered. Cable was NOT defective (bitrev bug, see FPGA-015).", |
| 69 | + "root_cause": "CORRECTED: Cable replacement unnecessary — CPLD 0xFFFE is normal for DLC10 clones. Only UART soldering kit still needed.", |
| 70 | + "lesson": "Always verify software bit-ordering before ordering replacement hardware. bitrev() was the real bug.", |
| 71 | + "tags": ["ordering", "soldering", "corrected"], |
| 72 | + "data": {"items": ["Soldering iron kit", "Pin headers"], "cancelled": ["Platform Cable USB II — cable works fine"]} |
73 | 73 | }, |
74 | 74 | { |
75 | 75 | "id": "FPGA-007", |
76 | 76 | "date": "2026-03-14", |
77 | 77 | "category": "JTAG", |
78 | | - "action": "Compare original xpc.c with refactored version — same CPLD version bug", |
79 | | - "result": "DIAGNOSED", |
| 78 | + "action": "Compare original xpc.c with refactored version — same CPLD version 0xFFFE", |
| 79 | + "result": "MISDIAGNOSED", |
80 | 80 | "symptom": "Both original and refactored jtag_program read CPLD version 0xFFFE", |
81 | | - "root_cause": "Bug is in hardware (CPLD), not in software — both code paths use identical USB control transfers", |
82 | | - "lesson": "If original and refactored code produce same bug, problem is below the software layer", |
83 | | - "tags": ["jtag", "cpld", "refactoring", "debugging"], |
84 | | - "data": {"original_cpld": "0xFFFE", "refactored_cpld": "0xFFFE"} |
| 81 | + "root_cause": "CORRECTED: 0xFFFE is NORMAL for DLC10 clones. The real bug was missing bitrev() in CFG_OUT reads (FPGA-015).", |
| 82 | + "lesson": "Same result from two codepaths can also mean the value is correct but misinterpreted. Check data format before blaming hardware.", |
| 83 | + "tags": ["jtag", "cpld", "refactoring", "debugging", "corrected"], |
| 84 | + "data": {"original_cpld": "0xFFFE", "refactored_cpld": "0xFFFE", "verdict": "0xFFFE is normal for clones"} |
85 | 85 | }, |
86 | 86 | { |
87 | 87 | "id": "FPGA-008", |
88 | 88 | "date": "2026-03-14", |
89 | 89 | "category": "HARDWARE", |
90 | 90 | "action": "Diagnose CPLD version 0xFFFE meaning", |
91 | | - "result": "DIAGNOSED", |
| 91 | + "result": "MISDIAGNOSED", |
92 | 92 | "symptom": "xpcu_read_cpld_version returns 0xFFFE instead of expected 0x0004-0x0018", |
93 | | - "root_cause": "0xFFFE means CPLD GPIF bus is stuck high (all 1s except LSB) — CPLD is not responding to version query, TDO routing through CPLD is dead", |
94 | | - "lesson": "CPLD version 0xFFFE = dead CPLD. TDI works (writing succeeds) but TDO is dead (reading fails). Don't debug software for this.", |
95 | | - "tags": ["cpld", "hardware", "diagnosis", "0xFFFE"], |
96 | | - "data": {"version_read": "0xFFFE", "expected_range": "0x0004-0x0018", "tdi_path": "WORKING", "tdo_path": "DEAD"} |
| 93 | + "root_cause": "CORRECTED: 0xFFFE is normal for DLC10 clones — clone CPLD doesn't implement version register. TDO path works perfectly. Real bug was bitrev() in CFG_OUT (FPGA-015).", |
| 94 | + "lesson": "CPLD 0xFFFE does NOT mean dead hardware on clones. Always test actual JTAG operations (IDCODE, config reads) before diagnosing hardware failure.", |
| 95 | + "tags": ["cpld", "hardware", "diagnosis", "0xFFFE", "corrected"], |
| 96 | + "data": {"version_read": "0xFFFE", "expected_range": "0x0004-0x0018", "tdi_path": "WORKING", "tdo_path": "WORKING", "verdict": "Clone CPLD, version register not implemented"} |
97 | 97 | }, |
98 | 98 | { |
99 | 99 | "id": "FPGA-009", |
|
102 | 102 | "action": "Add debug command to jtag_switcher for config read path diagnosis", |
103 | 103 | "result": "IMPLEMENTED", |
104 | 104 | "symptom": "jtag_program reads IDCODE 0x13631093 (TDO works for IR), but config register reads via CFG_IN/CFG_OUT return all zeros", |
105 | | - "root_cause": "PENDING — debug command tests: IR vs CFG IDCODE, raw TDO bytes, variable NOPs, 64-bit read offset", |
106 | | - "lesson": "CPLD 0xFFFE may be degraded but not dead — short TDO scans (IR IDCODE 32-bit) work, long scans (CFG_IN pipeline) may fail. Need differential diagnosis.", |
| 105 | + "root_cause": "RESOLVED: debug command confirmed all paths work. The missing bitrev() in CFG_OUT was the only bug (FPGA-015).", |
| 106 | + "lesson": "Debug subcommand proved invaluable — 6-step differential diagnosis isolated the real bug immediately.", |
107 | 107 | "tags": ["jtag", "debug", "config-register", "diagnosis"], |
108 | 108 | "data": {"debug_tests": ["IR_IDCODE baseline", "CFG_IDCODE trace", "STAT trace", "NOP sweep 2/4/8/16", "64-bit offset check"]} |
109 | 109 | }, |
|
193 | 193 | "mismatches": 333, |
194 | 194 | "first_mismatch_offset": "0x0", |
195 | 195 | "duration": "approx 4 minutes" |
196 | | - }, |
| 196 | + } |
| 197 | + }, |
197 | 198 | { |
198 | 199 | "id": "FPGA-015", |
199 | 200 | "date": "2026-03-15", |
|
0 commit comments