[发明专利]应用于卷积神经网络的非还原稀疏数据的编译码电路及其编译码方法有效
申请号: | 201811340018.0 | 申请日: | 2018-11-12 |
公开(公告)号: | CN109104197B | 公开(公告)日: | 2022-02-11 |
发明(设计)人: | 杜高明;吴继婷;张华蕾;张多利;宋宇鲲;张永亮;杨振文 | 申请(专利权)人: | 合肥工业大学 |
主分类号: | H03M7/30 | 分类号: | H03M7/30;G06N3/04 |
代理公司: | 安徽省合肥新安专利代理有限责任公司 34101 | 代理人: | 陆丽莉;何梅生 |
地址: | 230009 安*** | 国省代码: | 安徽;34 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | 本发明公开了一种应用于卷积神经网络的非还原稀疏数据的编译码电路及其编译码方法,其中,编码电路包括:k个压缩单元、多路选择器、选择控制器、尾地址缓存队列ain和动态随机存取存储器;译码电路包括:数据读取单元和数据计算单元;数据读取单元包括:两组数据传输模块、读写控制器和地址缓存队列afifo;数据计算单元包括:0/1编码缓存队列br_fifo、有效值存储器iram、权重存储器wram、移位寄存器、窗口寄存器、有效值累加器、位置判断器、权重地址生成器、首位比较器、数据暂存块、乘法器和加法器。本发明能降低数据的存取功耗、读取功耗和时间及传输功耗和时间,缩减计算量和计算功耗,同时提高PE的利用率。 | ||
搜索关键词: | 应用于 卷积 神经网络 还原 稀疏 数据 译码 电路 及其 方法 | ||
【主权项】:
1.一种应用于卷积神经网络的非还原稀疏数据的编译码电路,所述卷积神经网络包含M层卷积层,由任意第i层卷积层得到边长为Li的第i组输出特征图并存入输出特征图暂存块中,其中,Li为正整数,表示输出特征图的行数和列数;i=1,2,…M;所述第i组输出特征图分批传输到k个通道中,任意第j个通道接收每批中的一张输出特征图;其特征是,令编码电路包括:k个压缩单元、多路选择器、选择控制器、尾地址缓存队列ain和动态随机存取存储器;且所述动态随机存取存储器中将M层卷积层的各个16位的权重进行配置,使得每4个16位的权重组成一个64位计算权重weight_cal并进行存储;任意第j个压缩单元包括:第j个零比较器、第j个长度计数器、第j个位置计数器、第j个总数计数器、第j个输入暂存块、第j个编码生成块、第j个有效值暂存块、第j个编码拼接块、第j个编码缓存队列bin、第j个数据缓存队列din;其中,j为正整数;j=1,2,…k;第j个通道在每个周期均发送输出特征图中16位数据给所述第j个输入暂存块,并在每个周期产生第j个使能信号coding_j传递给所述第j个长度计数器和第j个位置计数器;同时在每个周期产生偏置长度p并传递给所述第j个位置计数器;所述第j个输入暂存块将当前周期的16位数据传递给所述第j个零比较器,由第j个零比较器将当前周期的16位数据与“0”进行比较,若16位数据大于“0”,则令当前周期的比较结果为“1”并传递给所述第j个编码生成块,同时产生当前周期的数据有效信号d_en给所述第j个输入暂存块和第j个总数计数器;若16位数据小于等于“0”,则令当前周期的比较结果为“0”并传递给所述第j个编码生成块;所述第j个输入暂存块根据当前周期的数据有效信号d_en将当前周期的16位数据确定为有效值传递给所述第j个有效值暂存块;当所述第j个有效值暂存块第四次接收到16位有效值后,将前四次所接收到的16位有效值拼接为一个64位有效值组并发送给所述第j个数据缓存队列din中;所述第j个总数计数器根据当前周期的数据有效信号d_en对每行的16位有效值个数进行计数,得到当前周期的计数结果total;所述第j个位置计数器根据当前周期的第j个使能信号coding_j将当前周期自身存储的位数length传递给所述第j个编码生成块,再将当前周期的位数length减“1”后得到下一周期的位数length并存储;所述位数length初始值为31‑p;所述第j个编码生成块根据当前周期的位数length所指向的0/1编码brand中的相应位置,将所接收到的当前周期的比较结果存入所述0/1编码brand中;所述第j个长度计数器根据当前周期的第j个使能信号coding_j对每行中16位数据的接收次数进行计数,得到当前周期的统计结果;当所述当前周期的统计结果等于Li时,将当前周期的统计结果清零后,产生next_brand置位信号分别发送给第j个位置计数器、所述第j个编码生成块和所述第j个总数计数器;所述第j个位置计数器根据所接收到的next_brand置位信号将所述位数length置为初始值;所述第j个编码生成块根据所接收到的next_brand置位信号将Li个周期所存储的0/1编码brand发送给所述第j个编码拼接块后,再将Li个周期所存储的0/1编码brand清零;所述第j个总数计数器根据所接收到的next_brand置位信号将Li个周期的计数结果total发送给所述第j个编码拼接块后,再将Li个周期的计数结果total清零;所述第j个编码拼接块将Li个周期所存储的0/1编码brand和Li个周期的计数结果total拼接为64位的压缩码CODE后发送给所述第j个编码缓存队列bin;当所述k个编码缓存队列bin和k个数据缓存队列din均存入数据后,所述选择控制器控制所述多路选择器按照先读取编码缓存队列bin后读取数据缓存队列din的顺序,依次读取k个编码缓存队列bin和k个数据缓存队列din中存储的数据构成k个输出特征图的压缩数据并作为译码电路的k个输入特征图的压缩数据,发送给所述动态随机存取存储器依次存储;由动态随机存取存储器将k个输出特征图的压缩数据所产生的k个尾地址addr发送给所述尾地址缓存队列ain;所述选择控制器控制所述多路选择器读取所述尾地址缓存队列ain中的k个尾地址addr并发送给所述动态随机存取存储器;令译码电路包括:数据读取单元和数据计算单元;所述数据读取单元包括:两组数据传输模块、读写控制器和地址缓存队列afifo;每组数据传输模块包括:编码拆分模块、数据通道、编码缓存队列bfifo、有效值缓存队列ififo、权重缓存队列wfifo;所述读写控制器检测所述地址缓存队列afifo是否为空,若为空,则从所述动态随机存取存储器中读取k个尾地址addr中的8个尾地址并存入所述地址缓存队列afifo中,若不为空,则判断任意一组数据传输模块中的编码缓存队列bfifo中的数据个数是否达到阈值,若达到,则所述读写控制器依次读取所述地址缓存队列afifo中的尾地址;若没达到,则不操作;所述读写控制器根据所读取的尾地址addr_v,从所述动态随机存取存储器中取出第v张输入特征图所对应的压缩数据,并将第v张输入特征图所对应的所有压缩码CODE存入所述编码缓存队列bfifo中,将第v张输入特征图所对应的所有64位有效值组idata存入所述有效值缓存队列ififo中;v=1,2,…8;所述读写控制器检测所述权重缓存队列wfifo中的数据个数是否达到阈值,若达到,则从所述动态随机存取存储器中读取第v张输入特征图对应的64位计算权重weight_cal并发送给权重缓存队列wfifo;由所述权重缓存队列wfifo将第v张输入特征图对应的64位计算权重weight_cal经过所述数据通道发送给所述数据计算单元;所述编码拆分模块读取编码缓存队列bfifo中一个压缩码CODE并拆分为0/1编码brand和计数结果total后分别发送给所述数据通道和所述有效值缓存队列ififo;所述数据通道将所拆分的0/1编码brand传递给所述数据计算单元;所述有效值缓存队列ififo根据所拆分的计数结果total输出对应的64位有效值组idata给数据通道用于发送给所述数据计算单元;所述数据计算单元包括:0/1编码缓存队列br_fifo、有效值存储器iram、权重存储器wram、移位寄存器、窗口寄存器、有效值累加器、位置判断器、权重地址生成器、首位比较器、数据暂存块、4个乘法器和4个加法器;所述0/1编码缓存队列br_fifo接收所拆分的0/1编码brand,所述有效值存储器iram接收所述64位有效值组idata,所述权重存储器wram接收所述64位计算权重weight_cal;所述移位寄存器从所述0/1编码缓存队列br_fifo读取一个所拆分的0/1编码brand并存储作为当前周期的计算行编码brand_cur;所述窗口寄存器读取当前周期的计算行编码brand_cur的高5位并存储作为当前周期的卷积窗口编码brand_dec;所述有效值累加器对当前周期的卷积窗口编码brand_dec中“1”的个数进行累加,得到当前周期的计算结果rd_cnt,并将发送给所述数据暂存块和所述权重地址生成器;rd_cnt≤5;所述位置判断器对当前周期的卷积窗口编码brand_dec中每一个“1”的位置进行记录,得到多个位置标识{rank_n},n={1,2,…,rd_cnt};所述权重地址生成器在当前周期判断内置的计数器的值rd_num是否小于等于rd_cnt,若是,则将当前周期的计数器的值rd_num所对应的位置标识rank_rd_num的值赋给权重选择地址w_addr并将其发送给所述权重存储器wram,再将rd_num+1赋值rd_num后继续在下一个周期判断;若不是,则将当前周期的计数器的值rd_num置“1”,并产生译码启动信号next_dec发送给所述移位寄存器和所述数据暂存块;所述首位比较器读取窗口寄存器中当前周期的卷积窗口编码brand_dec的最高位并与“0”比较,若不等于“0”,则发送指针变动信号ptr_add给所述数据暂存块,若等于“0”,则不发送;所述数据暂存块从所述有效值存储器iram中读取2个64位有效值组idata并拼接成128位窗口数据data_i作为初始数据;设置一指针ptr,根据指针ptr值的大小从高位到低位分别指向窗口数据data_i中一个16位有效值,ptr=0,1,2…7,并初始化所述指针ptr的值为0,即指向窗口数据data_i中最低位数的16位有效值;所述数据暂存块在当前周期判断是否接收到译码启动信号next_dec,若未收到,则指针ptr的值在当前周期加1,即指针ptr在当前周期指向高一级位置的16位有效值作为计算数据data_cal,发送给所述4个乘法器;若接收到译码启动信号next_dec,则指针ptr的值在当前周期内减去当前周期的计算结果rd_cnt的值,再判断是否接收到指针变动信号ptr_add;若接收到指针变动信号ptr_add且指针ptr的值大于等于3,则发送有效值请求信号next_i给所述有效值存储器iram,再将指针ptr清零,若接收到指针变动信号ptr_add但指针ptr的值小于3,则令指针ptr的值加1;若在当前周期未接收到指针变动信号ptr_add,则指针ptr保持不变;当所述有效值存储器iram在当前周期接收到所述有效值请求信号next_i信号时,则将一个64位有效值组idata发送给所述数据暂存块;所述数据暂存块在当前周期接收到64位有效值组idata后,将所述128位窗口数据data_i右移64位后,将64位有效值组idata写入所述128位窗口数据data_i的高64位中,从而得到当前周期新的窗口数据data_i;所述权重存储器wram根据在当前周期的权重选择地址w_addr选择对应64位计算权重weight_cal并拆分为4个权重weight后分别发给4个乘法器;每个乘法器在当前周期将收到的16位计算数据data_cal与16位权重weight相乘,得到当前周期的乘积mul发往相应的一个加法器;每个加法器将当前周期所接收的乘积mul与下一层路由器中相应加法器的卷积结果result_low相加,得到当前路由器中一个卷积结果result_cur并发送到上一层路由器所对应的加法器中。
下载完整专利技术内容需要扣除积分,VIP会员可以免费下载。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于合肥工业大学,未经合肥工业大学许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/patent/201811340018.0/,转载请声明来源钻瓜专利网。