后端流水线结构
后端各项指标简述
本后端使用 Chisel 语言实现,支持 RISC-V RV64IMAC 指令集和 Zicsr、Zifen- cei、RVP 指令集扩展,支持 M、S、U 特权级以及虚实地址转换(使用 Sv39 分 页方案)。在存储方面,本后端复用 NutShell 的数据缓存,使用 AXI 总线与外界相连,支持串口输入输出、外部中断。
本后端可以与 NutShell 单发射前端协同工作,也可以与所属项目内其他开发者开发的双发射前端协同工作。当前处理器的代号为“北极星”(Polaris), 本文档仅涉及处理器后端设计部分的介绍。
微结构简介
本后端的设计目标为产出一款高能效比高并行度的小核处理器后端。其基本结构如下:
本后端包含 ISU、EXU、WBU 三级流水结构,其中 EXU 内包含多个不等长流水级的运算器。通过 Instr-Uint Matcher 和 Uint-Commit Matcher 两部分逻辑来实现顺序双发射超标量的指令流结构。
Polaris 后端包含三个部件: 指令发射部件 ISU、执行部件 EXU 和写回部件 WBU。ISU 级从前端获取指令和译码信息后,为指令准备好数据并发射到 EXU 级 对应的运算器内,EXU 级运算器在完成运算后将指令通过提交端口发送至 WBU 级完成指令提交和对寄存器的数据更新。各单元设计概要如下:
- ISU 设计为双发射结构,其与前后端之间的指令缓冲队列相连,可以单拍从中取得两条指令,在理想情况下(无数据冲突导致的阻塞且 EXU 级运算器资源充足)可以单拍发射出两条指令,并记录下该指令的编号和寄存器使用情况。
- EXU 级内包含了各流水级长度不一的运算器:ALU、BRU(可选)、CSRU、MDU、LSU、PEXTU(可选),并为每个运算器配置了前递数据和指令提交的端口。
- WBU 级设置了宽度可自定义的指令提交槽,并将物理寄存器设置在该级,负责指令的提交及对通用寄存器的数据写回。
注意:ISU、EXU、WBU 并非直接使用 Valid-Ready 的握手信号相连。事实上,ISU 只负责将指令所需的数据源准备好并输送到发射端口上,后端母模块则根据 ISU 发出的指令发射请求监测 EXU 级对应模块的资源占用情况,若下一拍对应运算器可以接收一条新指令,则将 ISU 发射端口的指令送入 EXU 级对应的运算器内。与此类似,EXU 级只需将执行完毕的指令置于发送端口上,后端将根据 EXU 提供的指令编号将指令发送入 WBU 级对应位置的指令提交槽内,并将运算完成的数据发送至 ISU 级的前递端口上。