RISC-V MCU中文社区

【分享】 基于蜂鸟E203系统与神经网络加速器结合架构设计—软件设计实现

发表于 全国大学生集成电路创新创业大赛 2022-05-25 10:11:59
0
323
2

团队编号:CICC2782 团队名称:啊队队队队 第五次分享

本次主要对利用蜂鸟e203与神经网络加速器结合实现YOLOv3-Tiny神经网络的整合实现部分,对于总体框架及软件部分设计实现进行介绍。

本文的设计是在蜂鸟E203 RISC-V处理器内核的基础上,通过NICE接口将神经网络加速器与E203内核相连,实现E203与神经网络加速器之间的数据交互。
系统大致分为E203内核、NICE核、硬件加速器三个部分。

E203内核主要作用在于从外部接收指令并处理。可以分为取指令阶段(Instruction Fetch Unit,IFU),指令执行(Execute Unit,EXU)写回阶段(Wite Back,WB),以及访存阶段(Load Store Unit,LSU)。

NICE核是连接E203内核与协处理器的桥梁,它主要由四类信号组成:指令请求控制信号、指令反馈控制信号、存储器读写请求信号、存储器读写反馈信号。在它接收来自控制单元的请求信号后,随即做出响应,将相应指令发送到协处理模块。在协处理器完成相应指令后,向控制单元发出响应信号。此外,协处理器还是通过主处理器访问内存单元的。因此,需要通过向控制器发送内存访问请求信号访问内存,并通过内存读写响应信号接受内存访问的结果。

协处理器主要是完成卷积神经网络相关指令,并将相关指令的结果通过 NICE 核返回到 E203 内核之中。当协处理器接收到神经网络指令时,首先通过译码单元进行译码、将操作码、地址位信息,功能位信息提取出来,发送到协处理器内部的控制器当中。协控制单元在接收到来自译码器的操作码位后,向各个模块发送相应指令,调度各个模块来执行当前指令的操作。在指令执行完成后,通过输出缓存模块,将指令执行结果输出到主处理器。

E203内核
蜂鸟v2 E203 RISC-V 处理器主要用于功耗低,面积小的嵌入式应用。对于 E203 内核的流水线级数,它的译码、执行和写回均处于同一个时钟周期,位于流水线的第二级。而访存阶段处于其之后的第三级流水线。但是访存阶段写回的结果仍然需要通过写回模块回到通用寄存器组。因此可以说 E203 内核采用的是变长流水线架构。流水线的第一阶段是取指令。在这一阶段,它会生成 PC 地址,执行指令的简单解码和分支指令的分支预测。流水线的第二阶段则完成解码、执行、内存访问和写回。

流水线的第一阶段主要模块包括地址判断和 ICB(Internal Chip Bus)总线单元、简单解码单元、分支预测单元 BPU(Branch Predict Unit)、PC 生成单元和指令寄存器 IR(Instruction Register)。

E203 内核的指令大部分存于指令紧耦合存储器 ITCM(Instruction Tightly Coupled Memory),而一小部分存于外部存储器。当需要取回 ITCM 的指令时地址判断单元会根据 PC 生成单元的结果,从 ITCM 取回相应地址的指令,并存到指令寄存器 IR。当需要取回的指令是外部存储器的指令时,地址判断单元通过总线接口单元 BIU 使用系统存储接口访问外部寄存器,取回相应地址的指令,并存到指令寄存器 IR。由于绝大部分指令储存在 ITCM,因此系统可以在一个周期内取到指令,达到快速取指的目的。

图片alt

从代码的角度看,E203 CPU 的顶层由 E203 CPU 及 E203 SRAM 组成。E203 CPU又由 E203 时钟控模块、E203 重置控制模块、E203 异步中断信号(irq)同步模块、E203 itcm 指令内存控制模块、E203 dtcm 数据内存控制模块以及 E203 内核组成。E203 内核再由取指模块 E203_ifu、指令执行模块 E203_exu、访存模块 e203_lsu 以及总线访问模块 e203_biu 组成。另一边,E203_SRAM 则由指令内存 ITCM 和数据内存 DTCM 组成。

图片alt

NICE可扩展指令模块

可扩展 NICE(Nuclei Instruction Co-unit Extension)模块可用于创建用户定义的指令。NICE 能够集成定制的硬件协同单元,提高特定领域的性能,同时降低功耗。通过NICE 接口协议连接的协处理单元可以看作是主处理器 E203 内核之外的独立模块。NICE核包含接口部分与扩展指令部分。

