16位有符号乘法器设计
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
3 / 12
图 2 部分积选择表
对应的部分积选择电路如图 3。电路由布斯编码器和选择器组成。先对 Y 进行一位符号 扩展,然后选择 Y 或者 2Y,最后决定是否要取反。 注意其中的 E 是符号位的非。
Y[15:0]
SM S2M
Booth encoder
X(2k-1) X(2k) X(2k+1)
E Partial Product[15:0]
X0 X1 X2
S S S
X14 X15
图 6 全 1 扩展
5 / 12
0
16 bits
1 1 1 0 1 0 1 0 1 0 1 0 1 0 1 0 S S S S S S S S
X0 X1 X2
X14 X15
图 7 预先计算的结果
0
16 bits
E 1 1 1 E 1 E 1 E 1 E 1 E 1 E 1 E S S S S S S S S
二. 方案选择
编码方式: Booth2 编码 拓扑结构: Wallace 树 加法器:Carry look ahead Adder Booth2 编码可以使部分积的数量减半,并且解决了符号问题,也就是说,符号位不需要 单独处理。 部分积的累加采用 Wallace 树,和其它拓扑结构相比,Wallace 具有硬件节省,延时小的 优点,Wallace 树的传播延时等于 O(log3/2 N ) 。 最终相加使用的加法器使用的是 DesignWare 中的超前进位加法器,通过在 Verilog 中添 加 synopsis 控制命令来明确指定 DC 选择何种实现。
对每个部分积,符号扩展的过程可以看成符号位取非,再上全 1 的扩展。这也是前面部 分积产生电路中取 E 为符号位的非的原因。 对于全 1 的扩展,可以预先计算出结果。如图 6 中的 1 阵列,经过计算,可以化简成 图 7 的样子。 然后,加上符号位的非,得图 8。类似前面符号位扩展,可以把 E+(11)b 变为 EEE 。(图 9)
16*16 有符号乘法器设计
翁新钎 10212020048
一. 二. 三. 1. 2. 1) 2) 3) 四. 五. 六.
设计要求 ............................................................................................................................... 2 方案选择 ............................................................................................................................... 2 详细设计 ............................................................................................................................... 2 部分积的产生 ............................................................................................................................. 2 部分积的累加 ............................................................................................................................. 4
X0 X1 X2
X14 X15
图 8 加上符号位的非
0
16 bits
E E E 1 E 1 E 1 E 1 E 1 E 1 E 1 EFra Baidu bibliotekS S S S S S S
X0 X1 X2
S
X14 X15
图 9 化简后得到的等待相加的部分积 6 / 12
2) 构造 Wallace Tree 使用全加器和半加器覆盖部分积的点。每一轮覆盖的约减目标是,将行数减到 2/3。 即
三. 详细设计
乘法器设计主要参考了文献[1]的方法,并在此基础上有所改进,改进的内容包括两个方 面: 1. 2. 简化了 E 的逻辑。实际上,E 等于符号位取反。 每行的部分积点数是 16 点,比文献[1]的 17 点少 1 点。17 点的部分积中,最高位 是符号位,取反后等于 E,余下的只有 16 点。
仿真结果 ............................................................................................................................. 10 综合结果 ............................................................................................................................. 10 参考文献 ............................................................................................................................. 11
val ( X )
N /2 1 k 0
(X
2 k 1
X 2 k 2 X 2 k 1 ) 22 k 。
注意到图 1 中的最高项, X15 215 2 X15 214 ,可以合并到次高项上,而且保持形 式统一,这就方便了运算,不需要对符号位单独处理。
权重 系数
k 0
N /2 1
N /2 1 k 0
[( X
2 k 1
X 2 k 2 X 2 k 1 )Y ] 22 k
因此,部分积的表达式是 PP k ( X 2 k 1 X 2 k 2 X 2 k 1 )Y 。根据这个表达式,可以列出 如图 2 的部分积选择表,其中 Multiplicand=Y。
0
16 bits
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 S S S S S
图 11 在代码中通过注释方式指定加法器类型 8 / 12
These are the steps you must take to infer a specific synthetic module and implementation from a particular occurrence of a Verilog operator: 1. Begin by creating a block or a function in your Verilog description. A resource can be declared only in an always block or a function. 2. Declare an identifier for your resource. Use the syntax: /* synopsys resource resource_name */ resource_name becomes the netlist cell name (unless the resource is merged with another resource). 3. Place a label on the operation. Z = A + B; // synopsys label label_name 3. Use the map_to_module directive to indicate the module selection of your choice. This directive must follow the resource declaration. /* synopsys resource resource_name: map_to_module = ”module_name”; */ resource_name is the identifier for your resource and module_name is the name of the module you want bound to it. 5. To select a specific implementation for your design, use the implementation attribute. This attribute must follow the map_to_module directive. /* synopsys resource resource_name: map_to_module = ”module_name”, implementation = ”impl_name”;*/ resource_name is the identifier for your resource and impl_name is the name of the implementation you want bound to it. 6. Use the ops directive to bind the labeled operation to the specific module and implementation. /* synopsys resource resource_name: map_to_module = ”module_name”,
1 / 12
一. 设计要求
设计方案选择要求如下: 编码方式:non-booth 编码,Booth 编码,Booth2 编码(任选一种) 拓扑结构:简单阵列,双阵列,二进制树,Wallace 树(任选一种) 加法器:Ripple Carry Adder,Carry bypass,Carry select,Carry look ahead(任选一 种或采用混合方法)
2 Rn 1 Rn 。 3
初始的点阵有 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 位加法器做最终相加。
表 1 Wallace 资源使用情况
资源 半加器 全加器
数量 22 个 91 个
7 / 12
16 bits
A
PP[i] 1 E E S Half Adder Full Adder
B
C
D
E
F
图 10 构造 Wallace Tree
3) 加法器的选择 使用 DC 综合时,可以指定加法器的实现方式。在 Verilog 代码中,通过注释指定 DC 综 合时选用的加法器类型, 如图 11。 根据 synopsys 提供的 DesignWare Building Block IP user guide,在设计中指定模块实现的方法如下。
图 3 使用 Booth 2 编码的部分积产生电路
S
2. 部分积的累加
由前面的部分积产生电路, 能够得到 8 个部分积, 这些部分积需要经过符号扩展和累加, 才能得出乘法运算的结果。 1) 符号位扩展逻辑 符号位扩展,以扩展 8 位为例,假设符号位是 S,那么扩展的后,得到
4 / 12
S S S S S S S S
215 X 15
214 X 14 2 X 15 X 13
23 X3
22 X2 2 X 3 X1
21 X1
20 X0 2 X 1 X 1 ( 0)
图 1 一个奇数项分解成两个偶数项
计算乘法时,
Y X Y [ ( X 2 k 1 X 2 k 2 X 2 k 1 ) 22 k ]
图 4 基本的符号扩展
如果 S 等于 1,得到的是 0xFF,如果 S 等于 0,得到 0x00。0xFF 加上 1 再舍去溢出位就 得到 0x00, 所以符号扩展的逻辑可以等价于 0xFF+not(S)。
S 1 1 1 1 1 1 1 1 S S S S S S S S S
图 5 符号扩展的等价方法
1. 部分积的产生
我们知道,N 位补码表示的数,它的值等于
val ( X ) X N 1 2N 1 X N 2 2N 2
X 2 22 X1 21 X 0 20
2 / 12
根据 ( X k ) 2k ( X k ) 2k 1 (2 X k ) 2k 1 ,可以把一个奇数项分解成前后两个偶数项 (图 1),那么部分积的数量减少了一半。变换之后,X 的值可以表示为
符号位扩展逻辑..................................................................................................................... 4 构造 Wallace Tree .................................................................................................................. 7 加法器的选择......................................................................................................................... 8