Skip to content

后端流水线

整体设计

处理器的流水线后端负责指令的重命名与乱序执行。如下图所示,香山处理器后端可以分为 CtrlBlock、IntBlock、FloatBlock、Memblock 4 个部分, CtrlBlock 负责指令的译码、重命名和分派, IntBlock、FloatBlock、MemBlock 分别负责整数、浮点、访存指令的乱序执行。

bpu

Backend 结构示意图

在这些模块中,有很多可以配置的参数。在目前的代码中,上述 4 个 Block 分别默认采用如下配置:

  • CtrlBlock

    • 译码 / 重命名 / 分派宽度 = 6

    • 发射前读寄存器堆

  • IntBlock

    • 192 项物理寄存器

    • 4 * ALU + 2 * MUL/DIV + 1 * CSR/JMP

  • FloatBlock

    • 192 项物理寄存器

    • 4 * FMAC + 2 * FMISC

  • MemBlock

    • 2 * LOAD + 2 * STORE (其中 STORE 分为 data 和 address 独立进行运算)

代码实现

目前,香山后端代码写得较为粗放,通过人工的参数化传递实现设计的可配置。未来,我们计划使用 Diplomacy 重写代码,实现更为清晰的参数化设计。

在香山南湖的代码版本中,保留站与功能单元、寄存器堆被包裹成 ExuBlock,其中包含 Scheduler 和 FUBlock 两部分,前者又再次包含了保留站和寄存器堆、BusyTable,后者则包含了对应的功能单元。这些层次的包裹仅仅为参数传递与连线作用,其中的有效逻辑代码非常少。

在定点 ExuBlock 中,包含了 (1) ALU、MUL/DIV、MISC 的保留站;(2) LOAD、STORE DATA、STORE ADDR 的保留站;(3) ALU、MUL/DIV、MISC 功能单元。

在浮点 ExuBlock 中,包含了 (1) FMA、FMISC 的保留站;(2) FMA、FMISC 功能单元。

在访存 MemBlock 中,包含了访存子系统的设计。