欢迎来到知嘟嘟! 联系电话:13095918853 卖家免费入驻,海量在线求购! 卖家免费入驻,海量在线求购!
知嘟嘟
我要发布
联系电话:13095918853
知嘟嘟经纪人
收藏
专利号: 2018113400180
申请人: 合肥工业大学
专利类型:发明专利
专利状态:已下证
专利领域: 基本电子电路
更新日期:2024-02-26
缴费截止日期: 暂无
价格&联系人
年费信息
委托购买

摘要:

权利要求书:

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并发送到上一层路由器所对应的加法器中。

2.一种应用于卷积神经网络的非还原稀疏数据的编译码方法,所述卷积神经网络包含M层卷积层,由任意第i层卷积层得到边长为Li的第i组输出特征图并存入输出特征图暂存块中,其中,Li为正整数,表示输出特征图的行数和列数;i=1,2,…M;所述第i组输出特征图分批传输到k个通道中,任意第j个通道接收每批中的一张输出特征图;其特征是,所述编译码方法是应用于由k个压缩单元、多路选择器、选择控制器、尾地址缓存队列ain和动态随机存取存储器所组成的编码电路以及由数据读取单元和数据计算单元所组成的译码电路中,且所述动态随机存取存储器中将M层卷积层的各个16位的权重进行配置,使得每4个16位的权重组成一个64位计算权重weight_cal并进行存储;

所述编译码方法是按如下步骤进行:

步骤1、k个通道同时向k个压缩单元发送相应的输出特征图,其中,第j个通道当前周期将输出特征图中16位数据发送给第j个压缩单元,并产生第j个使能信号coding_j也发送给第j个压缩单元;

步骤2、所述第j个压缩单元将当前周期的16位数据与“0”进行比较,若16位数据大于“0”,则令当前周期的比较结果为“1”;并对每行的有效值个数进行计数,得到当前周期的计数结果total;若16位数据小于等于“0”,则令当前周期的比较结果为“0”;

步骤3、每当所述第j个压缩单元获得的比较结果为“1”的次数达到4次时,所述第j个压缩单元将前四次所接收到的16位有效值拼接为一个64位有效值组并存储;

步骤4、所述第j个压缩单元根据当前周期的位数length所指向的0/1编码brand中的相应位置,将所接收到的当前周期的比较结果存入所述0/1编码brand中;所述位数length初始值为31-p;

步骤5、所述第j个压缩单元根据当前周期的第j个使能信号coding_j将当前周期自身存储的位数length减“1”后得到下一周期的位数length并存储;

步骤6、所述第j个压缩单元根据当前周期的第j个使能信号coding_j对每行中16位数据的接收次数进行计数,得到当前周期的统计结果;当所述当前周期的统计结果等于Li时,将当前周期的统计结果清零后,产生next_brand置位信号;

步骤7、所述第j个压缩单元根据next_brand置位信号将所述位数length置为初始值;

步骤8、所述第j个压缩单元将Li个周期所存储的0/1编码brand和Li个周期的计数结果total拼接为64位的压缩码CODE并存储;由所有64位有效值组和所有行的64位的压缩码CODE构成第j个输出特征图的压缩数据;

步骤9、所述第j个压缩单元将Li个周期所存储的0/1编码brand清零,并将Li个周期的计数结果total清零;

步骤10、所述选择控制器控制所述多路选择器按照先读64位的压缩码CODE后读取64位有效值组的顺序,依次读取k个输出特征图的压缩数据并作为译码电路的k个输入特征图的压缩数据后,发送给所述动态随机存取存储器依次存储;由动态随机存取存储器将k个输出特征图的压缩数据所产生的k个尾地址发送给所述尾地址缓存队列ain;

步骤11、所述选择控制器控制所述多路选择器读取所述尾地址缓存队列ain中的k个尾地址并发送给所述动态随机存取存储器;

