RISC-V MCU中文社区

【分享】 数据全复用高性能池化层设计思路分享

发表于 中国研究生创芯大赛 2021-06-23 22:33:38
0
1867
2

团队:站着撸代码

        大家好,本团队此次分享的内容为可实现数据全复用高性能池化层设计思路,核心部分主要由以下3个部分组成;

1.SRAM读取模块;——池化使用的存储为SRAM

基于SRAM读与写时序,约束池化模块读与写时序。读数据时,输入读取地址后,于下一时钟SRAM输出该地址读数据;写数据时,地址与数据同步输入SRAM 

2.SHIFT_RAM模块;

下图为SHIFT_RAM原理图,借鉴行缓存器的原理,填满后输出行首,使用时根据输入实际图像大小与核大小使用对应容量,eg.map_max=64,fliter_max=8,则需64*8的大小。


3.数据处理模块

基于以上SHIFT_RAM输出的数据,数据处理模块主要实现两个功能,一是通过cntcnt_colcnt_stride_colcnt_stride_row分别记录输入的总像素、当前窗口所在列、当前窗口所在步长间隔,用于数据有效性判断。二是使用三级流水线处理数据,其中max pool使用比较、缓存、比较,分别比较tap数据、缓存中间数据、比较中间数据。三级流水线的输出分别存放在maxvaldata_middle[i]max_value三个中间结果中;average pool使用累加、缓存、累加并相除,分别累加tap数据、缓存中间数据、累加中间数据并做除法得平均。三级流水线的输出方别放在sum_datadata_middle[i]sum_data_middleave_value四个中间结果中。其中比较与除法均使用组合逻辑实现。

下图为实现比较结构图,当核尺寸最大为8时,SHIFT_RAM每次输出8个行首数据,将这8个数据通过比较模块按下图方式比较出data_r,再基于data_r与核大小进一步比较大小。例如核尺寸为2时,data_r即为比较结果,核尺寸为4时,则对data_1data_3进行一次比较即为比较结果,以此类推。


实现以上部分,可实现池化数据的全复用,无需多次读取数据,且池化时间短,性能高。

喜欢2
用户评论

实名认证

懒的都不写签名

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