跳转至

处理器简介

结构框图

昆明湖 V2R2 的结构框图如 此图 所示。

昆明湖 V2R2 微架构框图

核内子系统

昆明湖 V2R2 的核内子系统主要包括:取指令单元(IFU)、指令译码单元(IDU)、重命名单元(Rename)、 乱序调度单元(Dispatch and Issue)、整数运算单元(IntExu)、浮点运算单元(FPExu)、向量运算单元(VecExu)、 存储单元(LSU)、重排序缓存(ROB)、内存管理单元(MMU)、物理内存保护单元(PMP/PMA)和二级高速缓存(L2 Cache)。

取指令单元

取指令单元负责从存储中提取指令并对指令进行初步处理,每周期最多可处理 32 字节的指令。为了提高取指令的效率, 昆明湖 V2R2 实现了诸如 ICache、FDIP、BPU 等多种结构,具有低功耗、 高分支预测准确率和高指令预取准确率的特点。

指令译码单元

指令译码单元接收来自取指令单元的指令并进行译码。指令译码单元每周期最多可以处理六条简单指令,并支持指令融合技术。 对于诸如多数向量运算指令这样的复杂指令,指令译码单元会将其拆分为数条微指令以供后续单元执行处理。

重命名单元

重命名单元将经过译码的指令中的逻辑寄存器重命名为物理寄存器。为了进一步扩宽乱序调度窗口,重命名单元还实现了 ROB 压缩功能。此外,重命名单元也实现了 move 指令消除的功能,通过旁路操作数的方式消除了 move 指令的执行时间。

乱序调度单元

乱序调度单元分为分派(Dispatch)单元和发射(Issue)单元两部分。分派单元根据指令的类型, 将指令分派到不同的运算发射队列中。发射单元则负责根据指令的就绪情况,将指令发射到执行单元中, 并在发射后读取寄存器堆的值。

运算单元

运算单元包括整数运算单元、浮点运算单元和向量运算单元。

整数运算单元包括算术逻辑单元(ALU)、乘法单元(MUL)、除法单元(DIV)、分支跳转单元(BJU)和控制状态单元(CSR)等。 ALU 执行 64 位整数操作。MUL 执行整数乘法运算。DIV 的设计采用了基 16 的 SRT 算法,执行周期数根据操作数的不同而变化。 BJU 可以在一个周期内计算出跳转地址,并判断分支预测是否正确。CSR 可以处理控制状态寄存器读写指令,并针对部分读 CSR 指令进行了可流水优化。

浮点运算单元包括浮点算术逻辑单元(FALU)、浮点融合乘加单元(FMA)、浮点除法单元(FDIV)和浮点转换单元(FCVT)。 FALU 负责加减、比较、符号注入、分类等操作。FMA 负责普通乘法、融合乘加等操作。FDIV 负责浮点除法等操作。 FCVT 负责浮点转换等操作。

向量运算单元总体可分为向量整数运算单元和向量浮点运算单元,其中的整数和浮点单元又被进一步细分为算术逻辑单元、 融合乘加单元、浮点运算单元和浮点转换单元等。

存储单元

存储单元每周期支持最多三条整数 Load 指令的发射执行、两条整数 Store 指令的发射执行和两条向量访存微指令的发射执行, 并支持 DCache 的非阻塞式访问。支持字节、半字、字、双字和四字的存储/载入指令,并支持字节和半字的载入指令的符号位和零扩展。 访存指令可以流水执行,使得单条访存流水线中的数据吞吐量可以达到一个周期存取一个数据。支持多种预取技术,可以减少访存时的 DCache 缺失率,提高访存效率。当 DCache 缺失后,支持总线的并行访问。

重排序缓存

重排序缓存负责指令的乱序写回和顺序退休。通过支持指令的并行写回与快速退休,提高了指令的退休效率。通过重命名缓存(RAB), 实现了指令提交和寄存器提交的解耦,在进一步提高指令退休效率的同时降低了重排序缓存的开销。重排序缓存每周期最多可退休八条指令, 支持精确异常。

内存管理单元

内存管理单元(MMU)支持 Sv39 和 Sv48,可以将 39 位 或 48 位虚拟地址转换为 48 位物理地址。 支持 H 拓展及两阶段地址翻译,支持 Sv39x4 和 Sv48x4。也支持 PBMT 扩展。

具体内容详见 内存模型

物理内存保护单元

物理内存保护单元包括物理内存保护(PMP)和物理内存属性(PMA)。其中,PMP 的实现遵循 RISC-V 手册规定, 默认支持 16 项。

PMA 的实现采用了类 PMP 的方式,利用了 PMP Configure 寄存器的两个保留位,设为 atomic 和 cachable, 分别为是否支持原子操作和是否可缓存。默认支持 16 项。

PMP 和 PMA 的最小粒度为 4KB,因此不支持 NA4 模式。

具体内容详见 内存模型

二级高速缓存

二级高速缓存采用分 bank 的流水线架构,每个周期可并行处理 64 个可高速缓存地址空间的访存请求(包括 DCache、ICache、PTW 发送的请求,预取请求,snoop 请求等)。 默认配置下,L2 Cache 大小为 1MB 分为 4 个 bank,采用 8 路组相联的组织方式,并采用了 inclusive 的包含策略。

二级高速缓存对外接口可选 CHI Issue B 和 CHI Issue E.b,并进行了跨时钟域和电压域处理。

接口信息详见 总线接口

多核子系统

昆明湖 V2R2 的多核子系统包括中断控制器、计时器和调试系统。

中断控制器

中断控制器分为传入消息信号中断控制器(IMSIC)和处理器核局部中断控制器(CLINT)。IMSIC 默认支持 7 个 interrupt file(M + S + 5 VS),并默认支持 254 个有效中断号。CLINT 用于处理软件中断和计时器中断。

具体内容详见 中断控制器

计时器

计时器复用了 CLINT 中的 mtime 寄存器,计时器将计时器的值广播到各个核内子系统,以支持核内子系统读取 time 寄存器和 Sstc 扩展等功能。

具体内容详见 中断控制器

调试系统

昆明湖调试系统兼容 RISC-V Debug V0.13 手册标准,对外调试接口支持 JTAG。通过一个共享的 JTAG 接口对不同的核内子系统进行调试。

具体内容详见 调试