学习目标

  • 理解寄存器重命名
  • 消除假相关
  • 提升并行度

16.1 思考:假相关的代价

add x1, x2, x3
sub x4, x1, x5
add x1, x6, x7  # WAW:必须等第一条完成
mul x8, x1, x9  # WAR:必须等第二条完成

问题:能否让它们并行执行?

16.2 寄存器重命名

逻辑寄存器 x1 → 物理寄存器 p10
逻辑寄存器 x1 → 物理寄存器 p11 (重命名)
reg [5:0] map_table [31:0];  // 逻辑 → 物理映射
reg [31:0] phy_regs [63:0];  // 物理寄存器堆
reg free_list [63:0];        // 空闲物理寄存器

16.3 重命名逻辑

// 分配新物理寄存器
wire [5:0] new_phy = find_free();
map_table[rd] <= new_phy;
free_list[new_phy] <= 1'b0;

思考:如何回收物理寄存器?

下一步

第 17 章:性能优化实战

更新时间: