项目目标

设计一个双发射超标量 RISC-V 处理器!

项目要求

必选特性

  1. 双发射
    • 每周期取 2 条指令
    • 每周期最多发射 2 条指令
    • 处理结构冒险
  2. 分支预测
    • GShare 预测器
    • BTB(256 项)
    • 准确率 > 85%
  3. Cache
    • I-Cache:16KB,2 路
    • D-Cache:16KB,2 路
    • 命中率 > 90%
  4. 性能目标
    • IPC > 1.4
    • CoreMark > 3.0/MHz

可选特性

  • 乱序执行(Tomasulo)
  • 寄存器重命名
  • 三发射

设计要点

1. 双发射逻辑

// 同时取 2 条指令
wire [31:0] inst0 = icache_data[63:32];
wire [31:0] inst1 = icache_data[31:0];

// 检查依赖
wire dep = (inst1_rs1 == inst0_rd) || 
           (inst1_rs2 == inst0_rd);

// 发射决策
wire issue_both = !dep && !struct_hazard;

思考:什么情况下不能双发射?

2. 结构冒险处理

// 寄存器堆:4 读 2 写
reg [31:0] regs [31:0];
wire [31:0] rs1_data0, rs2_data0;
wire [31:0] rs1_data1, rs2_data1;

3. 性能监控

reg [31:0] dual_issue_count;
reg [31:0] single_issue_count;

always @(posedge clk) begin
    if (issue_both) dual_issue_count <= dual_issue_count + 1;
    else single_issue_count <= single_issue_count + 1;
end

测试基准

CoreMark

make coremark
./coremark.elf

Dhrystone

make dhrystone
./dhrystone.elf

评分标准

  • IPC > 1.4:及格
  • IPC > 1.6:良好
  • IPC > 1.8:优秀

恭喜你完成 B 级课程!

下一步

继续挑战 A 级课程,探索多核和 SoC 设计!

更新时间: