Skip to content

zsc/kimi_godson

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

9 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Godson-2 风格 4 发射乱序核(可测实现)

本仓库目标:把 AGENTS.md 里的 Godson-2 风格 OoO 规范落成一套“能跑、能测、能逐步扩展”的 RTL + testbench。优先级是 可实现 + 可验证,复杂子系统(如 ICache/DTLB/CP0/TLB)允许先用 stub 简化,以便先把乱序机制跑通。

快速开始

依赖

  • verilator(推荐 5.x)+ C++ 编译器(macOS 上通常是 clang++
  • make
  • 可选:gtkwave(看波形)
  • 可选:iverilog(目前对 SystemVerilog 支持有限,可能编不过)

构建与运行

make clean
make sim           # 默认:Verilator

看波形

make wave

生成的波形文件默认是 godson2_tb.vcd

核心特性(现状)

  • 4-wide 前端:每拍最多 4 条取指/译码/重命名/派发(受队列 backpressure 影响会停顿)。
  • CAM 重命名表 + 128 物理寄存器:消除 WAR/WAW,建立 RAW。
  • 分组保留站 / 发射队列:整数 IQ +(接口预留的)浮点 IQ。
  • ROQ(Reorder Queue):乱序执行、有序提交(每拍最多提交 4 条)。
  • BRQ(Branch Queue):跟踪分支并在猜错时触发 flush/redirect 骨架。
  • 旁路/Forwarding:写回总线被 IQ snoop,用于更新源操作数就绪位。

说明:当前实现聚焦机制骨架;部分“规范级”功能仍在逐步补齐(见“已知限制”)。

流水线(高层)

  1. Fetch:取指(stub 的 imem 接口)
  2. Pre-decode:分支识别与预测(简化)
  3. Decode:译码为内部 uop
  4. Rename:CAM 重命名 + freelist 分配物理寄存器
  5. Dispatch:入 IQ + 入 ROQ(全组 dispatch_fire 握手)
  6. Issue:每个 FU oldest-first 选择 ready 指令
  7. RegRead:从物理寄存器堆读操作数(含 bypass)
  8. Execute:ALU 单周期;AGU 简化为带流水的访存单元
  9. Writeback:写回 PRF + 广播
  10. Commit:按 ROQ 顺序提交

目录结构

├── include/
│   └── godson2_defines.sv    - 公共定义与参数
├── rtl/
│   ├── cam_map_table.sv      - CAM 重命名表 + freelist
│   ├── roq.sv                - ROQ(提交/异常/分支 brbus)
│   ├── brq.sv                - BRQ(分支跟踪/flush 掩码)
│   ├── issue_queue.sv        - IQ(分组保留站,age=oldest-first)
│   ├── physical_regfile.sv   - 物理寄存器堆(多读多写 + bypass)
│   ├── alu.sv                - ALU(ADD/SUB/AND/OR/XOR/ADDI 等)
│   ├── agu.sv                - AGU(load/store 地址与访存)
│   ├── fetch_decode.sv       - 取指 + 译码
│   └── godson2_core.sv       - 顶层 core
├── tb/
│   └── godson2_tb.sv         - 简单 testbench
├── Makefile
└── README.md

关键参数(默认值)

参数 默认值 说明
XLEN 64 数据位宽
FETCH_W 4 前端宽度
COMMIT_W 4 提交宽度
INT_PRF_SIZE 128 整数物理寄存器数量
ROQ_SIZE 64 ROQ 深度
BRQ_SIZE 16 BRQ 深度
IQ_INT_SIZE 32 整数 IQ 深度
IQ_FP_SIZE 32 浮点 IQ 深度(目前未接入完整 FPU)

指令支持(最小可测子集)

本工程不以完整 ISA 为目标。当前 rtl/fetch_decode.sv 实际能译码的最小集合是:

  • 算术/逻辑:ADD, SUB, AND, OR, XOR, ADDI
  • 访存:LW, LD, SW, SD
  • 分支:BEQ, BNE, JAL
  • 其它:未识别的编码会变成 ILLEGAL(触发异常路径骨架)

译码编码当前参考 RISC-V 风格(32-bit 指令),用于方便写 testbench;“Godson-2 风格”指的是微结构与乱序机制,而不是要求 MIPS/Loongson 指令集完整实现。

验证与可测性

  • tb/godson2_tb.sv 目前是 烟雾测试:指令存储器默认返回 0x00000013(常见的 NOP 编码),跑若干拍并打印提交现象,生成 godson2_tb.vcd
  • 提交 trace 接口已在顶层暴露(trace_valid/trace_op/...),便于后续接入更严谨的参考模型对拍。

已知限制(待完善)

  1. 程序加载/测试覆盖不足:目前 testbench 只返回固定指令流,尚未提供可配置的程序 ROM/汇编测试。
  2. 访存与 store-commit 语义:尚未实现完整的 MemQ/LSQ;store “commit 后写内存”的语义需要后续补齐。
  3. trace 信息不完整trace_pc/trace_ldest 等字段尚未从 ROQ/commit 路径完整贯通。
  4. 浮点执行单元:FPU 仍为 stub。
  5. 分支预测:为简化可测,目前预测逻辑非常保守/简化。

参考

  • AGENTS.md:工程级 SPEC(实现与验证的主依据)

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors