# dual-issue-cpu **Repository Path**: wolver/dual-issue-cpu ## Basic Information - **Project Name**: dual-issue-cpu - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 1 - **Created**: 2026-11-08 - **Last Updated**: 2026-11-08 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 双发射 RISC CPU / Dual-Issue RISC CPU > 五级流水顺序双发射 RISC 微架构,SystemVerilog RTL + Verilator C++ testbench。 ## 🎯 这是什么 一款用于教学与微架构研究的顺序双发射 RISC 处理器。 - 五级流水:IF / ID / EX / MEM / WB - 发射宽度:2(slot0 + slot1 对称) - 指令集:11 条极简 RISC(ALU / LW / SW / BEQ / HALT / NOP / LI) - 支持:Load 前递(mem-to-ex)、NOP、BHT+BTB 分支预测、regfile write-through - 统计:C++ testbench 侧全量计数,RTL 只暴露 `obs_*` 观察口 ## 🛠 有什么用 - 📊 **量化双发射收益**:8 组测试程序对比单发 / 双发 IPC,加速比 1.00×–1.44× - 🔍 **冒险分类统计**:`block_raw` / `block_slot1` / `load_use` / `branch_flush` 分开计数,定位瓶颈 - 🧪 **对照实验平台**:每项改进(对称双发、前递、预测、write-through)可独立启用 - 📐 **可解释的 RTL**:模块职责单一,适合阅读、修改、二次扩展 ## 📁 目录结构 ``` dual-issue-cpu/ ├── CMakeLists.txt ├── rtl/ │ ├── cpu_pkg.sv # 类型包 + 辅助函数 │ ├── alu.sv # 算术逻辑单元 │ ├── regfile.sv # 4 读 2 写 + write-through │ ├── branch_predictor.sv # BHT + BTB │ ├── hazard_unit.sv # 双发判据 + 冒险检测 │ ├── forwarding_unit.sv # 四路源操作数选择 │ └── core.sv # 顶层(流水寄存器 + 控制) └── sim/ └── sim_main.cpp # C++ testbench + 统计报告 ``` ## ⚙️ 依赖 | 工具 | 版本 | |---|---| | Verilator | ≥ 5.035(原理图需 ≥ 5.046) | | CMake | ≥ 3.20 | | C++ 编译器 | 支持 C++17 | | Ninja(可选) | 任意 | ## 🚀 构建与运行 ```bash mkdir -p build && cd build cmake -GNinja .. ninja ./sim ``` 或一键: ```bash ninja run ``` ## 📊 预期输出(节选) ``` P1 Fully-Independent ALU (9 instructions incl. HALT) ---------------------------------------------------------------- Cycles 13 9 IPC 0.692 1.000 Dual-issue attempts 0 4 Dual-issue success rate : 100.0% Speedup (dual / single, IPC): 1.444x ``` ## 🧪 测试程序集 | 程序 | 目的 | 关键覆盖点 | |---|---|---| | P1 | 全独立 ALU | 双发上限 | | P2 | 纯依赖链 | RAW 阻塞 | | P3 | 混合依赖 | 部分双发 | | P4 | Load-use | 访存依赖 | | P5 | 分支跳转 | 分支冲刷 | | P6 | NOP 填充 | NOP 双发 | | P7 | Load 前递 | mem-to-ex | | P8 | BHT 循环 | 动态预测 | ## 📈 关键实验结果 | 程序 | IPC single | IPC dual | 加速比 | |---|---|---|---| | P1 | 0.692 | 1.000 | 1.444× | | P2 | 0.692 | 0.692 | 1.000× | | P3 | 0.692 | 0.900 | 1.300× | | P4 | 0.636 | 0.875 | 1.375× | | P5 | 0.500 | 0.600 | 1.200× | | P6 | 0.636 | 0.875 | 1.375× | | P7 | 0.667 | 0.889 | 1.333× | | P8 | 0.655 | 0.792 | 1.208× | ## 🧩 设计要点 - **对称双发**:slot1 支持 ALU / LW / SW / NOP,不再是 ALU-only - **Load 前递**:EX/MEM 阶段组合读 dmem,消除跨周期 load-use 停顿 - **BHT + BTB**:256 项 2-bit counter + 256 项目标缓存,EX 更新、IF 查询 - **write-through**:同周期写后读立即可见,解决 ID-WB 同周期的 RAW - **统计口径**:`attempts − dual_cycles` = 分支投机失败成本 ## 📚 文档 完整设计报告(中文)包含 7 轮迭代、11 张图表、性能分析: → `docs/design-report.md`(或直接查阅 PR / 提交历史) ## 📄 License MIT