CN103677739A - 一种可配置的乘累加运算单元及其构成的乘累加运算阵列 - Google Patents
一种可配置的乘累加运算单元及其构成的乘累加运算阵列 Download PDFInfo
- Publication number
- CN103677739A CN103677739A CN201310632691.2A CN201310632691A CN103677739A CN 103677739 A CN103677739 A CN 103677739A CN 201310632691 A CN201310632691 A CN 201310632691A CN 103677739 A CN103677739 A CN 103677739A
- Authority
- CN
- China
- Prior art keywords
- multiply accumulating
- register
- multiply
- arithmetic element
- carry
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Images
Landscapes
- Complex Calculations (AREA)
Abstract
一种可配置的乘累加运算单元及其构成的乘累加运算阵列,该乘累加运算单元包括用于接收并存储Ain和Bin的操作数寄存级、用于Ain和Bin相乘的乘法级、及用于使乘法级的运算结果与该乘累加运算单元前一拍的运算结果或上一级乘累加运算单元的运算结果相加的加法级;加法级还接收能将运算模式调整为进位累加模式或自累加模式的模式配置。该乘累加运算阵列由多个该乘累加运算单元构成。本发明提供的乘累加运算单元和乘累加运算阵列将进位累加模式和自累加模式合二为一,能通过编程模式配置来实现不同的运算模式,应用中能跟据需要灵活配置选择运算模式来完成乘累加计算,能获得更好的计算实时性能及更高的资源利用效率。
Description
技术领域
本发明属于数字电路技术领域,涉及一种可配置的乘累加运算单元及其构成的乘累加运算阵列。
背景技术
归一化互相关匹配中涉及到大量的复杂运算,据统计,其中的定点乘累加计算能占到全部计算的80%以上。在过去很长时间里由于该种匹配方法计算量大,即便是采用高性能指令式传统DSP器件来完成这样的匹配计算,也很难达到应用中对实时性能的要求。如果完成匹配任务的图像尺寸再增大,计算量基本上会按图像尺寸的四次方增长,如果靠采用多DSP耦合来提高***的实时性能,不仅会带来***功耗的增加,可靠性降低,而且控制上更加复杂,还不利于设备的小型化。
随着VLSI技术的飞速发展,越来越多的图像匹配计算直接采用硬件实现方式,这为提高图像匹配的实时性能提供了一种全新的方式。在VLSI技术广泛应用的今天,完成图像匹配多采用“DSP+协处理器”的模式,其中协处理器受到DSP的控制,在DSP给协处理器配置完参数和传送图像数据后,启动协处理器完成计算,同时DSP也并行完成一部分计算任务,协处理器一般采用专用集成电路或者直接靠FPGA实现,主要完成匹配中计算量大,且计算具有明显规律性的计算任务。
在归一化互相关的匹配中,大量的乘累加运算具有很强的规律性,可以采用专门的协处理器来实现,协处理器实现时可以先设计出专门的乘累加单元(Cell),然后采用从时间和空间上资源重复技术,能够形成规模性大、规整性强、易于流水的阵列。这样的Cell具有内部结构简单,控制简单、端口数量少的优点,因此很适合用来做这样的扩展。
但是值得提出的是在以往的Cell设计中,功能都显得单一,不可配置,这使得在完成乘累加计算时计算模式也显得单一,不能根据具体的匹配尺寸进行配置从而进一步提高灵活性,因此计算的实时性能还是受到了一定的限制。
发明内容
本发明的目的在于提供一种多功能的可配置的乘累加运算单元及由其构成的乘累加运算阵列,该乘累加运算单元及其构成的乘累加运算阵列具有由进位累加模式和自累加模式组成的双运算模式,适用于数字图像匹配中的乘累加快速计算,能够提高计算的实时性能。
为达到上述目的,本发明采用的技术方案为:
一种可配置的乘累加运算单元,包括用于接收并存储级联输入操作数和并发输入操作数的操作数寄存级、用于使操作数寄存级中储存的级联输入操作数和并发输入操作数相乘的乘法级、以及用于使乘法级的运算结果与该乘累加运算单元前一拍的运算结果或上一级乘累加运算单元的运算结果相加的加法级,加法级的运算结果通过进位输出操作数向下一级乘累加运算单元输出;加法级还接收能够将运算模式调整为进位累加模式或自累加模式的模式配置、以及用于控制输出最终运算结果的结果输出使能;加法级内设有用于存储运算结果的寄存器,在进位累加模式中,上一级乘累加运算单元的运算结果通过进位输入操作数输入到加法级中;操作数寄存级还向下一级乘累加运算单元输出级联输出操作数。
所述的操作数寄存级内设有级联寄存器、并发寄存器和第一级寄存器;操作数寄存级同时接收级联输入操作数和级联输入操作数使能,使级联输入操作数存入级联寄存器中;然后同时接收并发输入操作数和并发输入操作数使能,使并发输入操作数存入并发寄存器中,并发输入操作数使能经过第一级寄存器延迟成为第一级使能,然后第一级使能、级联输入操作数和并发输入操作数同时到达乘法级;级联寄存器中存入的级联输入操作数延迟后作为级联输出操作数向上一级乘累加运算单元输出,输出的级联输出操作数作为上一级乘累加运算单元的级联输入操作数。
所述的乘法级内设有乘法器和乘法寄存器;第一级使能使级联输入操作数和并发输入操作数进入乘法器进行乘法运算,乘法级的运算结果存入乘法寄存器中。
所述的乘法级内还设有第二级寄存器,第一级使能经第二级寄存器延迟后成为第二级使能;在自累加模式中,第二级使能和乘法寄存器内存储的乘法级的运算结果同时到达加法级;而在进位累加模式中,仅有乘法寄存器内存储的乘法级的运算结果到达加法级。
所述的加法级内设有加法器和进位使能寄存器;
在自累加模式中,寄存器内存储有该乘累加运算单元前一拍的运算结果;第二级使能、乘法寄存器内存储的乘法级的运算结果和寄存器内存储的该乘累加运算单元前一拍的运算结果同时到达加法器,第二级使能使乘法寄存器内存储的乘法级的运算结果和寄存器内存储的该乘累加运算单元前一拍的运算结果进入加法器中进行加法运算,加法运算的结果再存入寄存器中,寄存器中存储的运算结果在该乘累加单元下一拍的加法运算时,作为该乘累加运算单元前一拍的运算结果,继续参与该乘累加单元下一拍的加法运算;输出最终运算结果时,由结果输出使能控制,使寄存器中的运算结果作为进位输出操作数向下一级乘累加运算单元输出,输出的进位输出操作数作为下一级乘累加运算单元的进位输入操作数;
在进位累加模式中,加法级同时接收进位输入操作数使能、进位输入操作数和乘法寄存器内存储的乘法级的运算结果,进位输入操作数使能使乘法寄存器内存储的乘法级的运算结果和上一级乘累加运算单元的运算结果通过进位输入操作数同时进入加法器中进行加法运算,加法运算的结果存入寄存器中,并作为进位输出操作数向下一级乘累加运算单元输出,同时进位输入操作数使能经进位使能寄存器延迟后再作为进位输出操作数使能向下一级乘累加运算单元输出,且进位输出操作数和进位输出操作数使能同时输出,输出的进位输出操作数作为下一级乘累加运算单元的进位输入操作数,输出的进位输出操作数使能作为下一级乘累加运算单元的进位输入操作数使能。
所述的加法级内设有第一多路选择器和第二多路选择器,模式配置通过控制第一多路选择器和第二多路选择器将运算模式调整为进位累加模式或自累加模式。
在自累加模式中,模式配置控制第一多路选择器,使第二级使能到达加法器,断开进位输入操作数使能到达加法器的路径;同时模式配置控制第二多路选择器,使寄存器内存储的上一级的乘累加运算单元的运算结果到达加法器,断开进位输入操作数到达加法器的路径;
在进位累加模式中,模式配置控制第一多路选择器,使进位输入操作数使能到达加法器,断开第二级使能到达加法器的路径;同时模式配置控制第二多路选择器,使进位输入操作数到达加法器,断开寄存器内存储的该乘累加运算单元前一拍的运算结果到达加法器的路径。
所述的加法级内还设有第三多路选择器,加法器的运算结果通过第三多路选择器到达寄存器。
在自累加模式中输出最终运算结果时,模式配置控制第二多路选择器,断开寄存器内存储的运算结果到达加法器的路径,使进位输入操作数通过第二多路选择器;同时结果输出使能控制第三多路选择器,断开加法器的运算结果到达寄存器的路径,使通过第二多路选择器的进位输入操作数再通过第三多路选择器到达寄存器。
所述的可配置的乘累加运算单元构成的乘累加运算阵列,其由多个可配置的乘累加运算单元构成,且能够根据运算量的大小调整构成该乘累加运算阵列的乘累加运算单元的数量;在该乘累加运算阵列中,所有乘累加运算单元的级联输入操作数使能连接在一起,所有乘累加运算单元的并发输入操作数连接在一起,所有乘累加运算单元的并发输入操作数使能连接在一起,所有乘累加运算单元的模式配置连接在一起,所有乘累加运算单元的结果输出使能连接在一起;在该乘累加运算阵列的每行的末尾配置与该行最后一个乘累加运算单元的级联输入操作数相连的第一行缓存,及与该行最后一个乘累加运算单元的进位输出操作数相连的第二行缓存,且该行第一个乘累加运算单元的级联输出操作数与上一行的第一行缓存相连,该行第一个乘累加运算单元的进位输入操作数与上一行的第二行缓存相连。
相对于现有技术,本发明的有益效果为:
本发明提供的可配置的乘累加运算单元是一种基于FPGA的新的具有双运算模式的乘累加运算单元,其配置方式是可编程的模式配置LoopEn,通过编程模式配置可以将其配置成两种运算模式:进位累加模式或自累加模式,形成兼容这两种运算模式的乘累加运算单元,而且同样只采用一个加法器和一个乘法器,不会带来明显的资源增长开销。本发明能够实现图像匹配中乘累加计算方式的可编程化,从而在乘累加计算时能够根据不同的匹配图像尺寸自适应的灵活选择运算方式来完成计算,具有更高的灵活性,并且能够获得更好的计算实时性能及更高的资源利用效率。克服了现有乘累加运算单元功能单一、计算模式单一、不可配置、灵活性较差及计算实时性能受限的问题。
本发明提供的乘累加运算单元构成的乘累加运算阵列,将进位累加模式和自累加模式合二为一,能够通过编程模式配置LoopEn来实现不同的运算模式,应用中能够跟据需要灵活配置选择运算模式来完成乘累加计算。设匹配的模板图行长度和参考图行长度分别为Nx、Mx,从理论分析和实际应用测试中都能证明如下结论:
a:若Nx≈Mx-Nx+1,即参考图的行长度约为模板图的2倍时,用自累加模式和进位累加模式完成这样的一次匹配速度相当,且资源利用率相当。
b:若Nx>>Mx-Nx+1,即参考图的行长度远小于模板图的2倍时,用自累加模式完成这样的一次匹配比用进位乘累加结构速度更快,且资源利用率更高。
c:若Nx<<Mx-Nx+1,即参考图的行长度远大于模板图的2倍时,用进位累加模式完成这样的一次匹配比用自累加模式速度更快,且资源利用率更高。
附图说明
图1为进位累加模式的乘累加运算单元的结构示意图;
图2为自累加模式的乘累加运算单元的结构示意图;
图3为本发明提供的可配置的乘累加运算单元的结构示意图;
图4为本发明提供的乘累加运算阵列的结构示意图;
其中:A为级联寄存器、Ain为级联输入操作数、AEn为级联输入操作数使能、Aout为级联输出操作数、B为并发寄存器、Bin为并发输入操作数、BEn为并发输入操作数使能、C为进位使能寄存器、Cin为进位输入操作数、Cout为进位输出操作数、CEn为进位输入操作数使能、CoEn为进位输出操作数使能、D为第一级寄存器、E为第二级寄存器、F为乘法器、G为加法器、H为第一多路选择器、I为第二多路选择器、J为第三多路选择器、M为乘法寄存器、R为寄存器、RSOEn为结果输出使能、LoopEn为模式配置。
具体实施方式
下面结合附图对本发明作进一步详细说明。
参见图3,本发明提供的可配置的乘累加运算单元Cell的结构为:
由可配置的乘累加运算单元Cell外部输入的数据及对应的使能有:级联输入操作数Ain、级联输入操作数使能AEn、并发输入操作数Bin、并发输入操作数使能BEn、进位输入操作数Cin、进位输入使能CEn。
为了方便多个乘累加运算单元级联,乘累加运算单元有如下输出端:级联输出操作数Aout、进位输出操作数Cout、进位输出使能CoEn。
为了存储操作数,形成乘累加运算本地流水,提高电路运行速度,乘累加运算单元中加了如下数据寄存器:级联寄存器A(8bit),并发寄存器B(8bit),乘法寄存器M(32bit),寄存器R(32bit)。
计算时可以配置成不同的模式进行计算,乘累加运算单元具有一个外部输入的配置端:模式配置LoopEn。
计算过程中是否选择乘累加结果输出,相应的有一个使能信号:结果输出使能RSOEn。当该信号无效时累加结果会输出到寄存器R中,计算过程中总是保持RSOEn=‘0’(无效),当RSOEn=‘1’(有效)时用于自累加模式下输出最终计算结果。
为了使数据和使能信号对齐,乘累加运算单元中加了如下使能信号寄存器:第一级寄存器D、第二级寄存器E、进位使能寄存器C。
乘累加运算单元中包含一个乘法器F,实现两个8bit数据相乘。乘法器的两个输入操作数分别来自级联寄存器A,并发寄存器B,输出一个高16bit为‘0’的32位结果存入乘法寄存器M,乘法器的使能信号由并发输入操作数使能BEn通过第一级寄存器D延时产生,且必须与输入的两个乘数对齐。
乘累加运算单元中包含一个加法器G,实现两个32bit数据相加。当乘累加运算单元配置成进位累加模式时(LoopEn=‘0’,见图1),加法器的两个输入操作数分别来自乘法寄存器M和进位输入操作数Cin,输出一个32位的和存入寄存器R,加法器使能信号由进位输入操作数使能CEn提供,且必须与输入的两个加数对齐。当乘累加运算单元配置成自累加模式时(LoopEn=‘1’,见图2),加法器的两个输入操作数分别来自乘法寄存器M和寄存器R,输出一个32位的和存入寄存器R,加法器使能信号由第一级使能经第二级寄存器E产生,且必须与输入的两个加数对齐。
本发明提供的可配置的乘累加运算单元,包括用于接收并存储级联输入操作数Ain和并发输入操作数Bin的操作数寄存级、用于使操作数寄存级中储存的级联输入操作数Ain和并发输入操作数Bin相乘的乘法级、以及用于使乘法级的运算结果与该乘累加运算单元前一拍的运算结果或上一级乘累加运算单元的运算结果相加的加法级,加法级的运算结果通过输出进位输出操作数Cout向下一级乘累加运算单元输出;加法级还接收能够将运算模式调整为进位累加模式或自累加模式的模式配置LoopEn、以及用于控制输出最终运算结果的结果输出使能RSOEn。
操作数寄存级内设有级联寄存器A、并发寄存器B和第一级寄存器D;操作数寄存级同时接收级联输入操作数Ain和级联输入操作数使能AEn,使级联输入操作数Ain存入级联寄存器A中;然后同时接收并发输入操作数Bin和并发输入操作数使能BEn,使并发输入操作数Bin存入并发寄存器B中,并发输入操作数使能BEn经过第一级寄存器D延迟成为第一级使能,然后第一级使能、级联输入操作数Ain和并发输入操作数Bin同时到达乘法级;另外,级联寄存器A中存入的级联输入操作数Ain延迟后作为级联输出操作数Aout向上一级乘累加运算单元输出,输出的级联输出操作数Aout作为上一级乘累加运算单元的级联输入操作数Ain。
乘法级内设有乘法器F、乘法寄存器M和第二级寄存器E;第一级使能使级联输入操作数Ain和并发输入操作数Bin进入乘法器F进行乘法运算,乘法级的运算结果存入乘法寄存器M中。乘法级内还设有第二级寄存器E,第一级使能经第二级寄存器E延迟后成为第二级使能。
加法级内设有加法器G和进位使能寄存器C和寄存器R;加法级内还设有第一多路选择器H、第二多路选择器I和第三多路选择器J。模式配置LoopEn通过控制第一多路选择器H和第二多路选择器I将运算模式调整为进位累加模式或自累加模式。加法器的运算结果通过第三多路选择器J到达寄存器R。
在自累加模式中,寄存器R用于存储该乘累加运算单元前一拍的运算结果。模式配置LoopEn控制第一多路选择器H,使第二级使能到达加法器G,断开进位输入操作数使能CEn到达加法器G的路径;同时模式配置LoopEn控制第二多路选择器I,使寄存器R内存储的该乘累加运算单元前一拍的运算结果到达加法器G,断开进位输入操作数Cin到达加法器G的路径。第二级使能、乘法寄存器M内存储的乘法级的运算结果和寄存器R内存储的该乘累加运算单元前一拍的运算结果同时到达加法器G,第二级使能使乘法寄存器M内存储的乘法级的运算结果和寄存器R内存储的该乘累加运算单元前一拍的运算结果进入加法器G中进行加法运算,加法运算的结果再存入寄存器R中,寄存器R中存储的运算结果在该乘累加单元下一拍的加法运算时,作为该乘累加运算单元前一拍的运算结果,继续参与该乘累加单元下一拍的加法运算。在自累加模式中输出最终运算结果时,模式配置LoopEn控制第二多路选择器I,断开寄存器R内存储的运算结果到达加法器G的路径,使进位输入操作数Cin通过第二多路选择器I;同时结果输出使能RSOEn控制第三多路选择器J,断开加法器的运算结果到达寄存器R的路径,使通过第二多路选择器I的进位输入操作数Cin再通过第三多路选择器J到达寄存器R,寄存器R中的运算结果作为进位输出操作数Cout向下一级乘累加运算单元输出,输出的进位输出操作数Cout作为下一级乘累加运算单元的进位输入操作数Cin。
在进位累加模式下,寄存器R用于储存加法级的运算结果。上一级乘累加运算单元的运算结果通过进位输入操作数Cin输入到加法级中。模式配置LoopEn控制第一多路选择器H,使进位输入操作数使能CEn到达加法器G,断开第二级使能到达加法器G的路径;同时模式配置LoopEn控制第二多路选择器I,使进位输入操作数Cin到达加法器G,断开寄存器R内存储的该乘累加运算单元前一拍的运算结果到达加法器G的路径。加法级同时接收进位输入操作数使能CEn、进位输入操作数Cin和乘法寄存器M内存储的乘法级的运算结果,进位输入操作数使能CEn使乘法寄存器M内存储的乘法级的运算结果和上一级乘累加运算单元的运算结果通过进位输入操作数Cin同时进入加法器G中进行加法运算,加法运算的结果存入寄存器R中,并作为进位输出操作数Cout向下一级乘累加运算单元输出,同时进位输入操作数使能CEn经进位使能寄存器C延迟后再作为进位输出操作数使能CoEn向下一级乘累加运算单元输出,且进位输出操作数Cout和进位输出操作数使能CoEn同时输出,输出的进位输出操作数Cout作为下一级乘累加运算单元的进位输入操作数Cin,输出的进位输出操作数使能CoEn作为下一级乘累加运算单元的进位输入操作数使能CEn。
本发明中由多个可配置的乘累加运算单元构成乘累加运算阵列,且能够根据运算量的大小调整构成该乘累加运算阵列的乘累加运算单元的数量。在乘累加运算阵列中,所有乘累加运算单元的级联输入操作数使能AEn连接在一起,所有乘累加运算单元的并发输入操作数Bin连接在一起,所有乘累加运算单元的并发输入操作数使能BEn连接在一起,所有乘累加运算单元的模式配置LoopEn连接在一起,所有乘累加运算单元的结果输出使能RSOEn连接在一起;上一级的级联输入操作数Ain与下一级的级联输出操作数Aout相连,上一级的进位输出操作数Cout与下一级的进位输入操作数Cin相连,上一级的进位输出操作数使能CoEn与下一级的进位输入操作数使能CEn相连(同一行中两个相邻的乘累加运算单元,左边的乘累加运算单元为上一级,右边的乘累加运算单元为下一级);在乘累加运算阵列的每行的末尾配置与该行最后一个乘累加运算单元(最右边的一个)的级联输入操作数Ain相连的第一行缓存Buf-1,及与该行最后一个乘累加运算单元的进位输出操作数Cout相连的第二行缓存Buf-2,且该行第一个乘累加运算单元(最左边的一个)的级联输出操作数Aout与上一行的第一行缓存Buf-1相连,该行第一个乘累加运算单元的进位输入操作数Cin与上一行的第二行缓存Buf-2相连。
在构造乘累加运算阵列时:
将本发明提供的乘累加运算单元按一定方式进行组织形成乘累加运算阵列,可以实现大规模的流水并行计算。构造乘累加运算阵列时可以设置两个参数,分别控制阵列横向和纵向乘累加运算单元的个数,从而根据需要很方便的构造出不同规模的阵列,构造方式见图4,图4提供了一个4×2阵列的示意图,为了让图示更简洁,图4只画出了相关的数据路径。阵列扩展时将上一级乘累加运算单元的级联输入操作数连接到下一级乘累加运算单元的级联输出操作数,上一级乘累加运算单元的进位输出操作数连接到下一级乘累加运算单元的进位输入操作数,所有乘累加运算单元的并发输入操作数端接收统一的并发数据。需要特别指出的是在乘累加运算阵列每行的末尾需要配置相应的第一行缓存(Buf-1)和第二行缓存(Buf-2),当模式配置LoopEn=‘0’时用于缓存中间结果,当模式配置LoopEn=‘1’时用于缓存参考图。乘累加运算阵列组织好之后,只要控制好各个点的延时,使相关的数据与使能信号对齐,方能进行大规模的流水并行计算。
下面对本发明的乘累加运算阵列在两种运算模式下的工作流程分别予以介绍。
一、进位乘累加模式工作流程:
当编程使模式配置LoopEn=‘0’时,整个乘累加运算阵列形成进位乘累加计算模式。在该模式下可以看做是模板图(或它的一部分)在乘累加运算阵列中完成与整个参考图的匹配运算。如果模板图不能一次全部加载到乘累加运算阵列中,可以采用多次循环的方式,直到模板图加载完成为止,只是在下一次循环中需要将上次循环所得的乘累加结果以流水方式加载到乘累加运算阵列第一个乘累加运算单元(第一行左边第一个乘累加运算单元)的进位输入操作数端。当所有循环都计算完成时,乘累加运算阵列输出的就是整个模板图与整个参考图的匹配结果。
其具体步骤如下:
1)阵列组织:
在进位乘累加模式下乘累加运算阵列按照级联规模和模板图行长度大小进行组织,组织时可以采用一行乘累加运算阵列或者多行乘累加运算阵列首尾相连的方式形成一组匹配链,乘累加运算阵列划分成组的原则是看用多少行乘累加运算阵列能存放一行模板图,那么就将这几行乘累加运算阵列划为一组,同时使能该组中最后一行阵列末尾的第二行缓存,用于缓存计算的中间结果,而将第一行行缓存短接不用,这样可以将乘累加运算阵列分成若干组匹配链;每一组内部是一行乘累加运算阵列或者多行乘累加运算阵列首尾相连,且每一组的末尾都对应有可用的第二行缓存,用于组与组之间中间结果的延时缓存。
2)模板图预加载:
模板图预加载时由乘累加运算阵列最后一个乘累加运算单元(最后一行最右边的乘累加运算单元)的级联输入操作数Ain端逐级串行加载,计算过程中模板图始终保存在级联寄存器A中。
3)流水计算:
计算过程中由并发输入操作数端加载参考图,设置RSOEn=‘0’,LoopEn=‘0’,计算的累加结果会在每一组匹配链中逐级传递下去,当结果传递到组与组之间的连接处时,需要经过预先设定的延时才能传递到下一组的前级输入端口,这个预先设定的延时需要根据参考图行长度、模板图行长度、级联规模来设置。缓冲期间将数据写入下一组匹配链末尾的第二行缓存(上面一行的第二行缓存),当数据延时到的时候再从其中读出,输入下一组匹配链的进位输入端。当前循环所需加载的参考图的起点,按照当前循环所加载的模板图的起点来确定。流水线建立后能够在乘累加运算阵列的输出端每拍输出一个结果。
表1进位乘累加模式M和R的变化情况
二、自累加模式工作流程:
当编程使模式配置LoopEn=‘1’时,整个乘累加运算阵列形成自累加计算模式,在该模式下每次循环都能计算出最终结果,全部结果需要一次或者多次循环方能计算完成。
其具体步骤如下:
1)阵列组织:
在自累加计算模式下乘累加运算阵列按照结果矩阵的行长度进行组织,组织时可以采用一行乘累加运算阵列或者多行乘累加运算阵列首尾相连的方式形成一组匹配链,乘累加运算阵列划分成组的原则是看用多少行乘累加运算阵列能完成结果矩阵中一行结果的计算,那么就将这几行乘累加运算阵列划为一组,同时使能该组中最后一行阵列末尾的第一行缓存,而将第二行缓存短接不用,这样可以将乘累加运算阵列分成若干组匹配链,每一组内部是一行乘累加运算阵列或者多行乘累加运算阵列的首尾相连,且每一组末尾都对应有可用的第一行缓存,用于组与组之间参考图的延时缓存。
2)参考图预加载:
参考图预加载时由阵列最后一个乘累加运算单元(最后一行最右边的乘累加运算单元的)的级联输入操作数Ain端逐级串行加载,加载过程中从每一组匹配链的第一个乘累加运算单元移除的参考图数据写入下一组匹配链末尾的第一行缓存(上面一行的第一行缓存)中,缓冲时间到时再次读出进入该组匹配链中继续往前逐级移动,缓冲时间按级联规模、参考图行长度设置。计算过程中参考图继续加载。
3)并发计算:
计算过程中参考图需要继续加载,模板图由并发输入操作数端加载。设置RSOEn=‘0’,LoopEn=‘1’,计算的累加结果会保存在每个乘累加运算单元的寄存器R中。
4)结果输出:
当整个模板图都读取一遍后,本次循环结束,计算的结果为乘累加最终结果,此时设置RSOEn=‘1’,LoopEn=‘0’,结果以流水方式输出,然后再按照上次加载参考图的结束点进行乘累加运算阵列构造,进入下一个循环,计算剩下的结果。
同样以模板图 参考图为例,第一次循环参考图预加载结束时,级联寄存器 并发寄存器 计算时同时加载模板图和参考图,乘法寄存器M和寄存器R的变化情况如表2所示。
表2自累加模式M和R的变化情况
Claims (10)
1.一种可配置的乘累加运算单元,其特征在于:包括用于接收并存储级联输入操作数(Ain)和并发输入操作数(Bin)的操作数寄存级、用于使操作数寄存级中储存的级联输入操作数(Ain)和并发输入操作数(Bin)相乘的乘法级、以及用于使乘法级的运算结果与该乘累加运算单元前一拍的运算结果或上一级乘累加运算单元的运算结果相加的加法级,加法级的运算结果通过进位输出操作数(Cout)向下一级乘累加运算单元输出;加法级还接收能够将运算模式调整为进位累加模式或自累加模式的模式配置(LoopEn)、以及用于控制输出最终运算结果的结果输出使能(RSOEn);加法级内设有用于存储运算结果的寄存器(R),在进位累加模式中,上一级乘累加运算单元的运算结果通过进位输入操作数(Cin)输入到加法级中;操作数寄存级还向下一级乘累加运算单元输出级联输出操作数(Aout)。
2.根据权利要求1所述的可配置的乘累加运算单元,其特征在于:所述的操作数寄存级内设有级联寄存器(A)、并发寄存器(B)和第一级寄存器(D);操作数寄存级同时接收级联输入操作数(Ain)和级联输入操作数使能(AEn),使级联输入操作数(Ain)存入级联寄存器(A)中;然后同时接收并发输入操作数(Bin)和并发输入操作数使能(BEn),使并发输入操作数(Bin)存入并发寄存器(B)中,并发输入操作数使能(BEn)经过第一级寄存器(D)延迟成为第一级使能,然后第一级使能、级联输入操作数(Ain)和并发输入操作数(Bin)同时到达乘法级;级联寄存器(A)中存入的级联输入操作数(Ain)延迟后作为级联输出操作数(Aout)向上一级乘累加运算单元输出,输出的级联输出操作数(Aout)作为上一级乘累加运算单元的级联输入操作数(Ain)。
3.根据权利要求2所述的可配置的乘累加运算单元,其特征在于:所述的乘法级内设有乘法器(F)和乘法寄存器(M);第一级使能使级联输入操作数(Ain)和并发输入操作数(Bin)进入乘法器(F)进行乘法运算,乘法级的运算结果存入乘法寄存器(M)中。
4.根据权利要求2或3所述的可配置的乘累加运算单元,其特征在于:所述的乘法级内还设有第二级寄存器(E),第一级使能经第二级寄存器(E)延迟后成为第二级使能;在自累加模式中,第二级使能和乘法寄存器(M)内存储的乘法级的运算结果同时到达加法级;而在进位累加模式中,仅有乘法寄存器(M)内存储的乘法级的运算结果到达加法级。
5.根据权利要求4所述的可配置的乘累加运算单元,其特征在于:所述的加法级内设有加法器(G)和进位使能寄存器(C);
在自累加模式中,寄存器(R)内存储有该乘累加运算单元前一拍的运算结果;第二级使能、乘法寄存器(M)内存储的乘法级的运算结果和寄存器(R)内存储的该乘累加运算单元前一拍的运算结果同时到达加法器(G),第二级使能使乘法寄存器(M)内存储的乘法级的运算结果和寄存器(R)内存储的该乘累加运算单元前一拍的运算结果进入加法器(G)中进行加法运算,加法运算的结果再存入寄存器(R)中,寄存器(R)中存储的运算结果在该乘累加单元下一拍的加法运算时,作为该乘累加运算单元前一拍的运算结果,继续参与该乘累加单元下一拍的加法运算;输出最终运算结果时,由结果输出使能(RSOEn)控制,使寄存器(R)中的运算结果作为进位输出操作数(Cout)向下一级乘累加运算单元输出,输出的进位输出操作数(Cout)作为下一级乘累加运算单元的进位输入操作数(Cin);
在进位累加模式中,加法级同时接收进位输入操作数使能(CEn)、进位输入操作数(Cin)和乘法寄存器(M)内存储的乘法级的运算结果,进位输入操作数使能(CEn)使乘法寄存器(M)内存储的乘法级的运算结果和上一级乘累加运算单元的运算结果通过进位输入操作数(Cin)同时进入加法器(G)中进行加法运算,加法运算的结果存入寄存器(R)中,并作为进位输出操作数(Cout)向下一级乘累加运算单元输出,同时进位输入操作数使能(CEn)经进位使能寄存器(C)延迟后再作为进位输出操作数使能(CoEn)向下一级乘累加运算单元输出,且进位输出操作数(Cout)和进位输出操作数使能(CoEn)同时输出,输出的进位输出操作数(Cout)作为下一级乘累加运算单元的进位输入操作数(Cin),输出的进位输出操作数使能(CoEn)作为下一级乘累加运算单元的进位输入操作数使能(CEn)。
6.根据权利要求5所述的可配置的乘累加运算单元,其特征在于:所述的加法级内设有第一多路选择器(H)和第二多路选择器(I),模式配置(LoopEn)通过控制第一多路选择器(H)和第二多路选择器(I)将运算模式调整为进位累加模式或自累加模式。
7.根据权利要求6所述的可配置的乘累加运算单元,其特征在于:在自累加模式中,模式配置(LoopEn)控制第一多路选择器(H),使第二级使能到达加法器(G),断开进位输入操作数使能(CEn)到达加法器(G)的路径;同时模式配置(LoopEn)控制第二多路选择器(I),使寄存器(R)内存储的上一级的乘累加运算单元的运算结果到达加法器(G),断开进位输入操作数(Cin)到达加法器(G)的路径;
在进位累加模式中,模式配置(LoopEn)控制第一多路选择器(H),使进位输入操作数使能(CEn)到达加法器(G),断开第二级使能到达加法器(G)的路径;同时模式配置(LoopEn)控制第二多路选择器(I),使进位输入操作数(Cin)到达加法器(G),断开寄存器(R)内存储的该乘累加运算单元前一拍的运算结果到达加法器(G)的路径。
8.根据权利要求7所述的可配置的乘累加运算单元,其特征在于:所述的加法级内还设有第三多路选择器(J),加法器的运算结果通过第三多路选择器(J)到达寄存器(R)。
9.根据权利要求8所述的可配置的乘累加运算单元,其特征在于:在自累加模式中输出最终运算结果时,模式配置(LoopEn)控制第二多路选择器(I),断开寄存器(R)内存储的运算结果到达加法器(G)的路径,使进位输入操作数(Cin)通过第二多路选择器(I);同时结果输出使能(RSOEn)控制第三多路选择器(J),断开加法器的运算结果到达寄存器(R)的路径,使通过第二多路选择器(I)的进位输入操作数(Cin)再通过第三多路选择器(J)到达寄存器(R)。
10.根据权利要求5-9中任意一项所述的可配置的乘累加运算单元构成的乘累加运算阵列,其特征在于:其由多个可配置的乘累加运算单元构成,且能够根据运算量的大小调整构成该乘累加运算阵列的乘累加运算单元的数量;在该乘累加运算阵列中,所有乘累加运算单元的级联输入操作数使能(AEn)连接在一起,所有乘累加运算单元的并发输入操作数(Bin)连接在一起,所有乘累加运算单元的并发输入操作数使能(BEn)连接在一起,所有乘累加运算单元的模式配置(LoopEn)连接在一起,所有乘累加运算单元的结果输出使能(RSOEn)连接在一起;在该乘累加运算阵列的每行的末尾配置与该行最后一个乘累加运算单元的级联输入操作数(Ain)相连的第一行缓存(Buf-1),及与该行最后一个乘累加运算单元的进位输出操作数(Cout)相连的第二行缓存(Buf-2),且该行第一个乘累加运算单元的级联输出操作数(Aout)与上一行的第一行缓存(Buf-1)相连,该行第一个乘累加运算单元的进位输入操作数(Cin)与上一行的第二行缓存(Buf-2)相连。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310632691.2A CN103677739B (zh) | 2013-11-28 | 2013-11-28 | 一种可配置的乘累加运算单元及其构成的乘累加运算阵列 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310632691.2A CN103677739B (zh) | 2013-11-28 | 2013-11-28 | 一种可配置的乘累加运算单元及其构成的乘累加运算阵列 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN103677739A true CN103677739A (zh) | 2014-03-26 |
CN103677739B CN103677739B (zh) | 2016-08-17 |
Family
ID=50315421
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201310632691.2A Active CN103677739B (zh) | 2013-11-28 | 2013-11-28 | 一种可配置的乘累加运算单元及其构成的乘累加运算阵列 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN103677739B (zh) |
Cited By (13)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104407836A (zh) * | 2014-10-14 | 2015-03-11 | 中国航天科技集团公司第九研究院第七七一研究所 | 利用定点乘法器进行级联乘累加运算的装置和方法 |
CN105224282A (zh) * | 2015-11-06 | 2016-01-06 | 天津津航计算技术研究所 | 一种基于自适应控制电路的积相关算法实现*** |
CN106325812A (zh) * | 2015-06-15 | 2017-01-11 | 华为技术有限公司 | 一种针对乘累加运算的处理方法及装置 |
CN106355246A (zh) * | 2015-10-08 | 2017-01-25 | 上海兆芯集成电路有限公司 | 三配置神经网络单元 |
CN106951962A (zh) * | 2017-03-22 | 2017-07-14 | 北京地平线信息技术有限公司 | 用于神经网络的复合运算单元、方法和电子设备 |
CN108089839A (zh) * | 2017-10-11 | 2018-05-29 | 南开大学 | 一种基于fpga实现互相关运算的方法 |
CN108446096A (zh) * | 2018-03-21 | 2018-08-24 | 杭州中天微***有限公司 | 数据计算*** |
CN109634556A (zh) * | 2018-11-06 | 2019-04-16 | 海南大学 | 一种乘累加器及累加输出方法 |
CN110135554A (zh) * | 2019-03-25 | 2019-08-16 | 电子科技大学 | 一种基于fpga的卷积神经网络硬件加速架构 |
CN110187865A (zh) * | 2019-05-15 | 2019-08-30 | 中科亿海微电子科技(苏州)有限公司 | 全流水高吞吐率累加器及其数据处理方法 |
CN110442323A (zh) * | 2019-08-09 | 2019-11-12 | 复旦大学 | 进行浮点数或定点数乘加运算的架构和方法 |
CN113220268A (zh) * | 2021-06-11 | 2021-08-06 | 上海交通大学 | 光电混合乘累加计算结构 |
CN117234458A (zh) * | 2023-11-09 | 2023-12-15 | 深圳大普微电子股份有限公司 | 乘法阵列、数据处理方法、处理终端及存储介质 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1200821A (zh) * | 1995-08-31 | 1998-12-02 | 英特尔公司 | 在分组数据上执行乘-加运算的装置 |
CN1632740A (zh) * | 2004-11-19 | 2005-06-29 | 浙江大学 | 乘累加装置 |
WO2007133914A1 (en) * | 2006-05-10 | 2007-11-22 | Qualcomm Incorporated | Mode-based multiply-add processor for denormal operands |
CN101082860A (zh) * | 2007-07-03 | 2007-12-05 | 浙江大学 | 一种乘累加装置 |
-
2013
- 2013-11-28 CN CN201310632691.2A patent/CN103677739B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1200821A (zh) * | 1995-08-31 | 1998-12-02 | 英特尔公司 | 在分组数据上执行乘-加运算的装置 |
CN1632740A (zh) * | 2004-11-19 | 2005-06-29 | 浙江大学 | 乘累加装置 |
WO2007133914A1 (en) * | 2006-05-10 | 2007-11-22 | Qualcomm Incorporated | Mode-based multiply-add processor for denormal operands |
CN101082860A (zh) * | 2007-07-03 | 2007-12-05 | 浙江大学 | 一种乘累加装置 |
Cited By (26)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104407836B (zh) * | 2014-10-14 | 2017-05-31 | 中国航天科技集团公司第九研究院第七七一研究所 | 利用定点乘法器进行级联乘累加运算的装置和方法 |
CN104407836A (zh) * | 2014-10-14 | 2015-03-11 | 中国航天科技集团公司第九研究院第七七一研究所 | 利用定点乘法器进行级联乘累加运算的装置和方法 |
CN106325812A (zh) * | 2015-06-15 | 2017-01-11 | 华为技术有限公司 | 一种针对乘累加运算的处理方法及装置 |
CN106325812B (zh) * | 2015-06-15 | 2019-03-08 | 华为技术有限公司 | 一种针对乘累加运算的处理方法及装置 |
CN106355246B (zh) * | 2015-10-08 | 2019-02-15 | 上海兆芯集成电路有限公司 | 三配置神经网络单元 |
CN106355246A (zh) * | 2015-10-08 | 2017-01-25 | 上海兆芯集成电路有限公司 | 三配置神经网络单元 |
CN106503797A (zh) * | 2015-10-08 | 2017-03-15 | 上海兆芯集成电路有限公司 | 具有神经存储器的神经网络单元以及集体将接收自神经存储器的数据列进行移位的神经处理单元阵列 |
CN106503797B (zh) * | 2015-10-08 | 2019-03-15 | 上海兆芯集成电路有限公司 | 具有神经存储器的神经网络单元以及集体将接收自神经存储器的数据列进行移位的神经处理单元阵列 |
CN105224282A (zh) * | 2015-11-06 | 2016-01-06 | 天津津航计算技术研究所 | 一种基于自适应控制电路的积相关算法实现*** |
CN105224282B (zh) * | 2015-11-06 | 2018-02-06 | 天津津航计算技术研究所 | 一种基于自适应控制电路的积相关算法实现*** |
CN106951962A (zh) * | 2017-03-22 | 2017-07-14 | 北京地平线信息技术有限公司 | 用于神经网络的复合运算单元、方法和电子设备 |
CN106951962B (zh) * | 2017-03-22 | 2020-09-01 | 南京地平线机器人技术有限公司 | 用于神经网络的复合运算单元、方法和电子设备 |
CN108089839A (zh) * | 2017-10-11 | 2018-05-29 | 南开大学 | 一种基于fpga实现互相关运算的方法 |
US11243771B2 (en) | 2018-03-21 | 2022-02-08 | C-Sky Microsystems Co., Ltd. | Data computing system |
CN108446096A (zh) * | 2018-03-21 | 2018-08-24 | 杭州中天微***有限公司 | 数据计算*** |
US11972262B2 (en) | 2018-03-21 | 2024-04-30 | C-Sky Microsystems Co., Ltd. | Data computing system |
CN109634556A (zh) * | 2018-11-06 | 2019-04-16 | 海南大学 | 一种乘累加器及累加输出方法 |
CN109634556B (zh) * | 2018-11-06 | 2021-04-23 | 极芯通讯技术(南京)有限公司 | 一种乘累加器及累加输出方法 |
CN110135554A (zh) * | 2019-03-25 | 2019-08-16 | 电子科技大学 | 一种基于fpga的卷积神经网络硬件加速架构 |
CN110187865A (zh) * | 2019-05-15 | 2019-08-30 | 中科亿海微电子科技(苏州)有限公司 | 全流水高吞吐率累加器及其数据处理方法 |
CN110187865B (zh) * | 2019-05-15 | 2023-06-30 | 中科亿海微电子科技(苏州)有限公司 | 全流水高吞吐率累加器及其数据处理方法 |
CN110442323A (zh) * | 2019-08-09 | 2019-11-12 | 复旦大学 | 进行浮点数或定点数乘加运算的架构和方法 |
CN110442323B (zh) * | 2019-08-09 | 2023-06-23 | 复旦大学 | 进行浮点数或定点数乘加运算的装置和方法 |
CN113220268A (zh) * | 2021-06-11 | 2021-08-06 | 上海交通大学 | 光电混合乘累加计算结构 |
CN117234458A (zh) * | 2023-11-09 | 2023-12-15 | 深圳大普微电子股份有限公司 | 乘法阵列、数据处理方法、处理终端及存储介质 |
CN117234458B (zh) * | 2023-11-09 | 2024-02-23 | 深圳大普微电子股份有限公司 | 乘法阵列、数据处理方法、处理终端及存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN103677739B (zh) | 2016-08-17 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN103677739A (zh) | 一种可配置的乘累加运算单元及其构成的乘累加运算阵列 | |
KR101781057B1 (ko) | 실행 유닛들과 벡터 데이터 메모리 사이에 병합 회로를 갖는 벡터 프로세싱 엔진, 및 관련된 방법 | |
CN104899182B (zh) | 一种支持可变分块的矩阵乘加速方法 | |
CN108564168A (zh) | 一种对支持多精度卷积神经网络处理器的设计方法 | |
CN100449522C (zh) | 基于多fpga的矩阵乘法并行计算*** | |
CN106203621A (zh) | 用于卷积神经网络计算的处理器 | |
CN108537331A (zh) | 一种基于异步逻辑的可重构卷积神经网络加速电路 | |
KR20160085337A (ko) | 필터 벡터 프로세싱 연산들을 위해 탭핑-지연 라인을 이용하는 벡터 프로세싱 엔진, 및 관련된 벡터 프로세서 시스템들 및 방법들 | |
CN103970720B (zh) | 基于大规模粗粒度嵌入式可重构***及其处理方法 | |
KR20160085335A (ko) | 벡터 데이터 메모리와 실행 유닛들 사이의 데이터 흐름 경로들에서 재정렬 회로를 이용하는 벡터 프로세싱 엔진, 및 관련된 방법 | |
KR20160084460A (ko) | 상관 벡터 프로세싱 연산들을 위해 탭핑-지연 라인을 이용하는 벡터 프로세싱 엔진, 및 관련된 벡터 프로세서 시스템들 및 방법들 | |
KR20160085336A (ko) | 실행 유닛들과 벡터 데이터 메모리 사이의 데이터 흐름 경로들에서 역확산 회로를 이용하는 벡터 프로세싱 엔진, 및 관련된 방법 | |
CN105912501A (zh) | 一种基于大规模粗粒度可重构处理器的sm4-128加密算法实现方法及*** | |
CN102122275A (zh) | 一种可配置处理器 | |
CN103984560A (zh) | 基于大规模粗粒度嵌入式可重构***及其处理方法 | |
CN107544942A (zh) | 一种快速傅里叶变换的vlsi设计方法 | |
CN109271138A (zh) | 一种适用于大维度矩阵乘的链式乘法结构 | |
CN106294278B (zh) | 用于动态可重构阵列计算***的自适硬件预配置控制器 | |
CN107590085A (zh) | 一种具有多级缓存的动态可重构阵列数据通路及其控制方法 | |
CN101847137B (zh) | 一种实现基2fft计算的fft处理器 | |
CN102214158B (zh) | 一种全互联路由结构动态可重构处理器 | |
CN110135565A (zh) | 针对神经网络算法在集成电路上实现性能的评估*** | |
CN101604306A (zh) | 基于fpga的列选主元lu分解方法 | |
CN109472734A (zh) | 一种基于fpga的目标检测网络及其实现方法 | |
CN103761072A (zh) | 一种粗粒度可重构层次化的阵列寄存器文件结构 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant |