64位加法器设计解析

六十四位全加器的设计一、实验目的:设计一个64位的全加器实现加法功能。

二、实验要求:用两种方法实现64位全加器。

第一种:用Sedi画出64位全加器电路图,并生成网表,然后进行功能验证,最后将电路图生成版图。

第二种:用VHDL语言写出64位全加器的程序表达式,并进行功能验证,最后将程序语言转换成电路图。

三、实验过程3、1分析一次画出64 位全加很有难度,但考虑到全加器的结构,我们可以用4个16位的全加器组成一个64位的加法器。

同样,一个16位的全加器可以由4个4位全加器组成,一个4位全加器可以由4个一位全加器组成。

一位全加器又可以由三个半加器或两个半加器与一个或门组成。

所以整个设计思路可以简化为:半加器→一位全加器→四位全加器→十六位全加器→六十四位全加器3、2功能设计与验证(画图法)3、2、1半加器设计半加器实现加法,输入A、B,输出C、S(C 为进位,S为本位);所以得出半加器的电路图为:半加器符号图:SS C CB B A A 半加器()()()与非门 或非门 非门 3 、2、2一位全加器设计一位全加器可由三个半加器组成电路图如下:A B C iSC 半加器A B CS半加器A B CS半加器A B CS一位全加器的电路图符号如下:SSC iC iCCBBAA全加器3、2、3四位全加器的设计四位全加器可由四个一位全加器组成,四位全加器电路图如下:B 0A 0CS 3S 2S 1S 0C iB 3A 3B 2A 2B 1A 1全加器AB CC i S全加器A B CC i S全加器AB C C iS全加器A B CC i S四位全加器符号图如下:S 3S 3S 2S 2S 1S 1S 0S 0C iC iCC B 3B 3B 2B 2B 1B 1B 0B 0A 3A 3A 2A 2A 1A 1A 0A 0四位全加网表输入如下: 1、添加工作电压; Vvdd vdd GND 52、添加模型文件;.include "D:\iceda\TannerPro9\TSpice7.0\models\ml2_125.md" 3、添加输入信号;VA0 A0 GND PULSE (0 5 0 5n 5n 50n 100n) VA1 A1 GND PULSE (0 5 0 5n 5n 100n 200n) VA2 A2 GND PULSE (0 5 0 5n 5n 150n 300n) VA3 A3 GND PULSE (0 5 0 5n 5n 120n 240n) VB0 B0 GND PULSE (0 5 0 5n 5n 50n 100n) VB1 B1 GND PULSE (0 5 0 5n 5n 100n 200n) VB2 B2 GND PULSE (0 5 0 5n 5n 150n 300n) VB3 B3 GND PULSE (0 5 0 5n 5n 120n 240n) VCi Ci GND PULSE (0 5 0 5n 5n 50n 100n) 4、添加参数设置; .param l=0.5u5、输出设置;.print tran v(A0) v(A1) v(A2) v(A3) v(B0) v(B1) v(B2) v(B3) v(Ci) v(S0) v(S1) v(S2) v(S3) v(C) 6、设置分析;.tran/op 1n 400n method=bdf 总网表如下.include "D:\iceda\TannerPro9\TSpice7.0\models\ml2_125.md" Vvdd vdd GND 5VA0 A0 GND PULSE (0 5 0 5n 5n 50n 100n) VA1 A1 GND PULSE (0 5 0 5n 5n 100n 200n) VA2 A2 GND PULSE (0 5 0 5n 5n 150n 300n) VA3 A3 GND PULSE (0 5 0 5n 5n 120n 240n) VB0 B0 GND PULSE (0 5 0 5n 5n 50n 100n) VB1 B1 GND PULSE (0 5 0 5n 5n 100n 200n) VB2 B2 GND PULSE (0 5 0 5n 5n 150n 300n) VB3 B3 GND PULSE (0 5 0 5n 5n 120n 240n) VCi Ci GND PULSE (0 5 0 5n 5n 50n 100n) .param l=0.5u.tran/op 1n 400n method=bdf.print tran v(A0) v(A1) v(A2) v(A3) v(B0) v(B1) v(B2) v(B3) v(Ci) v(S0) v(S1) v(S2) v(S3) v(C) (由于步骤相同,以此为例,后面网表添加均简写)仿真结果:(四位全加器仿真图)3、2、4十六位全加器的设计十六位全加器可由四个四位全加器组成,十六位全加器电路图如下:A0A 1A 2A3A4A 5A 6A7A 8A 9A 10A11A12A 13A 14A15B0B 1B 2B3B4B 5B 6B7B8B 9B 10B11B12B 13B 14B15Ci S0S 1S 2S3S4S 5S 6S7S8S 9S 10S11S12S 13S 14S15C四位全加A0A1A2A3B0B1B2B3C CiS0S1S2S3四位全加A0A1A2A3B0B1B2B3C CiS0S1S2S3四位全加A0A1A2A3B0B1B2B3C CiS0S1S2S3四位全加A0A1A2A3B0B1B2B3C CiS0S1S2S3十六位全加器符号图如下:S 15S 15S 14S 14S 13S 13S 12S 12S 11S 11S 10S 10S 9S 9S 8S 8S 7S 7S 6S 6S 5S 5S 4S 4S 3S 3S 2S 2S 1S 1S 0S 0C iC iCCB 15B 15B 14B 14B 13B 13B 12B 12B 11B 11B 10B 10B 9B 9B 8B 8B 7B 7B 6B 6B 5B 5B 4B 4B 3B 3B 2B 2B 1B 1B 0B 0A 15A 15A 14A 14A 13A 13A 12A 12A 11A 11A 10A 10A 9A 9A 8A 8A 7A 7A 6A 6A 5A 5A 4A 4A 3A 3A 2A 2A 1A 1A 0A 0十六位全加器网表输入: 仿真图如下:3、2、5 六十四位全加器的设计六十四全加器可由四个十六位全加器组成,六十四位全加器电路图如下:CA48A49A 50A51A52A 53A54A 55A56A 57A58A59A60A61A62A63B48B 49B50B 51B52B 53B54B 55B56B57B 58000A32A 33A34A35A 36A37A 38A39A 40A41A 42A43A44A45A46A47B32B33B 34B35B 36B37B 38B39B40B 41B42B43B44B45B46B470A16A17A18A 19A20A 21A22A 23A24A 25A26A27A28A29A30A31B16B 17B18B 19B20B 21B22B23B 24B25B 26B27B28B29B30B3100A0A1A2A3A4A5A6A7A8A9A 10A11A12A13A14A15B0B1B2B3B4B5B6B7B8B9B10B11B12B13B14B1500Ci 十六位全加器A0A1A2A3A4A5A6A7A8A9A10A11A12A13A14A15B0B1B2B3B4B5B6B7B8B9B10B11B12B13B14B15C CiS0S1S2S3S4S5S6S7S8S9S10S11S12S13S14S15十六位全加器A0A1A2A3A4A5A6A7A8A9A10A11A12A13A14A15B0B1B2B3B4B5B6B7B8B9B10B11B12B13B14B15CCiS0S1S2S3S4S5S6S7S8S9S10S11S12S13S14S15十六位全加器A0A1A2A3A4A5A6A7A8A9A10A11A12A13A14A15B0B1B2B3B4B5B6B7B8B9B10B11B12B13B14B15CCiS0S1S2S3S4S5S6S7S8S9S10S11S12S13S14S15十六位全加器A0A1A2A3A4A5A6A7A8A9A10A11A12A13A14A15B0B1B2B3B4B5B6B7B8B9B10B11B12B13B14B15CCiS0S1S2S3S4S5S6S7S8S9S10S11S12S13S14S15六十四位全加器符号图如下:S63S62S61S60S59S58S57S56S55S54S53S52S51S50S49S48S47S46S45S44S43S42S41S40S39S38S37S36S35S34S33S32S31S30S29S28S27S26S25S24S23S22S21S20S19S18S17S16S15S14S13S12S11S10S9S8S7S6S5S4S3S2S1S0CiC B63B62B61B60B59B58B57B56B55B54B53B52B51B50B49B48B47B46B45B44B43B42B41B39B40B38B37B36B35B34B33B32B31B30B29B28B27B26B25B24B23B22B21B20B19B18B17B16B15B14B13B12B11B10B9B8B7B6B5B4B3B2B1B0A63A62A61A60A59A58A57A56A55A54A53A52A51A50A49A48A47A46A45A44A43A42A41A40A39A38A37A36A35A33A34A32A31A30A29A28A27A26A25A24A23A22A21A20A19A18A17A16A15A14A13A12A11A10A9A8A7A6A5A4A3A2A1A0Ci 00000000000000C0000000网表添加如:六十四位全加器仿真图:六十四位全加器生成版图: 1、加压焊块将设计好的六十四位全加器的电路图例化进新的module 中,然后引用PAD 模块和端口。

六十四位加法器电路的每一个输入输出端都要加上输入输出压焊块,在库模块文件(d:\iceda\TannerPro9\Sedit8.1\tutorial\schematic\lights.tdb )中已经有绘制好的压焊块模块,主要包括PadGnd 、PadVdd 、IPAD 、OPAD 。

合集下载

高性能64位并行前缀加法器全定制设计_王仁平

高性能64位并行前缀加法器全定制设计_王仁平

第39卷第6期2011年12月福州大学学报(自然科学版)Journal of Fuzhou University(Natural Science Edition)Vol.39No.6Dec.2011DOI:CNKI:35-1117/N.20111220.1002.027文章编号:1000-2243(2011)06-0862-06高性能64位并行前缀加法器全定制设计王仁平,何明华,魏榕山,陈传东,戴惠明(福州大学物理与信息工程学院,福建福州350108)摘要:基于64位基4的Kogge-Stone树算法原理,采用多米诺动态逻辑、时钟延迟多米诺和传输管逻辑等技术来设计和优化并行前缀加法器的结构,达到减少了加法器各级门的延迟时间目的.为实现版图面积小、性能好,采用启发式欧拉路径算法来确定块进位产生信号电路结构,采用多输出多米诺逻辑来优化块进位传播信号,采用6管传输管逻辑的半加器.该加法器全定制设计采用SMIC0.18μm1P4M CMOS工艺,版图面积为0.1379mm2,在最坏情况下完成一次64位加法运算的时间为532.26ps.关键词:并行前缀加法器;基4点操作;多米诺逻辑;欧拉路径算法中图分类号:TN402文献标识码:AFull-custom design of high-performance64-bit Parall-Prefix adderWANG Ren-ping,HE Ming-hua,WEI Rong-shan,CHEN Chuan-dong,DAI Hui-ming (College of Physics and Information Engineering,Fuzhou University,Fuzhou,Fujian350108,China)Abstract:A parall-prefix adder based on64-bit radix-4Kogge-Stone tree algorithm principle isproposed in this paper.The architecture is optimized using domino dynamic logic,clock delayed domi-no and transmission pipes logic,which reduces the gate delay of each stage in the adder dramatically.In order to achieve small layout area and good performance,heuristic Euler algorithm is adopted to de-termine the block carry generation signals circuit structure,multi-output domino logic is adopted tooptimize the block carry propagate signals,and six transmission pipes logic is used to build a half-ad-der.Using SMIC0.18μm1P4M CMOS process for layout design,the adder’s area is0.1379mm2.In the worst case,the computation time is532.26ps.Keywords:parall-prefix adder;radix-4dot operation;dynamic logic;Euler algorithm;stick figure并行前缀加法器(PPA)是超前进位加法器的变种,由于具有速度和面积两方面的优势,被广泛应用于高性能微处理器设计中.在64位并行前缀加法器算法中,为进一步减少加法器的运算时间,人们提出多种变体算法[1-3],其中基4的Kogge-Stone树算法因其卓越的性能而成为目前64位及以上快速运算加法器最常用的实现结构之一.如今,运算速度超过GHz的64位微处理器已成为主流产品,对加法器的运算速度要求也越来越高,因此,采用动态逻辑门设计高性能的并行前缀加法器变得更加广泛[4-6].本研究设计的高性能64位并行前缀加法器应用于64位微处理器,在基4的Kogge-Stone树算法基础上,采用多米诺动态逻辑、时钟延迟多米诺和传输管逻辑等技术来优化加法器结构,采用启发式欧拉路径算法、逻辑图、棍棒图、多输出多米诺逻辑、6管传输管XOR逻辑等方法来减少版图面积,提高性能.采用SMIC0.18μm1P4M CMOS工艺进行设计,整个加法器的版图面积为0.1379mm2,仿真时在最坏情况下完成一次64位加法运算时间为532.26ps.1加法器算法分析和电路结构1.164位基4的Kogge-Stone树算法并行前缀运算基本思想:先计算每位的进位产生信号G i和进位传播信号P i,再通过前缀运算单元计收稿日期:2011-04-01通讯作者:王仁平(1972-),高级讲师,E-mail:rpwang@fzu.edu.cn基金项目:福建省科技重大专项基金资助项目(2009HZ010002);福建省教育厅科研资助项目(JA09001);福建省自然科学基金资助项目(2009J05143)第6期王仁平,等:高性能64位并行前缀加法器全定制设计算块进位产生信号G i :j 和块进位传播信号P i :j ,并将所有的前缀运算单元按照一定规律组织成递归的进位树,这样每一位的进位信号就可通过进位树的传递作用在运算结点中一步一步地计算出来.64位并行前缀加法器基于基4的Kogge -Stone 树算法如图1所示[7],图中用“□”表示用两个加数A i 、B i 来建立相应进位产生信号G i 和进位传播信号P i ,“○”表示基4的Kogge -Stone 树算法中的点操作来计算块进位产生信号G i :j 和块进位传播信号P i :j ,“◇”表示用两个加数A i 、B i 和前一位进位C o ,i -1来计算该位的和S i .这种算法计算块进位函数的最长时间是O (log N 4)级门延迟,其中N 是加法器位数,如计算其最高位的块进位函数G 63:0和P 63:0时间为3级门的延迟.图164位基4的Kogge -Stone 树算法Fig.1Arithmetic of 64-bit radix -4Kogge -Stone tree计算最高位的块进位产生函数G 63:0和块进位传播函数P 63:0,具体过程如下:第一级点操作输入在每相邻4位进行,如计算G 3:0和P 3:0的点操作如式(1)所示:(G 3:0,P 3:0)=(G 3,P 3)·(G 2,P 2)·(G 1,P 1)·(G 0,P 0)(1)第二级点操作输入在第一级输出基础上每隔4位进行,如计算G 15:0和P 15:0的点操作如式(2)所示:(G 15:0,P 15:0)=(G 15:12,P 15:12)·(G 11:8,P 11:8)·(G 7:4,P 7:4)·(G 3:0,P 3:0)(2)图2改进的64位基4的Kogge -Stone 树加法器结构Fig.2Modified adder structure of 64-bit radix -4Kogge -Stone tree第三级点操作输入在第二级输出基础上每隔16位进行,如计算G 63:0和P 63:0的点操作如式(3)所示:(G 63:0,P 63:0)=(G 63:48,P 63:48)·(G 47:32,P 47:32)·(G 31:16,P 31:16)(G 15:0,P 15:0)(3)当算出相应位的块进位产生函数G i :0和块进位传播函数P i :0,计算该位的进位输出如式(4)所示.若最低位进位C i ,0为0,则该位的进位输出C o ,i =G i :0,(C o ,i ,0)=(G i :0,P i :0)·(C i ,0,0)=(G i :0+P i :0C i ,0,0)(4)1.264位基4的Kogge -Stone 树加法器结构为缩短加法器运算时间和减少版图面积,设计了改进的64位基4的Kogge -Stone 树加法器结构如图2所示,进位产生信号G i 、进位传播信号P i 和进位输出信号C o ,i 采用动态逻辑实现、块进位产生信号G i :j 和块进位传播信号P i :j采用多米诺动态逻辑实现;为减少多米诺动态逻辑的时钟负载并提高下拉驱动能力,取消了下拉网络预充电,但由于预充电是“行波”推进,为避免存在短路电流,采用时钟延迟多米诺技术为各级多米诺动态逻辑提供时钟信号;半·368·福州大学学报(自然科学版)第39卷加器采用面积小且运算速度快的6管传输管逻辑实现.2主要模块设计和优化基4的Kogge -Stone 树算法64位并行前缀加法器模块包括:进位产生信号和进位传播信号电路、块进位产生信号和块进位传播信号电路、时钟延时多米诺、计算进位电路和求和电路.进位产生信号、进位传播信号和计算进位的动态逻辑电路设计相对简单,因此,重点对块进位产生信号电路设计、块进位传播信号电路设计、求和电路设计和时钟延时多米诺技术等进行研究.2.1块进位产生信号和块进位传播信号电路设计用基4点操作计算块进位产生函数G i :0和块进位传播函数P i :0,由于各基4点操作的电路结构一致,以实现块进位产生信号G 3:0和块进位传播信号P 3:0来进行研究.2.1.1块进位产生信号电路设计复合逻辑门版图要实现面积小且性能好的条件是物理连接的晶体管能通过扩散区进行重叠,使复合逻辑门可用连续的扩散区来实现(即一个器件的漏区也是下一个器件的源区),这样即可以减少版图面积,又无需导线和过孔进行连接,减少寄生参数.为达到复合逻辑门的版图能用连续扩散区实现,采用逻辑图基于欧拉路径算法得到复合逻辑门输入端的排列顺序,然后用棍棒图[8](不标尺寸器件、只注重器件相对位置和连接关系的象征性符号)研究版图绘制策略,得到版图的拓扑结构.根据点操作算法,G 3:0输出表达式可写成式(5)所示:G 3:0=G 3+P 3G 2+P 3P 2G 1+P 3P 2P 1G 0=P 3(P 2(P 1G 0+G 1)+G 2)+G 3(5)图3块进位产生信号G 3:0逻辑电路Fig.3Logic circuit of block carry generation signal G 3:0G 3:0对应组合逻辑电路如图3所示的实线部分,为6级两输入与或结构.对这种结构电路,可用基于启发式的欧拉路径算法来进行版图设计.启发式欧拉路径算法的理论基础是:对于多级与或结构的组合逻辑,如果每一个与/或门的输入端数目为奇数,则在相应的逻辑图中,下拉网络PDN 和上拉网络PUN 存在一致的欧拉路径.为满足启发式欧拉路径算法输入端数目为奇数要求,在每个与/或门加入一个用虚线表示的“假想”输入,这些“假想”输入统一放在图的上方.运用欧拉路径算法设计块进位产生信号G 3:0复合门版图步骤是先绘制逻辑图,逻辑图是用圆点代表电路节点,边是用控制晶体管的栅信号命名,再根据启发式欧拉路径算法的理论基础,研究得到下拉网络PDN 的逻辑图如图4所示.图4块进位产生信号G 3:0逻辑图Fig.4Logic diagram of block carry generation signal G 3:0图5块进位产生信号G 3:0电路原理图Fig.5Circuit schematic of block carry generation signal G 3:0·468·第6期王仁平,等:高性能64位并行前缀加法器全定制设计欧拉路径是通过逻辑图中所有节点并且只经过每条边一次的一条路径,在欧拉路径中边的顺序等于在复合门版图中输入端的顺序.本设计选择欧拉路径为G 3P 3G 2P 2G 1P 1G 0X 0X 1X 2X 3X 4X 5,X 0X 1X 2X 3X 4X 5是假想输入,在版图设计中不存在.根据所选择的欧拉路径,对应多米诺动态逻辑电路图如图5所示.图6块进位产生信号G 3:0棍棒图Fig.6Stick figure of block carry generationsignal G 3:0在设计块进位产生信号G 3:0复合门版图时,先用棍棒图来研究版图绘制策略,得到电路版图的拓扑结构.选择欧拉路径为G 3P 3G 2P 2G 1P 1G 0,在欧拉路径中边的顺序等于在复合门版图中输入端的顺序,得到的棍棒图如图6所示,物理连接的晶体管能通过扩散区进行重叠连接,这样即减少版图面积,又无需导线和过孔进行连接,减少寄生参数.2.1.2块进位传播信号电路设计为减少版图面积和提高性能,对块传播信号P 3:0=P 3P 2P 1P 0电路,利用多输出多米诺逻辑(动态逻辑门在一个门中可产生不同逻辑功能)特点,在图5基础上共享P 3P 1.这图7基4点操作的动态实现Fig.7Dynamic implementation of radix -4dotoperation种方法对预充电器件数目没有减少,但P 3P 1为两个输出所共享,减少求值晶体管数目,也减少前一级的扇出数,最终基4点操作的动态逻辑电路实现如图7所示.2.1.3基4点操作动态电路的优化基4点操作动态电路有多个输入端,为降低大扇入电路的延时,提高性能,根据Elmore 延时模型可知,最靠近输出的P 3管电阻在延时公式中出现的次数最多,应当使P 3管的电阻最小(即宽长比最大).依次类推.因此,对下拉网络PDN ,从输出往下采用逐级加大晶体管尺寸,即P 2<P 1=G 0<P 3,能达到降低起主要作用的电阻,同时使器件电容的增加保持在一定的范围内.通过仿真分析可知,逐级加大晶体管尺寸与各个管子相同尺寸相比传播延时减少约10%.由64位基4的Kogge -Stone 树算法可知,输出的G 3:0和P 3:0要去驱动较大负载,如果由大扇入再直接去驱动大负载,则该电路的延时很长,性能差.可采用下面方法进行优化:引入静态反相器,在预充电期间n 型动态门输出充电至VDD ,通过反相器输出为0,而反相器输出又是下一级动态多米诺门输入,因此可取消下拉网络预充电管,减少时钟负载并提高下拉的驱动能力;同时引入的静态反相器隔离了由大扇入直接驱动大负载,提高了速度;另外该反相器还可用来驱动一个漏泄器件以抵抗漏电和电荷分享,解决了动态电路中信号完整性问题[9].由于第一级与第二级的块信号输出要驱动较大负载,在估算出负载电容基础上,采用3个具有相同门努力的反相器组成反相器链来实现传播延时最小.图8基4点操作的版图Fig.8Layout of radix -4dot operation 对一个较大尺寸的晶体管意味着有较长栅线,较长栅线有较高电阻,从而降低器件的性能.本设计对一个较大尺寸的晶体管采用许多小的晶体管并联来构成,采用低电阻的金属线旁路连接较短的栅线可降低电阻,提高器件性能,同时各个模块的版图做到相同高度,便于集成和连接,最后得到基4点操作的版图如图8所示.2.2求和电路设计异或门XOR 是加法运算的基本单元,基于如图9(a )所示CMOS 互补逻辑的10管XOR 在面积和功耗上都不经济,而基于如图9(b )所示10管传输门XOR 逻辑,节省了面积和功耗,但是互补控制信号增加了电路的复杂度.由WangJyh -Ming 提出了6管传输管XOR 逻辑如图9(c )所示[10],结构简单,面积小,性能好,运算速度比10管CMOS 互补逻辑快27.9%,比10管传输门逻辑快20%,且无需互补信号.由于使用传输管逻辑,高电平输出时可能存在阀值压降导致反相器输出存在静态功耗.通过综合考虑面·568·福州大学学报(自然科学版)第39卷积和性能,半加器选择基于6管传输管XOR 逻辑.(a )10管CMOS XOR (b )10管传输门XOR (c )6管传输管XOR图9异或门实现比较Fig.9Implementation Comparison of XOR gate2.3时钟延时多米诺和H树分布图10时钟延时多米诺逻辑和H 树分布Fig.10Clock -delay domino logic and H -tree distribution时钟延时匹配是采用时钟延时多米诺技术,它的每一级时钟由前一级时钟和后一级时钟推导来进行确定,具体的时钟延时要求如下:只有在当前这一级预充电稳定输出为0后才能对下一级开始进行预充电;在当前这一级求值边沿时,下一级必须充电结束,这样才能取消下拉网络预充电管和避免存在短路电流.由于每一级时钟信号都有较大的驱动负载,如计算第一级块进位产生信号和块进位传播信号的时钟信号CLK1就连接有126个PMOS 管,因此采用反相器延时加上时钟路径上的传输门以及H 树结构时钟分布技术来设计时钟延时驱动,具体电路如图10所示,形成16个子叶节点,每个子叶节点再去驱动8个PMOS 管,传输门总是导通,而时钟路径的延时则可能通过这些器件的尺寸来进行调整.3仿真结果分析和比较加法器版图设计完成后,用Assura 工具先对它进行物理验证,包括设计规则检查(DRC )、电气规则检查(ERC )和版图与原理图一致性检查(LVS ),物理验证通过后,再用Assura 工具提取版图的寄生参数并采用ss 的Spectre 模型基于最长进位传播路径条件下进行后仿真.根据块进位函数动态实现电路特点,可知当输入A 为全“0”,B 为全“1”,最低位进位C i ,0为“1”时,将使进位传播路径最长,即在该条件下可以得出整个加法器关键路径的延时,后仿真得CLK0、P 0、P 3:0、P 15:0、P 63:0、C o ,63和S 63波形如图11所示.在最坏条件下测得关键路径(从CLK0到第63位和输出S 63)的延时为532.26ps ,从中可知本文设计的64位整数加法器部件可运行在1.8GHz 的工作频率.在设计基4的Kogge -Stone 树算法64位并行前缀加法器同时,也用相同工艺的静态CMOS 技术来设计相同结构的加法器,对每个阶段的关键路径延时比较结果如表1所示,从中可知采用多米诺动态逻辑、时钟延迟多米诺和传输管逻辑等技术实现的电路性能有非常大改善.表1多米诺动态逻辑和静态CMOS 关键路径延时比较Tab.1Comparison domino dynamic logic with static CMOS on the critical path delay时钟延迟多米诺加法器逻辑t 延时/ps 静态CMOS 加法器逻辑t 延时/ps P i /G i 53P i /G i112P 4/G 4117P 4/G 4283P 16/G 16144P 16/G 16354P 64/G 64135P 64/G 64378进位(C o ,i )52进位(C o ,i )135求和(S i )31求和(S i )180·668·第6期王仁平,等:高性能64位并行前缀加法器全定制设计图11最坏情况下关键路径波形仿真结果Fig.11Wave simulation results on critical path in worst -case4结论设计高性能加法器部件需要在实现算法、电路结构、采用技术、器件参数、版图设计等各个方面进行优化和改进.本文实现算法和电路结构采用改进的64位基4的Kogge -Stone 树加法器结构,采用技术有多米诺动态逻辑、多输出多米诺逻辑、6管传输管实现XOR 逻辑、时钟延迟多米诺逻辑和H 树分布等,器件参数优化主要对基4点操作动态电路进行,版图设计采用启发式殴拉路径算法、逻辑图、棍棒图对基4点操作动态电路进行.最终设计的64位加法器面积为0.1379mm 2,在最坏情况下完成一次加法运算时间为532.26ps.本设计广泛采用动态电路实现,在速度和面积方面有很大的优势,但功耗相对较大以及动态结点易受到来自各方面噪声影响,因此还需要进一步研究动态电路工作在相对较低功耗且可靠性相对较高的设计技术.参考文献:[1]Dozza D ,Gaddoni M ,Baccarani G.A 3.5ns ,64bit carry -lookahead adder [C ]//Proceedings of IEEE International Symposi-um on Circuit and Systems.1996:297-300.[2]Matthew S ,Krishnamurthy R ,Anders M ,et al .Sub -500ps 64-b ALUs in 0.18mm SOI /Bulk CMOS :design and scalingtrends [J ].IEEE Journal of Solid -State Circuits ,2001,36(11):1636-1646.[3]孙旭光,毛志刚,来逢昌.改进结构的64位CMOS 并行加法器设计与实现[J ].半导体学报,2003,24(3):203-208.[4]Mathew S ,Anders M ,Krishnamurthy R ,et al .A 4GHz 130nm address generation unit with 32b sparse -tree adder core [J ].IEEE Journal of Solid -State Circuits ,2003,38(5):689-695.[5]Mathew S K ,Anders M A ,Bloechel B ,et al .A 4GHz 300mW 64b integer execution ALU with dual supply voltages in 90nmCMOS [J ].IEEE Journal of Solid -State Circuits ,2005,40(1):162-163.[6]Jin Zhan -peng ,Shen Xu -bang ,Bai Yong -qiang.A 64-bit fast adder with 0.18μm CMOS technology [C ]//Proceedingsof IEEE International Symposium on Communications and Information Technologies.Beijing :[s.n.],2005:1167-1171.[7]王仁平,何明华,陈传东,等.64位超前进位对数加法器的设计与优化[J ].半导体技术,2010,35(11):1116-1121.[8]Rabeay J M.数字集成电路-电路、系统与设计[M ].周润德,译.北京:清华大学出版社,2008:171-431.[9]David A Hodges.数字集成电路分析与设计-深亚微米工艺[M ].将安平,译.北京:清华大学出版社,2005:235-266.[10]吴金,应征.高速浮点乘法器设计[J ].电路与系统学报,2005,10(6):6-10.(责任编辑:林晓)·768·。

64位计数器加速设计

64位计数器加速设计

64位计数器的加速设计修订记录表一、 电路分析要提高电路的时钟频率上限,首先得分析电路的时钟频率瓶颈所在。

在Quarttus II 11.0中实现所给代码,综合编译后得到的由工具提供的硬件资源消耗情况和最大时钟频率分别如图1和图2所示。

图1.资源占用情况图2.最大时钟频率可知原代码描述的电路最高可达156.74MHz 的时钟速度。

综合后的RTL 级电路如图3所示。

图3.RTL 级电路可抽象成如图4所示的电路。

图4.抽象电路由此可知,电路的性能瓶颈主要在于由64为加法器构成的组合逻辑部分。

通常,加法器的位数越多,其延时越大,因而电路的速度遭受到了限制。

可通过优化组合逻辑部分电路来提高整个电路的运行速度。

二、加速设计方案可通过划分由64位加法器构成的组合逻辑电路来实现电路加速,如下图所示。

图5.加速设计方案将64位加法器划分成4个16位的加法器,以低位加法器产生的进位作为高位加法器进行加法操作的触发条件,并采用同步时钟电路保证电路的稳定性。

编写代码(附录),其综合后得到的最大时钟频率如图6所示。

图6.加速设计的时钟频率上限资源消耗情况如图7中左子图所示,右子图为修改前的资源消耗情况。

