Each row below is the answer to one symptom in the brief. The causes and fixes are deliberately kept here, after the checks, so the capstone still tests diagnosis rather than recall.
Bug | Root cause | Fix | Evidence |
|---|---|---|---|
1 Address overlap | The DMA register slot was decoded as 8 KB, so slots 0 and 1 overlap. | Decode | The overlap checker rejects the map and a clean SBR CTRL write no longer changes DMA data bit 0. |
2 Reset release order |
| Release the CPU last, after the 8 | The reset trace shows the documented order and the first fetch receives |
3 Mis-wired interrupt |
| Connect input 1 and drive a per-input connectivity test. | Forcing DMA completion sets RAW bit 1 and not bit 6. |
4 Width and addressing | The APB path supplied word addresses while the DMA decodes byte offsets; | Connect | STATUS, LEN and KEY decode at their byte offsets and unmapped accesses return the expected error. |
5 Unsynchronised crossing |
| Synchronise every INTC input in the controller clock domain. | The crossing review finds the two flops and repeated jobs no longer lose the level. |
6 Missing isolation | Only 112 of the 114 PD_SW-to-PD_AON signals were clamped; | Add clamp-to-0 cells before switch-off and assert the isolation order. | The isolation census totals 47 + 52 + 13 + 2 = 114 and RAW stays clear in SLEEP. |
7 Secure attribute | SBR control reset with | Secure software clears | The access carries the secure attribute and the first SRAM1 beat no longer returns |
8 Stream length mismatch | The SBR and DMA | Write one | SBR LEN=32 with DMA LEN=64 gives ERR and COUNT=32; SBR LEN=64 with DMA LEN=32 gives DMA DONE at 32 while SBR remains BUSY. Equal lengths complete both blocks. |
9 Contract traps | Writes while BUSY were ignored, ERR was sticky, and rewriting CTRL cleared | Wait for BUSY=0 before KEY or LEN, write STATUS=0x6 to clear both causes, and CTRL=0x3 to start with IRQ_EN. | The corrected job uses the new KEY; after the error test both causes clear and irq drops; reading CTRL confirms IRQ_EN remains set after start. |
10 Gated-clock hang | The DMA clock stopped while the bridge had no timeout, so PREADY never arrived. | Complete the access with a 256-cycle bridge watchdog and return SLVERR. | The liveness test terminates with SLVERR instead of hanging until reset. |
Finding | Evidence before closure |
|---|---|
Same-bank performance trap | The Stage 1 worked checks compare separate banks at 361.4 MB/s per direction with a shared single-port bank at 180.7 MB/s per direction. Record the placement and both rates; the functional result alone cannot close a throughput claim. |
Open SBR attribute control in v1 | The Stage 3 and final worked checks reproduce a non-secure register write that clears NS and reaches SRAM1. The final check then models a secure-write guard and proves the access is refused. Keep the weakness open until the guard or a secure-only slot is implemented and independently verified. |
The symptom is recorded separately from the diagnosis, so a future regression can prove the observation still reproduces.
The fix names a signal, register, cycle count or checker; vague words such as 'handle it' are not closure evidence.
The final manifest keeps the known non-secure SBR access to SRAM1 as an explicit open item for NanoSoC v1 rather than silently calling it fixed.
Because the learning objective is to observe, hypothesise and prove a boundary failure. Showing the root cause first turns the capstone into a lookup exercise and weakens the evidence habit the signoff work requires.