指令在通过 NICE 接口发送到 NICE 内核之前,由 E203 处理器内核解码并标记为NICE 指令,同时根据需要读取 NICE 接口的 rs1 和 rs2 寄存器。如果 NICE 指令和前一条未完成的指令之间存在依赖关系,在消除依赖关系之前,会一直将流水线处于暂停状态。通过这种机制,NICE 指令的行为就像来自 E203 处理器内核的一般指令一样,很自然地在协扩展模块中执行,并读写 E203 内核的内存单元。
NICE 接口的输入输出分为四个部分:NICE 请求信号、NICE 响应信号、内存访问请求信号核内存访问响应信号。

NICE 请求信号通过 nice req_valid 和 nice reqready 的握手来确认传输。只要 nice reqready 信号不是高电平,nice reqvalid 信号就和其他请求信息应保持稳定。NICE 内核完成处理后,就通过 NICE 响应通道向 E203 处理器内核发送响应。而且当一条 NICE指令在 NICE 内核中处理时,只要当前 NICE 指令未完成,nice req_ready 信号被清为低电平。这就使新的 NICE 请求,在当前 NICE 指令完成之前一直处于等待状态。

此外 NICE 内核可以通过 NICE 接口访问内存,NICE 接口包括内存请求通道和内存响应通道。在内存请求通道中,NICE 核发送 ICB 请求,然后这些信号等待来自 E203处理器内核的 nice_icb_cmd_ready 信号。一旦此信号有效,它就握手成功,E203 处理器内核将使用其 LSU 管道处理内存访问操作。

在内存响应通道中,E203 处理器内核将 nice_icb_rsp_valid 和 nice_icb_rsp_rdata 发送到 NICE 核,并等待 nice_icb_rsp_ready。在 NICE 核访问内存的过程中,直到 NICE 核访问完所有需要访问的内存之前,nice_mem_holdup 信号应该一直设置并保持高电平。

本文设计的软件程序主要任务如下:

(1)调整输入特征图大小
为了匹配YOLOv3-Tiny网络的输入要求,将输入的RGB 图像宽高大小均调整为 416,此外,为了适配 DMA 与各加速 IP 核同时传输 4 路不同通道数据的优化策略,对原始输入图像填充一个宽高为 416416,像素值大小全为 0 的通道特征图,使得处理后的输入特征图大小为 416416*4。

(2)硬件加速IP核驱动程序设计
加速IP核在HLS 中设计完成后会生成相应的驱动文件,在 SDK 软件程序中,根据设计需求调用、修改这些驱动文件,产生适合的驱动程序。驱动程序大量涉及底层地址映射的寄存器读写,通过对各类 IP 核寄存器的基地址+偏移地址进行分配、读写,可以控制加速 IP 核的工作状态。加速 IP 核的寄存器信号包括控制信号、中断信号、输入特征图大小配置信号等。

(3)YOLOv3-Tiny网络参数的配置
YOLOv3-Tiny 网络共有 13 层卷积层,将整个网络分为 13 个复合层,每个复合层包括当前卷积层和下一个卷积层之前的其它计算层,可能是池化层或是上采样层或是输出层。在软件程序中编写结构体函数,函数主体功能是定义网络每个卷积层的参数规模,包括输入输出大小、步长、激活方式以及完成该卷积层需要执行卷积 IP 核的次数。执行 13 次该结构体函数从而配置完成整个网络参数。

(4)完成网络前向计算
在完成 YOLOv3-Tiny 网络的参数配置后,通过编写前向计算函数完成每个复合层的运算,每个复合层的计算结果作为下一个复合层的输入,所以在执行 13 次前向计算函数之后,可以完成 YOLOv3-Tiny 整个网络的前向计算,并得到最终网络计算结果。

(5)加速器输出结果后处理及显示
处理器接收硬件加速器返回的运行结果,对运行结果进行处理,实时将目标检测结果显示在屏幕上。

喜欢2
用户评论
晚星也会爱你

晚星也会爱你 实名认证

晚星就像你的眼睛

积分
问答
粉丝
关注
  • RV-STAR 开发板
  • RISC-V处理器设计系列课程
  • 培养RISC-V大学土壤 共建RISC-V教育生态
RV-STAR 开发板