发明内容
本发明的目的是针对现有技术的缺陷,提供了一种基于FPGA芯片的乘法器,该乘法器可以利用FPGA芯片中的加法进位链来实现乘法的功能。
为实现上述目的,本发明提供了一种基于FPGA芯片的乘法器,该乘法器包括:
部分积产生器,由第一查找表实现,用于对乘数和被乘数中每一位分别进行与操作,获得n项部分积数据,所述乘数包括m位数据,所述被乘数包括n位数据,所述n项部分积数据中各项均包括m位数据,其中,所述第一查找表根据乘数和被乘数中每一位分别进行与操作时,和所述被乘数相与的数据的位置而选定,使前述对乘数和被乘数中每一位分别进行与操作的所述第一查找表彼此相对移位,使得n项部分积数据彼此实现移位;
累加器,由第二查找表实现,用于实现对所述n项部分积数据的累加处理,获得求和数据,所述求和数据包括m+n位数据。
在一种可能的实现方式,当所述乘法器处理的乘数和被乘数具有符号位时,所述部分积产生器还用于对所述获得的n项部分积数据中第1、2、...、n-1项部分积数据的第n位进行取反操作,同时对第n项部分积数据的第1、2、...、n-1位进行取反操作。
在一种可能的实现方式中,所述累加器包括第三查找表,用于实现对所述n项部分积数据的累加处理后的进位处理。
在一种可能的实现方式中,用最优二叉树来构建实现对所述n项部分积数据的累加处理的累加器。
在一种可能的实现方式中,所述第一查找表对乘数的第i位和被乘数的第j位进行与操作而获得一项部分积数据中的一位,所述第二查找表输入乘数的第I位和被乘数的第J位以及所述一项部分积数据中的一位,对乘数的第I位和被乘数的第J位执行与操作而获得另一项部分积数据中的一位,对所述一项部分积数据中的一位和所述另一项部分积数据中的一位执行异或运算,将运算结果输入到多路选择器和逻辑电路中,由所述多路选择器向高位数据进位,由所述逻辑电路输出所述两项部分积数据中两位的第一累加和,其中,i,j,I和J均为自然数,i,I≤m,j,J≤n。
在一种可能的实现方式中,所述第二查找表输入乘数的第t位和被乘数的第T位以及两项部分积数据中两位的第一累加和,对乘数的第t位和被乘数的第T位进行与操作而获得另一项部分积数据中的一位,对所述第一累加和和所述另一项部分积数据中的一位执行异或运算,将运算结果输入到多路选择器和逻辑电路中,由所述多路选择器向高位数据进位,由所述逻辑电路输出所述三项部分积数据中三位的第二累加和,其中,t和T均为自然数,t≤m,T≤n。
在一种可能的实现方式中,所述累加器还包括第四查找表;所述第四查找表输入两项部分积数据中两位的第三累加和和另两项部分积数据中两位的第四累加和,对所述第三累加和和所述第四累加和执行异或运算,将运算结果输入到多路选择器和逻辑电路中,由所述多路选择器向高位数据进位,由所述逻辑电路输出所述四项部分积数据中四位的第五累加和。
在一种可能的实现方式中,所述部分积产生器中的所述第一查找表和所述累加器中的所述第二查找表部分合并为同一个查找表。
在一种可能的实现方式中,所述累加器还用于:对所述获得的求和数据和一个常数项做累加处理。
本发明的基于FPGA芯片的乘法器,在对乘数和被乘数进行乘法运算时,其中,乘数包括m位,被乘数包括n位,且m>=n,通过由查找表实现的部分积产生器产生n项部分积数据,通过基于最优二叉树构建的累加器实现该n项部分积数据的累加,从而保证了n项部分积数据的串行加法次数不超过log2 n次,提高了整个FPGA芯片的运行效率。
具体实施方式
下面通过附图和实施例,对本发明的技术方案做进一步的详细描述。
图1为本发明实施例一提供的基于FPGA芯片的乘法器,如图1所示,该基于FPGA芯片的乘法器10包括部分积产生器101和累加器102。
部分积产生器101,由第一查找表实现,用于对乘数和被乘数中每一位分别进行与操作,获得n项部分积数据,所述乘数包括m位数据,所述被乘数包括n位数据,所述n项部分积数据中各项均包括m位数据,其中,所述第一查找表根据乘数和被乘数中每一位分别进行与操作时,和所述被乘数相与的数据的位置而选定,使前述对乘数和被乘数中每一位分别进行与操作的所述第一查找表彼此相对移位,使得n项部分积数据彼此实现移位。
具体地,假如乘数包括m位数据,表示为A[0]、A[1]、...、A[m-1],被乘数包括n位数据,表示为B[0]、B[1]、...、B[n-1],将乘数和被乘数的每一位分别进行与操作,获得n项部分积数据;需要说明的是,此处m>=n,当m<n的时候,需要将乘数与被乘数进行交换,这样才能保证部分积的数量尽量少,从而累加的次数尽量少,运行的效率才会高。将乘数和被乘数的每一位分别进行与操作具体实现为首先将A[0]、A[1]、...、A[m-1]分别与B[0]进行与操作,获得第一项部分积数据p0[0]、p0[1]、...、p0[m-1],该第一项部分积数据总共包括m位,然后将A[0]、A[1]、...、A[m-1]分别与B[1]进行与操作,获得第二项部分积数据p1[0]、p1[1]、...、p1[m-1],该第二项部分积数据总也包括m位,以此类推,直至将A[0]、A[1]、...、A[m-1]分别与B[n-1]进行与操作,获得第n项部分积数据pn-1[0]、pn-1[1]、...、pn-1[m-1]。需要说明的是,在上述过程中,乘数的第i位A[i-1]和被乘数的第j位B[j-1]的与操作通过第一查找表实现,其中,i,j均为自然数,且i≤m,j≤n,该第一查找表只实现两位数据相与的操作;在将乘数的第i位A[i-1]和被乘数的第j位B[j-1]进行相与的操作时,根据j去选定相应的第一查找表,从而使前述对乘数和被乘数中每一位分别进行与操作的第一查找表彼此相对移位,使得n项部分积数据彼此实现移位。
累加器102,由第二查找表实现,用于实现对所述n项部分积数据的累加处理,获得求和数据,所述求和数据包括m+n位数据。
为了提高运算效率,即在实现与操作的同时进行异或操作,将部分积产生器101中的第一查找表和累加器102中的第二查找表部分合并为同一个查找表。优选地,由第二查找表同时实现对输入的数据进行与操作和异或操作。图2为用查找表实现4*4无符号数累加处理示意图,图中,乘数包括4位数据,表示为A[0]、A[1]、...、A[3],被乘数包括4位数据,表示为B[0]、B[1]、...、B[3],第一列是乘数的各位与被乘数的第一位B[0]进行与操作,即从第一行开始依次选定四个第一查找表LUTAND即可,第二列是乘数的各位与被乘数的第二位B[1]进行与操作,由于是与被乘数的第二位进行与操作,且同时可与第一列的结果数据进行异或操作,所以从第二行开始依次选定四个第二查找表LUT4CA即可,依次类推,直至选定第四列的四个第二查找表LUT4CA。从图2中可以看出,上述选定的4列查找表彼此相对移位,使得四项部分积数据彼此实现移位;对该四项部分积数据做累加处理之后,即可获得求和数据p[0]、p[1]、...、p[7],该求和数据包括4+4=8位数据。
需要说明的是,当乘数和被乘数均为符号数时,部分积产生器101还用于对获得的n项部分积数据中第1、2、...、n-1项部分积数据的第n位进行取反操作,同时对第n项部分积数据的第1、2、...、n-1位进行取反操作;累加器102还用于对所述获得的求和数据和一个常数项做累加处理。具体为,在获得求和数据之后,当乘数和被乘数包括的数据位数相等时,即m=n时,累加器102还用于对该求和数据中的第m位、第2*m-1位分别和1做累加处理;当乘数和被乘数包括的数据位数不相等时,累加器102还用于对获得的求和数据中的第n-1位、第m-1位和第2*m-1位分别和1做累加处理。参见图2,在乘数A[0]、A[1]、...、A[3]和被乘数B[0]、B[1]、...、B[3]均为符号数时,通过LUTAND对A[3]与B[0]相与之后得到的第一项部分积数据的最高位p0[3]取反之后输入到相应的LUT4CA中,同样通过LUT4CA对A[3]与B[1]相与之后得到的第二项部分积数据的最高位p1[3]取反之后输入到相应的LUT4CA中,通过LUT4CA对A[3]与B[2]相与之后得到的第三项部分积数据的最高位p2[3]取反之后输入到相应的LUT4CA中;同时通过LUT4CA对A[2]与B[3]相与之后得到的第四项部分积数据的第3位p3[2]取反之后输出,通过LUT4CA对A[1]与B[3]相与之后得到的第四项部分积数据的第2位p3[1]取反之后输出,通过LUT4CA对A[0]与B[3]相与之后得到的第四项部分积数据的第1位p3[0]取反之后输出;在获得求和数据之后,因为m=n=4,所以需要对求和数据的第4位p[3]和第7位p[6]分别和1做累加处理。
优选地,累加器102还包括第三查找表,用于实现对所述n项部分积数据的累加处理后的进位处理。具体地,如图2所示,在第二查找表LUT4CA对乘数的最高位A[3]与被乘数除第一位之外的其他位B[1]、B[2]和B[3]相与之后,通过第三查找表LUT4C0实现向高位的进位。举例为,参见图3所示的用查找表实现进位处理的示意图,图中,在第二查找表LUT4CA对乘数的最高位A[3]与被乘数的最高位B[3]相与之后,向高位的进位co输入到XOR2中,第三查找表LUT4C0输出恒为0,将第三查找表的输出和向高位的进位co进行异或处理之后,即可输出向高位的进位co。
图4为本发明实施例二提供的基于FPGA芯片的乘法器,如图4所示,该基于FPGA芯片的乘法器40包括部分积产生器401和累加器402。部分积产生器401,由第一查找表实现,用于对乘数和被乘数中每一位分别进行与操作,获得n项部分积数据,所述乘数包括m位数据,所述被乘数包括n位数据,所述n项部分积数据中各项均包括m位数据,其中,所述第一查找表根据乘数和被乘数中每一位分别进行与操作时,和所述被乘数相与的数据的位置而选定,使前述对乘数和被乘数中每一位分别进行与操作的所述第一查找表彼此相对移位,使得n项部分积数据彼此实现移位。
需要说明的是,此处m>=n,当m<n的时候,需要将乘数与被乘数进行交换,这样才能保证部分积的数量尽量少,从而累加的次数尽量少,运行的效率才会高。
累加器402,由第二查找表和第四查找表实现,用于实现对所述n项部分积数据的累加处理,获得求和数据,所述求和数据包括m+n位数据。
第四查找表LUT4C实现对输入的两个数据的异或操作。优选地,用最优二叉树来构建实现对所述n项部分积数据的累加处理的累加器402。图5为用最优二叉树构建的累加器实现4*4无符号数累加处理的示意图,图5中,乘数包括4位数据,表示为A[0]、A[1]、...、A[3],被乘数包括4位数据,表示为B[0]、B[1]、...、B[3],将乘数和被乘数的每一位分别进行与操作,获得4项部分积数据,在对4项部分积数据做累加处理时,给定该4项部分积数据4个权值,举例为,该权值可以为1,根据给定的4个权值,将该4项部分积数据作为4个叶子节点构建最优二叉树,根据构建的最优二叉树,并且根据和被乘数相与的数据的位置而选定相应的4列查找表,该4列查找表既包括第一查找表LUTAND又包括第二查找表LUT4CA;将上述4项部分积数据通过选定的查找表实现两两累加运算,得到两个累加和,最后通过第四查找表LUT4C对得到的两个累加和进行累加。
需要说明的是,当乘数和被乘数均为符号数时,部分积产生器401还用于对获得的n项部分积数据中第1、2、...、n-1项部分积数据的第n位进行取反操作,同时对第n项部分积数据的第1、2、...、n-1位进行取反操作;累加器102还用于对所述获得的求和数据和一个常数项做累加处理。具体为,在获得求和数据之后,当乘数和被乘数包括的数据位数相等时,即m=n时,累加器102还用于对该求和数据中的第m位、第2*m-1位分别和1做累加处理;当乘数和被乘数包括的数据位数不相等时,累加器102还用于对获得的求和数据中的第n-1位、第m-1位和第2*m-1位分别和1做累加处理。参见图5,在乘数A[0]、A[1]、...、A[3]和被乘数B[0]、B[1]、...、B[3]均为符号数时,通过LUTAND对A[3]与B[0]相与之后得到的第一项部分积数据的最高位p0[3]取反之后输入到相应的LUT4CA中,同样通过LUT4CA对A[3]与B[1]相与之后得到的第二项部分积数据的最高位p1[3]取反之后输入到相应的LUT4C中,通过LUTAND对A[3]与B[2]相与之后得到的第三项部分积数据的最高位p2[3]取反之后输入到相应的LUT4CA中;同时通过LUT4CA对A[2]与B[3]相与之后得到的第四项部分积数据的第3位p3[2]取反之后再执行与其他数据的异或操作,通过LUT4CA对A[1]与B[3]相与之后得到的第四项部分积数据的第2位p3[1]取反之后再执行与其他数据的异或操作,通过LUT4CA对A[0]与B[3]相与之后得到的第四项部分积数据的第1位p3[0]取反之后再执行与其他数据的异或操作;在获得求和数据之后,因为m=n=4,所以需要对求和数据的第4位p[3]和第7位p[6]分别和1做累加处理。
优选地,累加器402还包括第三查找表,用于实现对所述n项部分积数据的累加处理后的进位处理。具体地,如图5所示,图中的累加运算只需要用到两个第三查找表,在第二查找表LUT4CA对乘数的最高位A[3]与被乘数的最高位B[3]相与之后,以及在第二查找表LUT4CA对乘数的最高位A[3]与被乘数的第2位B[1]相与之后,通过第三查找表LUT4C0实现向高位的进位。
为了便于理解累加器如何通过查找表实现累加运算,以下将对第一查找表、第二查找表和第三查找表实现数据运算的过程进行详细说明。
第一查找表对乘数的第i位和被乘数的第j位进行与操作而获得一项部分积数据中的一位,所述第二查找表输入乘数的第I位和被乘数的第J位以及所述一项部分积数据中的一位,对乘数的第I位和被乘数的第J位执行与操作而获得另一项部分积数据中的一位,对所述一项部分积数据中的一位和所述另一项部分积数据中的一位执行异或运算,将运算结果输入到多路选择器和逻辑电路中,由所述多路选择器向高位数据进位,由所述逻辑电路输出所述两项部分积数据中两位的第一累加和,其中,i,j,I和J均为自然数,i,I≤m,j,J≤n。举例为,参见图6所示的用查找表实现累加操作示意图之一,如图6所示,乘数包括4位数据,表示为A[0]、A[1]、...、A[3],被乘数包括4位数据,表示为B[0]、B[1]、...、B[3],第一查找表LUTAND对乘数的第2位A[1]和被乘数的第1位B[0]进行与操作而获得第1项部分积数据中的第2位,第二查找表LUT4CA输入乘数的第1位A[0]和被乘数的第2位B[1]以及上述求得的第1项部分积数据中的第2位,第二查找表LUT4CA首先对乘数的第1位A[0]和被乘数的第2位B[1]执行与操作而获得第2项部分积数据中的第1位,然后对第1项部分积数据中的第2位和第2项部分积数据中的第1位执行异或运算,将运算结果输入到多路选择器和两输入的异或门中,多路选择器中同时输入低位向该位的进位ci,并且输入乘数的第1位A[0],经处理之后输出该位向高位的进位co;上述两输入的异或门中同时也输入低位向该位的进位ci,两输入的异或门对ci和第二查找表输出的结果进行异或运算后输出第1项部分积数据中的第2位和第2项部分积数据中的第1位的第一累加和。
第二查找表输入乘数的第t位和被乘数的第T位以及两项部分积数据中两位的第一累加和,对乘数的第t位和被乘数的第T位进行与操作而获得另一项部分积数据中的一位,对所述两项部分积数据中两位的第一累加和和所述另一项部分积数据中的一位执行异或运算,将运算结果输入到多路选择器和逻辑电路中,由所述多路选择器向高位数据进位,由所述逻辑电路输出所述三项部分积数据中三位的第二累加和,其中,t和T均为自然数,t≤m,T≤n。举例为,参见图7所示的用查找表实现累加操作示意图之二,如图7所示,假如乘数包括3位数据,表示为A[0]、A[1]、A[2],被乘数包括3位数据,表示为B[0]、B[1]、B[2],第二查找表LUT4CA输入乘数的第1位和被乘数的第3位以及第1项部分积数据中第3位和第2项部分积数据中第2位的第一累加和,表示为S1,对乘数的第1位A[0]和被乘数的第3位B[2]进行与操作而获得第3项部分积数据中的第1位,对S1和第3项部分积数据中的第1位执行异或运算,将运算结果输入到多路选择器和两输入的异或门中,多路选择器中同时输入低位向该位的进位ci,并且输入乘数的第1位A[0],经处理之后输出该位向高位的进位co;上述两输入的异或门中同时也输入低位向该位的进位ci,两输入的异或门对ci和第二查找表输出的结果进行异或运算后输出S1与第3项部分积数据中的第1位的第二累加和。
第四查找表LUT4C输入两项部分积数据中两位的第三累加和和另两项部分积数据中两位的第四累加和,对所述第三累加和和所述第四累加和执行异或运算,将运算结果输入到多路选择器和逻辑电路中,由所述多路选择器向高位数据进位,由所述逻辑电路输出所述四项部分积数据中四位的累加和。举例为,参见图8所示的用查找表实现累加操作示意图之三,如图8所示,乘数包括4位数据,表示为A[0]、A[1]、...、A[3],被乘数包括4位数据,表示为B[0]、B[1]、...、B[3],第四查找表LUT4C输入第1项部分积数据中第4位和第2项部分积数据中第3位的第三累加和S3以及第3项部分积数据中第2位和第4项部分积数据中第1位的第四累加和S4,对S3和S4执行异或运算,将运算结果输入到多路选择器和两输入的异或门中,多路选择器中同时输入低位向该位的进位ci,并且输入S4,经处理之后输出该位向高位的进位co;上述两输入的异或门中同时也输入低位向该位的进位ci,两输入的异或门对ci和第二查找表输出的结果进行异或运算后输出S3和S4的第五累加和。
图9为本发明利用最优二叉树构建累加器的逻辑示意图,图9中,A、B、C和D分别表示通过部分积移位器处理后得到的4项部分积数据。该4项部分积数据产生3个加法,表示为A+B+C+D,分别为A、B、C和D赋予4个权值,举例为,4个权值均为1。将上述三个加法以树状结构表示,并通过最优二叉树的算法对这棵加法树进行深度上的平衡,就可以得到分别以A、B、C和D为叶子节点的最优二叉树,根据该最优二叉树计算上述加法运算的过程为:先计算A+B,再计算C+D,然后将两者计算得到的和做累加处理;或者先计算C+D,再计算A+B,然后将两者计算得到的和做累加处理。利用最优二叉树对加法运算进行平衡处理之后再做累加处理,可以保证整个加法运算的过程中串行加法次数不超过log2n次,其中n表示通过部分积移位器处理后得到的n项部分积数据,从而提高整个FPGA芯片的运行效率。
本发明的基于FPGA芯片的乘法器,通过由查找表实现的部分积产生器产生n项部分积数据,通过基于最优二叉树构建的累加器实现该n项部分积数据的累加,从而保证了n项部分积数据的串行加法次数不超过log2 n次,提高了整个FPGA芯片的运行效率。
专业人员应该还可以进一步意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、计算机软件或者二者的结合来实现,为了清楚地说明硬件和软件的可互换性,在上述说明中已经按照功能一般性地描述了各示例的组成及步骤。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本发明的范围。
结合本文中所公开的实施例描述的方法或算法的步骤可以用硬件、处理器执行的软件模块,或者二者的结合来实施。软件模块可以置于随机存储器(RAM)、内存、只读存储器(ROM)、电可编程ROM、电可擦除可编程ROM、寄存器、硬盘、可移动磁盘、CD-ROM、或技术领域内所公知的任意其它形式的存储介质中。
以上所述的具体实施方式,对本发明的目的、技术方案和有益效果进行了进一步详细说明,所应理解的是,以上所述仅为本发明的具体实施方式而已,并不用于限定本发明的保护范围,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。