图7.优化前后资源消耗对比由上图可得,时钟频率上限提高了393.86/156.74*100% = 251.28%,代价是消耗额外的硬件资源。

三、问题提出上路加速方案的核心思想就是通过将64为加法器划分为多个位数较小的加法器来减少组合逻辑电路的延时。

那么,是否可以无限细分,如划分为8个8位加法器的组合,或者16个4为加法器的组合以及64个1位加法器的组合?下面是划分为8个8位加法器的综合结果。

图8.划分为8个8位加法器的时钟频率上限图9.划分为8个8位加法器的资源消耗下面是划分为16个4位加法器的综合结果。

图10.划分为16个4位加法器的资源消耗图11.划分为16个4位加法器的时钟频率上限由上述结果可知,将64为加法器划分的越细,消耗的硬件资源就越多,即面积越大,然而时钟频率上限并没有随着加法器的个数增加而增加,在划分为8个8位加法器时时钟能达到420MHz,而划分为16个4位加法器时时钟只能达到326MHz。

64位加法器设计

64位加法器设计

VHDL语言与数字集成电路设计报告指导老师:张鹰2个64位数据加法器设计本次设计中将引入数据选择器,对之前的串行加法器的设计进行优化,将使多位加法器的延迟时间大大减少,但同时面积将会成倍增加,具体电路设计中采用哪种设计,需要对电路的速度和面积关系进行折衷考虑。

首先看下串行加法器的延时:图1:串行加法器延迟即对n位加法器的串行设计,最长延迟将为2n.可知当对64位数据进行串行加法器设计时,将高达128个单位延迟,速度较慢。

由于每位加法器的进位数据只有’0’和’1’两种结果,若先对64位串行加法器进行分级,即前级的进位co连到后级的ci端口,由于串行数据需要等待,延迟为128个单位,为了优化延迟时间,可以对后级的ci端口数据提前读入’0’和’1’两种结果,让其与前级加法器同时运算并让前级co数据对后级产生的两种结果进行选择输出,则大大减少运行时间。

首先对64位数据进行分组:图2:64位串行加法器分组模型如图2所示,将64位数据,依次分组为2位,2位,3位,4位,5位,6位,7位,8位,9位,9位,9位。

然后将选择器加入上述电路中,并将ci端口分别设为’0’和’1’,得到改进后的64位加法器的设计。

图3加入选择器的64位加法器如上图图2所示,在改进后的加法器中,第一级加法器为2位加法器,延时为4个单位,第二级加法器也为2位加法器,延时也为4,同时到达数据选择器端口,经数据选择器输出后为6个延时,将输出的co值再作为下级数据选择器的选择端口,下级数据选择器数据端口连到下级加法器输出端口,因此可将下级加法器设为3位加法器,经3位加法器后延时为6,与前级的co值同时到达选择器端口,依次类推,后级加法器可设为4位,5位,6位,7位,8位,,9位,9位,9位加法器,依次经过10级数据选择器,所以最长延时为4+2*10=24个单位延时,与之前的串行加法器相比,延时大大降低了。

总结:通过采用并行结构加法器,延时大大降低,由128个单位延时变为24个单位延时,电路速度增加,但同样面积也大大增加,从第一级开始每级需要两个加法器,且需要额外的10级选择器,在数字设计中,将根据面积和速度的要求来考虑采用哪种加法器设计电路。

