蜂鸟E203 - 可扩展协处理器

653 阅读3分钟

异构计算,CPU+GPU 使用专用的硬件做专业的事情。

RISC-V架构的可扩展性

预留的指令编码空间

RISC-V架构的预定义指令

蜂鸟E203的协处理器扩展机制 - NICE

使用NICE (核指令协同单元扩展) 机制进行协处理器扩展。

NICE指令的编码

32位的NICE指令

NICE协处理器的接口信号

4通道。 请求通道 反馈通道 存储器请求通道 存储器反馈通道

主处理器和协处理器配合使用。

NICE协处理器的流水线接口

NICE指令的执行过程:

1 主处理器的译码单元在EXU级 对指令的操作码进行译码,判断是否是预定义指令组

2 若为预定义指令,则依据指令编码中的xs1和xs2判断是否需要读取源寄存器,如果需要读取,EXU级读取通用寄存器组,读出源操作数。

3 主处理器会维护数据依赖的正确性,如果改指令需要读取的源寄存器和之前正在执行的某条指令有RAW的依赖性,则处理器流水线会暂停直至依赖性解除,另外主处理器根据xd位判断预定义指令是否需要将写回结果至通用寄存器组。

4 主处理器在EXU级通过NICE协处理器中接口的请求通道派发给外部的协处理器。蜂鸟E203为32位架构

5 协处理器通过该请求通道接收命令,作进一步译码,并执行指令;

6 协处理器将反馈结果反馈给主处理器。

7 主处理器将指令从流水线取出,并将结果写回通用寄存器组。

NICE协处理器的存储器接口

在处理器的LSU Load/Store Unit访存模块,中为NICE协处理器预留了专用的访存接口。

NICE协处理器可以访问主处理器可以寻址的数据存储器资源,ITCM,DTCM,系统存储总线,系统设备总线,快速IO口

主处理器的LSU为NCIE协处理器预留的专用访问通道基于ICB标准。

NICE协处理器和主处理器中LSU 接口的ICB采用Vaild - ready的方式同步握手。

蜂鸟E203的协处理器

假设有一个3行3列的矩阵按顺序存储在存储器中,矩阵的每个元素是32位的整数。

对矩阵进行:

计算逐行的累加和 计算逐列的累加和

c语言是通过循环方式,计算。按行按列读取,计算。

理论上该程序需要完整地从存储器中读取矩阵元素两次,第一次用于行,第二次用于列。

C程序编译成汇编代码需要消耗较多的指令。

为了提高性能,将矩阵操作定义成协处理器指令。在协处理器中实现12字节的行缓存,用来存储3个列累加值。 每次通过cacc指令计算行累加值时,也会讲三个元素与存储器在行缓存的三个值分别进行相加,因而当完成行累加时,列累加的运算同时完成。 只需通过csw指令将行缓存中的结果读出即可。 每次行缓存前使用clw对行缓存初始化。

协处理器的硬件实现

主要由控制模块和累计模块组成。控制模块负责和主处理器通过NICE协处理器进行交互,并调用累加模块进行累加运算。

需要在c程序中内嵌汇编指令的调用。