学习目标

  • 实现性能计数器
  • 通过 CSR 读取统计
  • 分析性能数据

3.1 思考:如何监控性能?

需要实时监控处理器运行状态。

解决方案:性能计数器 CSR!

3.2 设计性能计数器

// 性能计数器 CSR
reg [63:0] mcycle;      // 周期计数
reg [63:0] minstret;    // 指令计数
reg [31:0] mbranch;     // 分支数
reg [31:0] mbranch_miss; // 分支预测失败

3.3 CSR 地址映射

0xB00: mcycle[31:0]
0xB80: mcycle[63:32]
0xB02: minstret[31:0]
0xB82: minstret[63:32]
0xBC0: mbranch
0xBC1: mbranch_miss

3.4 软件读取

uint64_t read_cycle() {
    uint32_t lo, hi;
    asm volatile("csrr %0, mcycle" : "=r"(lo));
    asm volatile("csrr %0, mcycleh" : "=r"(hi));
    return ((uint64_t)hi << 32) | lo;
}

思考:如何计算分支预测准确率?

下一步

第 4 章:分支预测基础

更新时间: