第二章 高速乘法器

                                     第二章   乘法器

           有关Booth算法,很多资料介绍;我也没仔细研究过;这里就不多说了。APO支持32位有符号数乘法,最高位是符号位,尾数是31位。无符号数乘法支持到31位。APO支持单精度浮点数、双精度浮点数乘法。APO中,符号位、浮点对阶等总是单独逻辑电路实现;乘法器只是解决尾数相乘部分。


1、APO 编码


         2个32位尾数(最高位为0)A,B相乘。A是被乘数,B是乘数。APO编解码单元对乘数B是2位一组同时扫描产生16个部分积。当BiBi-1(i =1--31)的2位数是00,选中0为部分积;01,选中A为部分积;10,选中2A为部分积;11,是3 =4-1,所以选中-A为部分积,但更高的2位数需加1。乘数B的最高2位只可能是01、10、00;所以其对应部分积为正数。APO编解码单元将32位乘数B对应的原本32个部分积通过加1编码、4选1解码压缩成16个部分积。加1编码:8位一组,输出为M。


M0 = B0 + C0, M1 = B1 + C1;C1 = C0&B0;

C2 = (C0|B0)&B1 = !(!(C0&B1)& !(B0&B1));


M2 = B2 + C2, M3 = B3 + C3;
C3 = (C0|B0)&B1&B2 = !(!(C0&B1&B2) &!(B0&B1&B2))
C4 = (C2|B2)&B3 = !(!(C0&B1&B3) &!(B0&B1&B3) & !(B2&B3))
如果B2、B3 = 1,C2 = 0;那么 C3 = 0, M2M3 = 11, C4 = 1。
如果C2、B3 = 1,B2 = 0;那么 C3 = 0, M2M3 = 11, C4 = 1。
如果B2、B3 = 1,C2 = 1;那么 C3 = 1, M2M3 = 00, C4 = 1。

只要 B3 = 0, 那么 C4 = 0。


M4 = B4 + C4, M5 = B5 + C5;
C5 = !(!(C0&B1&B3&B4)&!(B0&B1&B3&B4)& !(B2&B3&B4));
C6 = (C4|B4)&B5

   =!(!(C0&B1&B3&B5)& !(B0&B1&B3&B5)&!(B2&B3&B5)& !(B4&B5));


M6 = B6 + C6, M7 = B7 + C7;
C7 =
!(!(C0&B1&B3&B5&B6)&!(B0&B1&B3&B5&B6)&!(B2&B3&B5&B6)& !(B4&B5&B6))


C0 = 0;

C6 = !(!(B0&B1&B3&B5) & !(B2&B3&B5) &!(B4&B5));
C8 = (C6|B6)&B7 =
!(!(B0&B1&B3&B5&B7) &!(B2&B3&B5&B7) & !(B4&B5&B7) &!(B6&B7));


C0 = 1;

C6 = !(!(B1&B3&B5) & !(B0&B1&B3&B5) &!(B2&B3&B5) & !(B4&B5));
C8 = (C6|B6)&B7 =

!(!(B1&B3&B5&B7) & !(B2&B3&B5&B7) &!(B4&B5&B7) & !(B6&B7));



           所以,8位乘数的进位链需2级门延时;16位乘数的进位链采用组内(8位)超前进位方式,组间为选择进位方式。这样,因每一个组是并行运算;产生C8需2级门延时;选择进位需2级门延时。产生编码结果与进位共需4级门延时,还需考虑解码4选1电路的3级门延时;所以16位乘数总共需7级门延时。32位乘数需使用流水线技术,第一级低16位乘数;第二级高16位乘数。APO编解码单元将32位乘数压缩产生16个部分积,分为高低8个部分积。这样,原先需基于4-2压缩器的第一级4个压缩单元将部分积压缩成Carry、Sum形式的两行部分积;使用流水线,可以减少一半的4-2 压缩器,只是2套。APO编解码单元与这2套4-2压缩器就为第一级流水部件。在第二个时钟的上升沿存入寄存器L1;同时高16位乘数开始第一级。假设一个门延时为19ps;那么,第一级是7+6=13级门延时=247ps;时钟周期是250ps。之后,在第二个时钟的上升沿后,第二级1个压缩单元将前面的4行部分积数据再压缩成Carry、Sum形式的两行部分积,在第三个时钟的上升沿存入寄存器L2。之后;在第三个时钟的上升沿后,第三级1个压缩单元将前面的2组4行部分积数据(一组来自L2,另一组刚形成)再次压缩成Carry、Sum形式的两行部分积共1组2行数据。该级的门延时为2级4-2压缩器的12级门延时=228ps。在第四个时钟的上升沿存入寄存器L3。最后用64位超前进位加法器(CLA)完成最终两行部分积的快速求和结果;并在第五个时钟的上升沿回存到乘数B、被乘数A的位置或进入下一个乘加流水部件。所以,一个指令周期,可计算2对32位数的乘法。总门数应该不到4000门。实际上,还需考虑4-2压缩器、流水部件与除法、开方运算复用;减少总的逻辑门数。

 第二章 高速乘法器_第1张图片

            除法器的设计是最累的,我大约花了7天7夜。基16的32位、64位除法运算总算完成,32位除法速度跟乘法运算一样2G/S。还要考虑开方运算,及乘法运算的逻辑门共享等;估计会在更后面的章节介绍。实现32位的算术运算等的流水线;在这称为一根管线。实现双精度浮点运算则需要2根管线。一根管道包含8条管线,流处理器总共有256条管道。所以,一个流处理器的速度:
256*8*2G = 4T FLOPS/S。



你可能感兴趣的:(智能电脑)