物理寄存器堆
Zircon-2024采用统一的物理寄存器堆设计。在后端流水线中,指令不存在“逻辑寄存器”的概念。当指令被发射后,会根据经过重命名的物理寄存器编号来访问物理寄存器堆。若设发射宽度为nis,则物理寄存器堆需要配备\(2 \times nis\)个读口和\(nis\)个写口。
读取物理寄存器堆
在Zircon-2024中,每条流水线都会配备自己的读口和写口,且读取物理寄存器堆的动作是写优先的,即若同一个周期有某个写口的写地址和当前读地址相同,则读取的数据为该写口的写入数据,而非寄存器堆中该读地址对应的数据。
读取分支预测信息和PC
为了节省发射队列的表项,指令的PC和分支预测信息这类长字节数据会暂存在ROB和BDB中。在读取物理寄存器堆的同时,流水线会同步使用该指令在ROB和BDB占用位置的索引,读取该指令的PC和分支预测地址。
AGU
Zircon-2024的AGU单元负责计算指令的访存地址。为了进一步缩减load-store流水线的流水级,AGU会在物理寄存器堆读出的当周期,立刻将rj读取的值与立即数相加,并继续进行后续的访存操作。这种设计使得load和其相关的其他指令的发射间隔最少仅相隔1个周期,同时也不会引入过多的时序问题。