第 16 章:寄存器重命名
学习目标
- 理解寄存器重命名
- 消除假相关
- 提升并行度
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;
思考:如何回收物理寄存器?