RIDECORE学习记录之一

一、背景

RIDECORE(RIsc-v Dynamic Execution CORE)是由东京工业大学 Arch Lab 开发的一款 2 路超标量乱序执行(Out-of-Order)RISC-V 处理器,使用 Verilog HDL 编写,支持 RV32IM 指令集。其微架构参考了《Modern Processor Design: Fundamentals of Superscalar Processors》一书,并在 Xilinx VC707 开发板上实现了 50MHz 的 FPGA 原型。

二、项目文件结构介绍

0.项目根目录

文件/目录 说明
README.md 项目说明文档,包含工具链安装、使用方法等
LICENSE 开源许可证
.gitignore Git 忽略规则
doc/ 项目文档目录
src/ 源代码目录(FPGA 设计与测试)
toolchain/ 辅助工具链目录
  1. doc/ --- 文档目录
文件 说明
ridecore_document.pdf 英文版详细设计文档(建议优先阅读)
ridecore_document_jp.pdf 日文版设计文档
RISC-V-subset.pdf 所支持的 RISC-V 指令子集说明
struct_repository.pdf 仓库文件结构说明文档
  1. src/fpga/ --- 核心 RTL 源代码
    该目录包含约 50 个 Verilog 文件,实现了完整的乱序超标量处理器。按功能模块划分如下:

顶层与系统

top.v --- FPGA 顶层模块

topsim.v --- 仿真顶层模块

system.v --- 系统级封装

main.xdc --- Vivado 约束文件(针对 VC707)

流水线与取指

pipeline.v --- 核心流水线顶层

pipeline_if.v --- 取指阶段(IF)流水线

imem.v --- 指令存储器接口

imem_outa.v --- 指令存储器输出地址处理

译码与发射

decoder.v --- 指令译码器

imm_gen.v --- 立即数生成

brimm_gen.v --- 分支立即数生成

alloc_issue_ino.v --- 指令分配与发射(in-order 部分)

寄存器文件与重命名

arf.v --- 架构寄存器文件(Architectural Register File)

rrf.v --- 物理寄存器文件(Reorder Buffer / Register File)

rrf_freelistmanager.v --- 空闲物理寄存器管理

保留站(Reservation Stations)

rs_alu.v --- ALU 运算保留站

rs_branch.v --- 分支指令保留站

rs_ldst.v --- 访存指令保留站

rs_mul.v --- 乘法指令保留站

rs_reqgen.v --- 保留站请求生成

执行单元

exunit_alu.v --- ALU 执行单元

exunit_branch.v --- 分支执行单元

exunit_ldst.v --- 访存执行单元

exunit_mul.v --- 乘法执行单元

alu.v --- ALU 核心

multiplier.v --- 乘法器

访存与存储缓冲

dmem.v --- 数据存储器接口

storebuf.v --- Store Buffer(解决非阻塞缓存/顺序提交问题)

dualport_ram.v --- 双端口 RAM

ram_sync.v / ram_sync_nolatch.v --- 同步 RAM 实现(带/不带锁存器)

重排序与提交

reorderbuf.v --- 重排序缓冲(ROB),支持按序提交

分支预测

gshare.v --- Gshare 分支预测器

btb.v --- 分支目标缓冲(Branch Target Buffer)

mpft.v --- 分支预测相关辅助模块

辅助模块

oldest_finder.v --- 最旧指令查找(用于 ROB/提交)

tag_generator.v --- 标签生成器

src_manager.v / srcopr_manager.v / srcsel.v --- 源操作数管理/选择

search_be.v --- 字节使能搜索

prioenc.v --- 优先级编码器

uart.v --- UART 串口模块(用于 FPGA 输出)

头文件与常量

constants.vh / define.v --- 全局常量与宏定义

alu_ops.vh --- ALU 操作码定义

rv32_opcodes.vh --- RISC-V RV32 操作码定义

  1. src/test/ --- 测试与验证
    src/test/ridecore/ --- RIDECORE 处理器测试
子目录 说明
app/ 示例 C/汇编测试程序(如 fib, matmul, hanoi, sort_3, stencil, tarai 等 15+ 个 benchmark)
bin/ 编译后的二进制文件(init.bin
sim/ Verilog 仿真测试平台

src/test/ridecore/sim/ 关键文件:

Makefile --- 编译仿真工程

testbench.v --- 调试模式 testbench(每周期报告处理器状态)

testbench_last.v --- 静默模式 testbench(仅输出最终结果)

testbench_pred.v --- 分支预测信息报告 testbench

alu_ops.vh, constants.vh, rv32_opcodes.vh --- 仿真用头文件

src/test/singlecyc/ --- 单周期参考模型

sim/ --- 单周期模型仿真环境

verilog/ --- 单周期参考模型 Verilog 代码

  1. toolchain/ --- 软件工具链
目录 说明
memgen-v0.9/ 将 RISC-V ELF 文件转换为 Verilog 仿真可用的二进制初始化文件(init.bin)的工具