计算机加法器原理

计算机加法器原理

计算机加法器原理宝子!今天咱们来唠唠计算机加法器的原理,这可超级有趣呢!你看啊,在计算机的小世界里,一切都是由0和1组成的数字魔法。

加法器就像是一个超级聪明的小助手,专门负责把数字加起来。

想象一下,计算机里的数字就像一群可爱的小方块,每个小方块要么是0,要么是1。

加法器要做的呢,就是把这些0和1的组合按照一定的规则加起来。

比如说,最基础的半加器,它就像一个小小的数学精灵,一次只能处理两个小方块,也就是两个一位的二进制数。

半加器这个小机灵鬼有两个输入,就像两只小手,等着接收0或者1。

然后呢,它会根据特定的规则算出结果。

这个结果有两部分,一部分是相加后的和,另一部分是进位。

就好比咱们做加法的时候,有时候加起来会超过10,就要向前进一位一样。

在二进制里,当两个1相加的时候,就会产生进位啦。

那要是想加更多的数字怎么办呢?这就轮到全加器出场啦。

全加器就像是半加器的升级版,它更厉害哦。

全加器有三个输入,除了要相加的两个二进制数,还有一个进位输入。

这就像是它在做加法的时候,还能考虑到之前有没有进位过来的情况。

全加器把这三个输入综合起来,然后得出和与进位。

那这些小小的加法器是怎么组合起来去计算更大的数字呢?这就像是搭积木一样。

好多全加器连接在一起,就可以计算多位的二进制数相加啦。

比如说,我们要计算1101和1011这两个二进制数相加。

最右边的全加器先把两个数的最低位和进位0(因为最开始没有进位)加起来,得出和与进位。

然后这个进位会传递给下一个全加器,下一个全加器再把对应的位和这个进位加起来,就像接力赛一样,一个一个全加器把数字加起来,最后就得到了正确的结果。

你可能会想,这和我们平时用的十进制加法好像有点不一样呢。

哈哈,其实本质是一样的啦,只是我们十进制是逢十进一,二进制是逢二进一。

计算机用二进制加法器是因为计算机内部的电路很容易表示0和1这两种状态呀。

加法器在计算机里可太重要啦。

不管是我们简单的计算,还是计算机在处理各种复杂的程序,只要涉及到数字相加,加法器就在背后默默工作着。

64位乘法器实验报告

64位乘法器实验报告

64位乘法器实验报告64位乘法器设计实验是我在科大的第一个课程设计,verilog程序的熟练掌握对于微电子专业的学生来讲是非常必要的,对于此次设计我也花费了很长时间。

本设计分为3个部分,即控制和(1)状态选择部分,(2)乘法器部分,(3)加法器部分。

以下我将按此顺序进行说明。

需要指出的是,在实际设计中的顺序恰好是颠倒的,这与设计思路有关,在刚开始的时候由于对整体没有一个很好的把握就先选择最简单的一部分几加法器开始入手,然后就是乘法器,最后作乐一个状态控制电路将两部分联系起来。

状态选择部分设计:本电路状态选择部分设计比较简单,只有一个控制信号sel来控制电路的工作状态,我选定的状态是:sel为00的时候做加法,sel为01时做减法,sel为10时做乘法。

从节省功耗的角度出发,当电路处于加法状态的时候,乘法器最好是能够不工作,反之也一样在乘法器工作时要求加法器也处于不工作状态。

我在设计中在两个电路块的输入上都加了一个二选一开关,使不处于工作状态的电路块的输入始终为0,可是使电路减少由动态翻转产生的功耗。

加法器的设计:为了能更好地掌握加法器的设计过程,本部分采用门级描述语言,本加法器采用流水线的设计方案。

实际上该部分是不需要流水,因为乘法器是本电路的关键路径,即使乘法器采用流水线的设计方案延迟也肯定比加法器要大。

为了能够掌握流水线设计,加法器也采用了流水线来实现。

加法器的整体结构见附图(1),有超前进位产生电路,和超前进位电路来实现。

超前进位产生电路是对两个64位输入按位进行异或和与从而产生超前进位电路的输入信号P,Q。

教材上在此处也产生了部分和结果S,但我认为在此处产生结果不妥,因为要产生部分和结果必须有上一级的进位信号,对于本加法器进位信号将在下一步才产生。

所以我将作后结果的产生放在了最后一拍来完成将P与产生的进位信号按位异或即可得到最后结果。

但要注意P与进位信号CP产生的时间是不一致的,所以P信号要送到寄存器中等待一拍。

VLIW数字信号处理器64位可重构加法器的设计

VLIW数字信号处理器64位可重构加法器的设计

VLIW数字信号处理器64位可重构加法器的设计张志伟;马鸿;李立健;王东琳【期刊名称】《计算机工程》【年(卷),期】2007(033)016【摘要】描述了一款适用于超长指令字数字信号处理器的64位加法器的设计.该加法器高度可重构,可以支持2个64位数据的加法运算、4个32位数据的加法运算、8个16位数据的加法运算以及16个8位数据的加法运算.它结合了Brent-Kung对数超前进位加法器和进位选择加法器的优点,使得加法器的面积和连线减少了50%,而延时与加法器的长度的对数成正比.仿真结果表明,在典型工作条件下,采用0.18μm工艺库标准单元,其关键路径的延时为0.83ns,面积为0.149mm2,功耗仅为0.315mW.【总页数】4页(P29-31,34)【作者】张志伟;马鸿;李立健;王东琳【作者单位】中国科学院自动化所国家专用集成电路设计工程技术研究中心,北京,100080;中国科学院自动化所国家专用集成电路设计工程技术研究中心,北京,100080;中国科学院自动化所国家专用集成电路设计工程技术研究中心,北京,100080;中国科学院自动化所国家专用集成电路设计工程技术研究中心,北京,100080【正文语种】中文【中图分类】TP332【相关文献】1.数字信号处理器中高性能可重构加法器设计 [J], 马鸿;李振伟;彭思龙2.基于SABL的抗DPA攻击可重构加法器设计 [J], 钱浩宇;汪鹏君;张跃军;丁代鲁3.改进结构的64位CMOS并行加法器设计与实现 [J], 孙旭光;毛志刚;等4.64位整数加法器的设计与实现 [J], 谭全林;邢座程;李少青;陈延仓5.一种静态电路兼容的4GHz64位动态加法器设计 [J], 王志远;高茁因版权原因,仅展示原文概要,查看原文内容请购买。

64位乘法器—verilog

一.设计思想输入两组64位数,a,b。

对其中一个数a,低位扩充一位0,高位扩充两位符号位,然后采用基4波兹编码进行编码。

编码一共有5种情况,分别为:0,+1,+2,-1,-2。

则相对应的部分积为0,b,2b,-b,-2b。

一共会有三十二个部分积。

