一种开关移位式32位乘法器的设计
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第31卷 第5期
2008年10月
电子器件
Chinese J ournal Of Elect ron Devices
Vol.31 No.5Oct.2008
A 32bit Multiplier Design
B ased on Switch &Shift
L I U X ue 2yong ,L I X i ao 2j i ang ,M A Chen g 2y an
3
(T he I nstit ute of Microelect ronics ,CA S ,Hangz hou 310053,Chi na )
Abstract :The multiplier is an important and co mplex part in t he AL U design of CPU ,it takes up a relative larger area and longer delay.According to t he different requirement s of system ,we can design out vario us multipliers.This paper makes a compromise between system clock and area ,bringing out a none single clock multiplier design based on switch and shift operation.At last by using SYNOPS YS tools it gives out t he synt hesis report and simulating wave to draw a parallel between t his multiplier and t he one generated f rom S YNOPS YS design_ware.
K ey w ords :switch ;multi 2cycle ;shift ;multiplier EEACC :6230
一种开关移位式32位乘法器的设计
刘学勇,李晓江,马成炎3
(杭州中科微电子有限公司,杭州310053)
收稿日期:2007212206
作者简介:刘学勇(19842),男,现为中国科学院微电子研究所2005级硕士研究生,主要研究方向为数字SOC 设计;
李晓江,男,现为中国科学院微电子研究硕士生导师,主要研究方向为数字SOC 设计;
马成炎,男,研究员,中国科学院微电子研究所博士生导师,研究方向模拟射频芯片设计,machengyan @ 。
摘 要:乘法器在CPU 的AL U 设计中是很重要,也是较为复杂的一部分,它占据大的面积和较长的延时。根据系统不同的
要求,我们可以设计出不同的乘法器。本文是在系统时钟要求和面积两方的限制下做了折衷,提出了一种基于开关和移位工作方式的多时钟周期乘法器的设计。最后用DC 进行综合,并经VCS 仿真得到结果与SYNOPSYS 公司design_ware 里的乘法器进行比较,指出其优缺点。
关键词:开关;移位;多周期;乘法器中图分类号:TN 402
文献标识码:A 文章编号:100529490(2008)0521671203
乘法器的代价很高并且运算很慢,许多计算问题的性能常常是由乘法运算所能执行的速度决定的[3]。在CPU 的运算功能块AL U 设计中,根据系统不同的要求,我们又可以设计单时钟周期或者多时钟周期的乘法器。有关单周期和多周期乘法器稍微系统一点的阐述,可以参考文献[7]。一般说来直接在verilog 代码“×”号会使DC 直接调用design 2ware 里的单时钟乘法器进行综合,此乘法器的面积和延时都比较大。如果需要降低延时并且减小面积的情况下,我们要对乘法操作时钟数进行牺牲。为此,针对小面积小延时的情况,作者采用分解成原子操作的方法来实现32带符号位数的乘法,达到减小
面积和延时的目的。其具体思路是把2个32bit 分
解成为4个16bit 的数来进行操作。其分解出来的16×16位的无符号数乘法属于一个原子操作,用一个组合逻辑在一个clock 内完成。
1 原子乘法的实现
乘法原子操作是16×16位乘法的一个时钟实现,是整个32位乘法器的关键。此实现基于开关移位原理。考虑到图的表示过于复杂,暂用8×8的原子操作来图解原理,以此达到理会16×16的原子操作过程。
先给出A =10111101,B =10110001。如图1,
圆圈里的数字表示乘数B ,如果为1则表示开关打开,选择A ;如为0则不打开选择0
。
图1 原子操作原理解析
考虑对称性,把B 的8bit 数据首先分为4组,
两两相邻为一组,每组2bit ,根据其值来选择是否传递A 。把每组左边传递出来的数据左移1位(方框L1)加上右边传递出来的数据,形成新的数据,如图形成了A1,S1,0和A 。再把这四个数据重新分组,此时移位为移2位。最后得出来的数据只有一组,左边移4位与右边相加就得到乘法原子操作的结果S3。下面给出每步操作的中间结果,如图2
。
图2 原子操作数据运算说明
2 32位乘法器的整合
有了16×16位乘法原子操作,我们可以由它构
造多周期32位乘法器。两个32位乘数都是被转换成了绝对值的,所以最高位都为0,这样2个32位乘数实质上分解成2个15位数和2个16位的数。这样也有一个好处就是可以消除一些乘积间有进位的问题。
还是用图来说明问题,取A =F5D8_C3D5,B =7DF8_FA1B 。先把它们转换成补码即绝对值,分别为0A27_3C2B 和7DF8_FA1B 。再对这两个补码进行乘数分解,如图3。
这个流程图很明朗,B EHAV IOR 一栏用箭头指出各步骤操作的意义。在经过4个clock 后已经可以得到一个乘法结果,但其还不是最终结果,
还缺
图3 32bit 乘法整合实例
少符号的判断。通常的做法是在写代码时分为正数
乘正数,负数乘负数等[6]。这样比较麻烦,本文干脆直接先把两个乘数转换成绝对值后再根据原来两数的最高位符号位来判断乘积结果是否要由补码转成原码。这只需要用A[31]和B[31]相异出来的结果用来选择乘积和补码就行了。图中的t rans 以及t rans64都是进行补码转换。
3 进位问题的说明
由于两个32位乘数的最高位都为0,所以最终乘积一定是62位的。分解的乘数中得到的4个子乘积项依次为32位,31位,31位,30位。要考虑进位问题,我们只需要拿最大的数去相乘,如果最大的数都没有发生进位,则其他数据更不可能有进位问题。选取最大的数7FFF_FFFF 和它自己7FFF_FFFF 相乘。以此来考虑进位问题。下面分时钟来说明子乘积项如何相加。
(1)第1个CL K 后,得到32位乘积FFFE 20001。
(2)第2个CL K 后,得到31位乘积7FFE 28001。把它与第一个乘积的高16位FFFE 进行相加,得到31位(而不是32位)和7FFF_7FFF 。所以
此31位加法操作没有进位。
(3)第3个CL K 后,得到31位乘积7FFE 28001,然后在加上第2个CL K 后得到的和7FFF 27FFF 得到FFFE_0000,此时两个31位数相加发生
了进位但最后结果没有超过32位。
(4)第4个CL K 后,子乘积结果为30位的3FFF 20001,加上上个CL K 得到的和的高16位FFFE 得到30位的3FFF_FFFF ,无加法进位。这
说明,这步操作最多就是产生30位的和。
通过以上4个CL K 的运算,我们可以看到,最
2761电 子 器 件第31卷