步骤12、所述数据读取单元检测自身存储的尾地址是否为空,若为空,则从所述动态随机存取存储器中读取k个尾地址中的8个尾地址并存储;若不为空,则判断自身所存储的64位的压缩码CODE的数据个数是否达到阈值,若达到,则所述数据读取单元根据所读取的尾地址addr_v,从所述动态随机存取存储器中取出第v张输入特征图所对应的压缩数据并存储;若没达到,则不操作;v=1,2,…8;

步骤13、所述数据读取单元检测自身存储的计算权重的数据个数是否达到阈值,若达到,则从所述动态随机存取存储器中读取第v张输入特征图对应的64位计算权重weight_cal发送给所述数据计算单元;

步骤14、所述数据读取单元将一个压缩码CODE并拆分为0/1编码brand和计数结果total;

步骤15、所述数据读取单元将所拆分的0/1编码brand传递给所述数据计算单元;并根据所拆分的计数结果total输出对应的64位有效值组idata发送给所述数据计算单元;

步骤16、所述数据计算单元读取一个所拆分的0/1编码brand并存储作为当前周期的计算行编码brand_cur;再将当前周期的计算行编码brand_cur的高5位进行存储并作为当前周期的卷积窗口编码brand_dec;

步骤17、所述数据计算单元对当前周期的卷积窗口编码brand_dec中“1”的个数进行累加,得到当前周期的计算结果rd_cnt;rd_cnt≤5;

步骤18、所述数据计算单元对当前周期的卷积窗口编码brand_dec中每一个“1”的位置进行记录,得到多个位置标识{rank_n},n={1,2,…,rd_cnt};

步骤19、所述数据计算单元在当前周期判断内置的计数器的值rd_num是否小于等于rd_cnt,若是,则将当前周期的计数器的值rd_num所对应的位置标识rank_rd_num的值赋给权重选择地址w_addr,再将rd_num+1赋值rd_num后继续在下一个周期判断;若不是,则将当前周期的计数器的值rd_num置“1”,并产生译码启动信号next_dec;

步骤20、所述数据计算单元读取当前周期的卷积窗口编码brand_dec的最高位并与“0”比较,若不等于“0”,则产生指针变动信号ptr_add,若等于“0”,则不产生;

步骤21、所述数据计算单元读取2个64位有效值组idata并拼接成128位窗口数据data_i作为初始数据;

步骤22、设置一指针ptr,根据指针ptr的值的大小从高位到低位分别指向窗口数据data_i中一个16位有效值,ptr=0,1,2…7,并初始化所述指针ptr的值为0,即指向窗口数据data_i中最低位数的16位有效值;

步骤23、所述数据计算单元在当前周期判断是否接收到译码启动信号next_dec,若未收到,则指针ptr的值在当前周期加1,即指针ptr在当前周期指向高一级位置的16位有效值作为计算数据data_cal;若接收到译码启动信号next_dec,则指针ptr的值在当前周期内减去当前周期的计算结果rd_cnt的值,再判断是否接收到指针变动信号ptr_add;若接收到指针变动信号ptr_add且指针ptr的值大于等于3,则产生有效值请求信号next_i;再将指针ptr清零,若接收到指针变动信号ptr_add但指针ptr的值小于3,则令指针ptr的值加1;若在当前周期未接收到指针变动信号ptr_add,则指针ptr保持不变;

步骤24、当所述数据计算单元产生所述有效值请求信号next_i信号时,则读取一个64位有效值组idata;

步骤25、所述数据计算单元将所述128位窗口数据data_i右移64位后,将读取的一个64位有效值组idata写入所述128位窗口数据data_i的高64位中,从而得到当前周期新的窗口数据data_i;

步骤26、所述数据计算单元根据在当前周期的权重选择地址w_addr选择对应64位计算权重weight_cal并拆分为4个权重weight;

步骤27、将收到的16位计算数据data_cal与16位权重weight相乘,得到当前周期的乘积mul;

步骤28、将当前周期所接收的乘积mul与下一层路由器中的卷积结果data_low相加,得到当前路由器中一个卷积结果result_cur并发送到上一层路由器中。