分别将这三十二个部分积都扩充到128位,高位补充符号位,低位补充为0。

第一个部分积低位不补0,第二个部分积地位补两个0,第三个部分积最低位补四个0,以此类推……会得到32个128位数,将这32个数全部相加,高位溢出不管,得出一个128位数,即为最终结果。

二.电路模块1.电路用一个子模块,即基4波兹编码模块。

输入一个64位数x以及要编码的三位数,则根据输入的三位数,输出一个66位数,这个66位数为0,x,2x,-x,-x。

模块如下所示:2.将输入的64位数in2,低位补0,高位扩两位符号位,再对其从低位到高位进行基4波兹编码,得到3位部分积,再将部分积扩充为128位,再将这些部分积相加,溢出丢弃,得到最终值。

电路框架如下所示:三.仿真波形如下所示:四.代码见附件:decode.v,mul_64.v。

测试代码为tb.v五.综合结果见附件:report_area2.txt,report_time2.txt,report_power2.txt,代码:module decode(in,x,y);input[2:0]in;input[63:0]x;output reg[65:0]y;always@(in)begincase(in)3'b000:y<=66'd0;3'b111:y<=0;3'b001:y<={{2{x[63]}},x};3'b010:y<={x[63],x[63],x};3'b011:y<={x[63],x,1'b0};3'b101:y<=~{x[63],x[63],x}+1;3'b110:y<=~{x[63],x[63],x}+1;3'b100:y<=~{x[63],x,1'b0}+1;endcaseendendmodulemodule mul_64(in1,in2,out);input[63:0]in1,in2;output[127:0]out;wire[66:0]r_in2;wire[65:0]code_1,code_2,code_3,code_4,code_5,code_6,code_7,code_8,code_9,code_10,code_11,code_12, code_13,code_14,code_15,code_16,code_17,code_18,code_19,code_20,code_21,code_22,code_2 3,code_24,code_25,code_26,code_27,code_28,code_29,code_30,code_31,code_32;wire[127:0]k_code_1,k_code_2,k_code_3,k_code_4,k_code_5,k_code_6,k_code_7,k_code_8,k_code_9,k_co de_10,k_code_11,k_code_12,k_code_13,k_code_14,k_code_15,k_code_16,k_code_17,k_code_18, k_code_19,k_code_20,k_code_21,k_code_22,k_code_23,k_code_24,k_code_25,k_code_26,k_cod e_27,k_code_28,k_code_29,k_code_30,k_code_31,k_code_32;assign r_in2={{2{in2[63]}},in2,1'b0};decode m_1(.in(r_in2[2:0]),.x(in1),.y(code_1));assign k_code_1={{62{code_1[65]}},code_1};decode m_2(.in(r_in2[4:2]),.x(in1),.y(code_2));assign k_code_2={{60{code_2[65]}},code_2,2'b00};decode m_3(.in(r_in2[6:4]),.x(in1),.y(code_3));assign k_code_3={{58{code_3[65]}},code_3,4'b0000};decode m_4(.in(r_in2[8:6]),.x(in1),.y(code_4));assign k_code_4={{56{code_4[65]}},code_4,6'b000000};decode m_5(.in(r_in2[10:8]),.x(in1),.y(code_5));assign k_code_5={{54{code_5[65]}},code_5,8'b00000000};decode m_6(.in(r_in2[12:10]),.x(in1),.y(code_6));assign k_code_6={{52{code_6[65]}},code_6,10'b0000000000};decode m_7(.in(r_in2[14:12]),.x(in1),.y(code_7));assign k_code_7={{50{code_7[65]}},code_7,12'b000000000000};decode m_8(.in(r_in2[16:14]),.x(in1),.y(code_8));assign k_code_8={{48{code_8[65]}},code_8,14'b00000000000000};decode m_9(.in(r_in2[18:16]),.x(in1),.y(code_9));assign k_code_9={{46{code_9[65]}},code_9,16'b0000000000000000};decode m_10(.in(r_in2[20:18]),.x(in1),.y(code_10));assign k_code_10={{44{code_10[65]}},code_10,18'b000000000000000000};decode m_11(.in(r_in2[22:20]),.x(in1),.y(code_11)); assign k_code_11={{42{code_11[65]}},code_11,20'd0};decode m_12(.in(r_in2[24:22]),.x(in1),.y(code_12)); assign k_code_12={{40{code_12[65]}},code_12,22'd0};decode m_13(.in(r_in2[26:24]),.x(in1),.y(code_13)); assign k_code_13={{38{code_13[65]}},code_13,24'd0};decode m_14(.in(r_in2[28:26]),.x(in1),.y(code_14)); assign k_code_14={{36{code_14[65]}},code_14,26'd0};decode m_15(.in(r_in2[30:28]),.x(in1),.y(code_15)); assign k_code_15={{34{code_15[65]}},code_15,28'd0};decode m_16(.in(r_in2[32:30]),.x(in1),.y(code_16)); assign k_code_16={{32{code_16[65]}},code_16,30'd0};decode m_17(.in(r_in2[34:32]),.x(in1),.y(code_17)); assign k_code_17={{30{code_17[65]}},code_17,32'd0};decode m_18(.in(r_in2[36:34]),.x(in1),.y(code_18)); assign k_code_18={{28{code_18[65]}},code_18,34'd0};decode m_19(.in(r_in2[38:36]),.x(in1),.y(code_19)); assign k_code_19={{26{code_19[65]}},code_19,36'd0};decode m_20(.in(r_in2[40:38]),.x(in1),.y(code_20)); assign k_code_20={{24{code_20[65]}},code_20,38'd0};decode m_21(.in(r_in2[42:40]),.x(in1),.y(code_21)); assign k_code_21={{22{code_21[65]}},code_21,40'd0};decode m_22(.in(r_in2[44:42]),.x(in1),.y(code_22)); assign k_code_22={{20{code_22[65]}},code_22,42'd0};decode m_23(.in(r_in2[46:44]),.x(in1),.y(code_23)); assign k_code_23={{18{code_23[65]}},code_23,44'd0};decode m_24(.in(r_in2[48:46]),.x(in1),.y(code_24)); assign k_code_24={{16{code_24[65]}},code_24,46'd0};decode m_25(.in(r_in2[50:48]),.x(in1),.y(code_25));assign k_code_25={{14{code_17[65]}},code_25,48'd0};decode m_26(.in(r_in2[52:50]),.x(in1),.y(code_26));assign k_code_26={{12{code_26[65]}},code_26,50'd0};decode m_27(.in(r_in2[54:52]),.x(in1),.y(code_27));assign k_code_27={{10{code_27[65]}},code_27,52'd0};decode m_28(.in(r_in2[56:54]),.x(in1),.y(code_28));assign k_code_28={{8{code_28[65]}},code_28,54'd0};decode m_29(.in(r_in2[58:56]),.x(in1),.y(code_29));assign k_code_29={{6{code_29[65]}},code_29,56'd0};decode m_30(.in(r_in2[60:58]),.x(in1),.y(code_30));assign k_code_30={{4{code_30[65]}},code_30,58'd0};decode m_31(.in(r_in2[62:60]),.x(in1),.y(code_31));assign k_code_31={{2{code_31[65]}},code_31,60'd0};decode m_32(.in(r_in2[64:62]),.x(in1),.y(code_32));assign k_code_32={code_32,62'd0};assignout=k_code_1+k_code_2+k_code_3+k_code_4+k_code_5+k_code_6+k_code_7+k_code_8+k_co de_9+k_code_10+k_code_11+k_code_12+k_code_13+k_code_14+k_code_15+k_code_16+k_co de_17+k_code_18+k_code_19+k_code_20+k_code_21+k_code_22+k_code_23+k_code_24+k_c ode_25+k_code_26+k_code_27+k_code_28+k_code_29+k_code_30+k_code_31+k_code_32;endmodule。

64位整数全解

64位整形引起的混乱主要在两方面,一是数据类型的声明,二是输入输出。

首先是如果我们在自己机器上写程序的话,情况分类如下:(1) 在win下的VC6.0里面,声明数据类型的时候应该写作_ _int64 a;输入输出的时候用%I64dscanf(”%I64d”,&a);printf(”%I64d”,a);(2) 在linux下的gcc/g++里面,数据类型声明写作long long a;输入输出时候用%lld(3) 在win下的其它IDE里面[包括高版本Visual Studio],数据类型声明用上面两种均可输入输出用%I64d================== 以下可无视=========================以下是对这种混乱情况的解释,如无兴趣可以跳过首先要说的是,和Java等语言不同,C/C++本身并没有规定各数据类型的位数,只是限定了一个大小关系,也就是规定从所占的bit数来说,short <= int <= long <= long long。

至于具体哪种类型占用多少位,是由你所用的开发平台的编译器决定的。

在现在的PC上一个通常的标准是,int和long 同为32位,long long为64位。

但是如果换到其它平台(如ARM)上,这个数字可能会有不同,类型所占的大小可以用sizeof()运算符查看。

long long是C99标准中新引进的数据类型,在古老的VC6.0中并没有这个类型,所以在VC6.0中用”long long”会发生编译错误。

为了表示64位整数,VC6里采用的是微软自己搞出来的一个数据类型,叫做__int64,所以如果你是在VC6.0下编译的话,应该用__int64定义64位整型。

新版的Visual Studio已经支持long long了。

GCC是支持long long的,我们在win系统中使用的其它IDE如Dev-Cpp, Code::Blocks等等大多是采用的MinGW编译环境,它是与GCC兼容的,所以也支持long long (另外为了与MS兼容,也支持__int64)。

基于CPLD的64位乘法运算器的设计

基于CPLD的64位乘法运算器的设计-职业技术教育论文基于CPLD的64位乘法运算器的设计辜艺邹光毅朱伟(江汉大学数学与计算机科学学院,湖南武汉430056)【摘要】提出了一种由64位加法器构成的以时序逻辑方式设计的64位宽位乘法器,此乘法器比纯组合逻辑构成的乘法占用硬件资源少,结构简单,基于VHDL语音模块化的设计,有利于器件的升级与位数扩充具有一定的实用价值。

关键词CPLD;乘法器;运算器件作者简介:辜艺(1961—),男,工作于江汉大学数学与计算机科学学院。

邹光毅(1956—),男,工作于江汉大学数学与计算机科学学院。

朱伟(1959—),男,工作于江汉大学数学与计算机科学学院。

0 引言纯组合逻辑构成的乘法器虽然工作速度比较快,但占用硬件资源多,难以实现宽位乘法器,而基于CPLD器件外接ROM九九表的乘法器则无法构成单片系统,也不实用。

这里介绍由64位加法器构成的以时序逻辑方式设计的64位乘法器,此乘法器具有一定的实用价值。

其乘法原理是:乘法通过逐项位移相加原理来实现,从被乘数的最低位开始,若为1,则乘数左移后与上一次和相加;若为0,左移后以全零相加,直至被乘数的最高位。

ACCDK是乘法运算控制电路,它的KAIS(可锁定于引脚I/O 49)信号的上跳沿与高电平有两个功能,即64位寄存器清零和被乘数A[63..0]向移位寄存器SREG8B加载;它的低电平则作为乘法使能信号。

乘法时钟信号从ACCDK的CLK输入。

当被乘数加载于8位右移寄存器YYJCQ后,随着每一时钟节拍,最低位在前,由低位至高位逐位移出。

当为1时,与门YUMRN打开,64位乘数B[63..0]在同一节拍进入8位加法器,与上一次锁存在64位锁存器REG16B中的高64位进行相加,其和在下一时钟节拍的上升沿被锁进此锁存器。

而当被乘数移出位为0时,与门全零输出。

如此往复,直至8个时钟脉冲后,由ARICTL 的控制,乘法运算过程自动中止。

64位加法器设计解析

64位加法器设计解析首先,我们需要了解基本的二进制加法原理。

在二进制中,每一位只有两个可能的取值,即0或1、当对两个二进制数进行加法时,我们从最低位开始依次相加,并将进位传递到下一位。

如果两位相加结果是0或1,那么和为该结果;如果是2,那么和为0并将进位设置为1;如果是3,那么和为1并将进位设置为1根据该原理,我们可以设计出一个简单的1位加法器。

这个加法器有两个输入分别为A和B,一个输出用于表示和S,一个输出用于表示进位C。

它由一个异或门用于计算和,一个与门用于计算进位。

该1位加法器的电路图如下所示:```_____A---XOR,------__________B----------AND,------_____```在64位加法器中,我们将使用64个1位加法器来执行64位加法运算。

为了实现高效的加法操作,我们可以使用并行加法器结构。

其中,每两个相邻的1位加法器的进位输出会连接到下一个1位加法器的进位输入。

这样,进位可以在1个时钟周期内从最低位传递到最高位,从而提高加法器的速度和性能。

此外,为了处理64位的输入和输出,我们还需要将输入和输出进行分组。

通常,我们将64位的输入分为4个16位的子组,并将每个子组的输入分别连接到4个16位加法器上。

同样,我们将64位的输出分为4个16位的子组,并将每个子组的输出分别连接到4个16位加法器的输出上。

这种分组设计可以使得64位加法器的布线更加整齐,并且易于实现。

总结起来,64位加法器的设计是基于多个1位加法器的并行加法器。

每个1位加法器包含一个异或门和一个与门,用于计算和和进位。

通过连接每个1位加法器的进位输出和进位输入,可以实现高效的进位传递。

通过将输入和输出分组,可以简化电路布线和实现过程。

64位加法器提供了一种高效的方式来执行64位整数的加法运算。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
相关文档
最新文档