跳转至

Zircon-Core 2024

Zircon 2024是Zircon系列第二代作品,面向基于RISC-V的科学计算应用开发。该处理器专注于用尽可能精简的资源支持非特权指令的高效执行,因此在一代作品的基础上,引进了更为激进的乱序执行策略、更强大的缓存系统和更高效的分支预测策略。同时,通过对一代作品的经验总结,作者在对整体处理器架构进行了一次彻底革新,通过更加“Chisel友好”的构建,进一步提升了开发效率,并获得了相较于一代20%的性能提升。

处理器架构

Zircon-2024是用Chisel硬件描述语言开发的可参数化RISC-V内核,创建于中国科学院大学。受到BOOM处理器 和《超标量处理器设计》(姚永斌 著)的启发,Zircon使用带旁路的Tomasulo算法,采用多发射、乱序执行、顺序提交的方式进行构建,其中取指、译码、执行宽度都可以通过参数配置。

Pipeline

从功能角度来看,Zircon-2024分为四个板块:前端(Frontend)分派(Dispatch)后端(Backend)提交(Commit)

在一条指令的生命周期中,指令会从前端经历取指操作进入流水线,离开前端后经由分派模块,按照其功能分配入后端不同的流水线中。后端流水线在执行完毕后,将结果写入重排序缓存,按顺序提交,从而离开流水线。

流水线阶段功能概要

Zircon2024

从功能来看,Zircon-2024的流水线可以按照如下划分:

  • 前端:取指(IF)、预译码(PD)、译码(DCD)、重命名(RNM);
  • 分派:分派(DSP);
  • 后端:发射(IS)、读寄存器(RF)、执行(EX)、写回(WB)

(提交与其余步骤不同步,故不在此列出)

但若从具体设计角度审视,有些流水级可以重叠并行,而有些流水级需要多级流水:

  • 前端的译码(DCD)与重命名(RNM)可以合并为单个流水级(DCD/RNM)
  • 访存流水线后端中,执行(EX)需要三个流水级,但其中第一个流水级可以与读寄存器(RF)合并(EX/RF)
  • 乘除法流水线需要三个执行级(EX1、EX2、EX3)

取指(IF)

取指阶段是指从生成新的PC到指令从内存获取到指令的整个过程。由于ICache是三周期流水化访问的,因此该阶段横跨了三个时钟周期,但最后一个时钟周期可以看做与预译码(PD)重叠。分支预测也发生在此阶段,这个阶段发生的预测不会引入任何气泡。

预译码(PD)

预译码会在指令从ICache送出后、写入取指队列(FQ)前组合地执行。在分支预测器做出了无效预测,或预测显然错误时,预译码器会及时冲刷流水线,降低分支预测失败的损耗。

译码(DCD)

译码器从取指队列中获取指令,并生成操作码以组装向后流动的前端指令包。

重命名(RNM)

重命名器将指令里所有逻辑寄存器动态映射为物理寄存器,并记录映射关系。

分派(DSP)

分派器将前端指令包分派到能够处理该指令的后端发射队列中。

发射(IS)

发射仲裁器从发射队列中选取准备好的且最适合的指令,发射到后端流水线中。

读寄存器(RF)

后端指令包从物理寄存器堆中读取操作数。

执行(EX)

执行单元根据指令类型执行指令。对于Load/Store指令,这个阶段会访问DCache,读取/写入内存数据。

写回(WB)

写回单元将执行结果写入物理寄存器堆。

重排序缓存(ROB)

重排序缓存处理器提交提交模块,负责缓存执行完毕的指令,并按顺序提交。

评论