您好,欢迎访问三七文档
当前位置:首页 > 临时分类 > 16位有符号乘法器设计
1/1216*16有符号乘法器设计翁新钎10212020048一.设计要求...............................................................................................................................2二.方案选择...............................................................................................................................2三.详细设计...............................................................................................................................21.部分积的产生.............................................................................................................................22.部分积的累加.............................................................................................................................41)符号位扩展逻辑.....................................................................................................................42)构造WallaceTree..................................................................................................................73)加法器的选择.........................................................................................................................8四.仿真结果.............................................................................................................................10五.综合结果.............................................................................................................................10六.参考文献.............................................................................................................................112/12一.设计要求设计方案选择要求如下:编码方式:non-booth编码,Booth编码,Booth2编码(任选一种)拓扑结构:简单阵列,双阵列,二进制树,Wallace树(任选一种)加法器:RippleCarryAdder,Carrybypass,Carryselect,Carrylookahead(任选一种或采用混合方法)二.方案选择编码方式:Booth2编码拓扑结构:Wallace树加法器:CarrylookaheadAdderBooth2编码可以使部分积的数量减半,并且解决了符号问题,也就是说,符号位不需要单独处理。部分积的累加采用Wallace树,和其它拓扑结构相比,Wallace具有硬件节省,延时小的优点,Wallace树的传播延时等于3/2(log)ON。最终相加使用的加法器使用的是DesignWare中的超前进位加法器,通过在Verilog中添加synopsis控制命令来明确指定DC选择何种实现。三.详细设计乘法器设计主要参考了文献[1]的方法,并在此基础上有所改进,改进的内容包括两个方面:1.简化了E的逻辑。实际上,E等于符号位取反。2.每行的部分积点数是16点,比文献[1]的17点少1点。17点的部分积中,最高位是符号位,取反后等于E,余下的只有16点。1.部分积的产生我们知道,N位补码表示的数,它的值等于1221012210()22222NNNNvalXXXXXX3/12根据11()2()2(2)2kkkkkkXXX,可以把一个奇数项分解成前后两个偶数项(图1),那么部分积的数量减少了一半。变换之后,X的值可以表示为/212212210()(2)2NkkkkkvalXXXX。注意到图1中的最高项,15141515222XX,可以合并到次高项上,而且保持形式统一,这就方便了运算,不需要对符号位单独处理。151432101514321015311311222222222(0)XXXXXXXXXXXX权重系数图1一个奇数项分解成两个偶数项计算乘法时,/212212210/212212210[(2)2][(2)]2NkkkkkNkkkkkYXYXXXXXXY因此,部分积的表达式是21221(2)kkkkPPXXXY。根据这个表达式,可以列出如图2的部分积选择表,其中Multiplicand=Y。4/12图2部分积选择表对应的部分积选择电路如图3。电路由布斯编码器和选择器组成。先对Y进行一位符号扩展,然后选择Y或者2Y,最后决定是否要取反。注意其中的E是符号位的非。BoothencoderEX(2k)X(2k-1)X(2k+1)PartialProduct[15:0]Y[15:0]SSMS2M图3使用Booth2编码的部分积产生电路2.部分积的累加由前面的部分积产生电路,能够得到8个部分积,这些部分积需要经过符号扩展和累加,才能得出乘法运算的结果。1)符号位扩展逻辑符号位扩展,以扩展8位为例,假设符号位是S,那么扩展的后,得到5/12SSSSSSSS图4基本的符号扩展如果S等于1,得到的是0xFF,如果S等于0,得到0x00。0xFF加上1再舍去溢出位就得到0x00,所以符号扩展的逻辑可以等价于0xFF+not(S)。1S1111111SSSSSSSSS图5符号扩展的等价方法对每个部分积,符号扩展的过程可以看成符号位取非,再上全1的扩展。这也是前面部分积产生电路中取E为符号位的非的原因。对于全1的扩展,可以预先计算出结果。如图6中的1阵列,经过计算,可以化简成图7的样子。然后,加上符号位的非,得图8。类似前面符号位扩展,可以把E+(11)b变为EEE。(图9)SS1S1S1S1S1S1S10X15X14X0X1X21111111111111111111111111111111111111111111111111111111111111111116bits图6全1扩展6/12SS1S1S1S1S1S1S10X15X14X0X1X211000000016bits图7预先计算的结果SS1S1S1S1S1S1S10X15X14X0X1X21116bitsEEEEEEEE图8加上符号位的非SS1S1S1S1S1S1S10X15X14X0X1X216bitsEEEEEEEEEE图9化简后得到的等待相加的部分积7/122)构造WallaceTree使用全加器和半加器覆盖部分积的点。每一轮覆盖的约减目标是,将行数减到2/3。即123nnRR。初始的点阵有9行,所以第一轮覆盖,约减目标是6行(9*2/3=6),第二轮覆盖的约减目标是4行(6*2/3=4),第三轮覆盖的约减目标是3行(4*2/3=2.67),第四轮覆盖的约减目标是2行(3*2/3=2)。经过四轮覆盖,将部分积点阵约减到两行,然后使用一个加法器做最终相加。树的构造方法:从右向左,逐列处理。从第一个超出约减目标行数的列开始,使用压缩器覆盖,半加器的功能是减少一行,全加器的功能是减少两行,半加器或者全加器都会向左边一列贡献一个点,因此在处理下一列时,初始行数是原始的行数加上右边一列的压缩器数量。使用压缩器覆盖,如此反复,直到处理完每一列。图10(B、C、D、E)示意出每一轮覆盖的方法。经过4层覆盖,得到图10(F)的两行32点,使用一个32位加法器做最终相加。表1Wallace资源使用情况资源数量半加器22个全加器91个8/1216bits1EESPP[i]HalfAdderFullAdderABCDEF图10构造WallaceTree3)加法器的选择使用DC综合时,可以指定加法器的实现方式。在Verilog代码中,通过注释指定DC综合时选用的加法器类型,如图11。根据synopsys提供的DesignWareBuildingBlockIPuserguide,在设计中指定模块实现的方法如下。图11在代码中通过注释方式指定加法器类型9/12ThesearethestepsyoumusttaketoinferaspecificsyntheticmoduleandimplementationfromaparticularoccurrenceofaVerilogoperator:1.BeginbycreatingablockorafunctioninyourVerilogdescription.Aresourcecanbedeclaredonlyinanalwaysblockorafunction.2.Declareanidentifierforyourresource.Usethesyntax:/*synopsysresourceresource_name*/resource_namebecomesthenetlistcellname(unlesstheresourceismergedwithanotherresource).3.Placealabelontheoperation.Z=A+B;//synopsyslabellabel_name3.Usethemap_to_moduledirectivetoindicatethemoduleselectionofyourchoice.Thisdirectivemustfollowtheresourcedeclaration./*synopsysresourceresource_name:map_to_module=”module_name”;*/resource_nameistheidentifierforyourresourceandmodule_nameisthenameofthemoduleyouwantboundtoit.5.Toselectaspecificimplementationforyourdesign,usetheimplementationattribute.Thisattributemustfollowthemap_to_moduledirective./*synopsysresourceresource_name:map_to_module=”module_name”,implementation=”impl_name”;*/resource_nameistheidentifierforyourresourceandim
本文标题:16位有符号乘法器设计
链接地址:https://www.777doc.com/doc-7299055 .html