xiangshan-bug-analysis · git:20260728.30913b6 · 2026-07-28 · sha256 47ec8eadb45a9636
xiangshan-bug-analysis git:20260728.30913b6A
Immutable. This exact content is served forever at /api/v1/blob/47ec8eadb45a9636.
--- name: xiangshan-bug-analysis description: Analyze XiangShan bug waveforms from FST/VCD/FSDB, logs, disassembly, and source. Use when root-causing frontend, backend, Load/Store, cache, MSHR, redirect/kill/replay, branch prediction, wrong-path, RVV, CSR, exception, interrupt, PMP/PMA, MMU, or page-table bugs. --- # 香山 Bug 分析 ## 适用场景 - 用户给出复现程序、反汇编、仿真日志、FST/VCD/FSDB 和 XiangShan 源码。 - 目标是定位 bug 根因,而不是生成新场景或重新跑仿真。 - 默认重点是前端、后端、访存、Cache、MMU、CSR 和异常路径。 - 需要精确 waveform 查询时,配合 `analyze-xiangshan-wavekit` 技能使用。 ## 工作流 1. 先归一化目标:PC、指令、寄存器、副作用、异常预期。 2. 再找波形锚点:先用日志/反汇编/commit 找到目标 PC,再沿流水线往前追。 3. 逐级看边界:每个 `valid/ready` 都要确认 `fire = valid && ready`。 4. 继续带着身份走:rename 后用 `robIdx`、`lqIdx`、`sqIdx`、物理寄存器继续追。 5. 分域追因果:前端预测/redirect、后端执行/提交、访存/cache/MSHR、MMU/PMP/PMA。 6. 最后回到架构态:commit、difftest、CSR、trap、异常目标、寄存器写回。 ## 证据规则 - 只写波形和源码共同证明的结论。 - 每个非显然判断都要有源码位置和波形周期。 - 只在波形证明时谈 redirect、kill、replay、wrong-path 或侧信道。 - 不要把 bubble 当根因;只有它解释功能现象时才记录。 ## 分域重点 ### 前端 - 关注 `FTQ -> BPU -> ICache/IFU -> ITLB -> IBuffer -> Decode`。 - 常看 `backendIPF/backendIAF/backendIGPF`、`satpFlush`、`flushPipe`、`miss`、`pf`、`af`、`gpf`。 - 重点问题:canonical address、错误路径取指、ITLB miss/PTW、redirect 后恢复、投机取指污染。 - 参考:`references/frontend-itlb.md` ### 后端 - 关注 `Decode -> Rename -> Dispatch -> ROB -> Issue -> Execute -> Writeback -> Commit`。 - 常看 `robIdx`、`ftqIdx`、`redirect`、`flushAfter`、`needFlush`、`exceptionVec`、`difftest_commit_*`。 - 重点问题:分支误判、执行单元异常、CSR/trap redirect、年轻指令清空、commit 不一致。 - 参考:`references/backend-redirect-csr.md` ### 访存 / Cache - 关注 `LSQ / LoadUnit / StoreUnit / DTLB / PTW / DCache / MSHR / StoreBuffer`。 - 常看 `miss`、`hit`、`replay`、`nack`、`forward`、`pmp`、`pma`、`pte`、`queue full/empty`。 - 重点问题:地址翻译、权限、cache miss、MSHR 冲突、store-to-load forward、replay 风暴。 - 参考:`references/memory-cache-lsq.md` ### ISA / CSR / MMU - RV64/RVV 要核对指令语义、宽度、符号扩展、mask/tail、`vtype/vl/vstart/vxsat/vxrm`。 - CSR / 异常 / 中断要核对 `mcause/mepc/mtval`、`scause/sepc/stval`、`mstatus/sstatus`、`satp/vsatp/hgatp`。 - MMU / PMP / PMA 要区分页表 walk、canonical 地址、权限检查、访问属性和访问异常。 - 参考:`references/isa-mmu-exception.md` ## 源码阅读顺序 - 先看 bundle / IO 定义。 - 再看赋值、gating 和握手条件。 - 然后看 state / FSM / replay / flush 逻辑。 - 最后回到波形验证语义是否一致。 ## 输出要求 - 说明用的波形格式、采样边沿和 clock。 - 给出绝对 cycle 和 time。 - 给出对应源码文件和行号链接。 - 给出分阶段时间线、redirect 路径、commit/difftest 状态和根因结论。 ## 参考文档 - `references/workflow.md` - `references/source-map.md` - `references/frontend-itlb.md` - `references/backend-redirect-csr.md` - `references/memory-cache-lsq.md` - `references/isa-mmu-exception.md`