1. 16位乘法器的设计挑战与优化思路
在CPU核、DSP内核和NPU设计中,乘法器是最关键的算术单元之一。传统的16位乘法器采用最直接的"移位-相加"方法,如图1所示,需要生成16个部分积(partial product)并进行累加。这种设计存在两个主要问题:
- 面积开销大:16个部分积意味着需要大量全加器(Full Adder)构建加法树,在芯片上占用可观的硅面积
- 时序性能差:长进位链(carry propagation)导致关键路径延迟增加,限制了时钟频率的提升
以一个16×16无符号乘法为例,直接实现需要:
- 16个AND门阵列生成部分积
- 约240个全加器(15级加法,每级约16个加法器)
- 关键路径延迟达到15个全加器延迟 + 1个AND门延迟
这种资源消耗在追求高性能、低功耗的现代处理器设计中是不可接受的。Booth编码技术的引入,正是为了解决这个核心矛盾——如何在保证计算精度的前提下,显著减少部分积的数量。
关键思路:通过重新编码乘数(multiplier),将连续的1转换为加减运算,例如"0011110"可以表示为"01000-10"(即2^5 - 2^1),从而减少非零位数量。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 二进制数的统一表示方法
2.1 有符号数的补码表示
在讨论Booth编码前,必须建立统一的数值表示框架。现代计算机系统普遍采用补码(two's complement)表示有符号整数,其核心特性包括:
- 最高位为符号位:0表示非负数,1表示负数
- 非负数范围:0到2^(n-1)-1(对于16位是0到32767)
- 负数范围:-2^(n-1)到-1(对于16位是-32768到-1)
数学表达式上,一个n位补码数B可以表示为:
B = -b_{n-1}·2^{n-1} + Σ_{i=0}^{n-2} b_i·2^i
这种表示方法实现了:
- 零的唯一表示(全0)
- 加减法运算的统一处理(无需区分符号)
- 硬件实现的简便性(符号位直接参与运算)
2.2 补码的等价变换
通过数学推导,我们可以将补码表示统一为更适用于乘法运算的形式。对于负数B(b_{n-1}=1),其绝对值可以表示为:
|B| = 2^n - X,其中X是将B视为无符号数时的值
因此,B可以重写为:
B =
