4、定点乘法器设计:阵列乘法器、Booth编码、Wallace树、压缩器结构、流水线划分与面积速度权衡
定点乘法器是ASIC前端设计中最高频使用的算术单元之一,无论是FIR滤波器、FFT蝶形运算、矩阵乘加器,还是神经网络推理引擎中的卷积累加路径,乘法器的微架构选择都直接决定数据通路的时序收敛难度、面积开销与功耗水平。本章从乘法器的基本算法出发,依次剖析阵列乘法器、Booth编码、Wallace树与压缩器结构,并重点讨论流水线划分策略与面积-速度权衡方法,帮助设计者在RTL编码之前建立清晰的微架构决策框架。
4.1 阵列乘法器:从移位加到规则化阵列
核心原理:阵列乘法器(Array Multiplier)是最直观的定点乘法实现方式。其基本思想是将乘法分解为“产生部分积”和“累加部分积”两个阶段。对于N位乘M位的无符号乘法,共产生N个M位部分积,每个部分积对应乘数的一位与被乘数的逻辑与结果,并按照位权左移排列。累加过程通过由全加器(FA)和半加器(HA)组成的规则阵列完成,阵列的拓扑结构直接映射了部分积的加权求和关系。
阵列乘法器的关键特征在于其规整性:所有加法器单元按二维网格排列,每个单元仅与相邻单元连接,没有全局长走线。这种规整性使得布局布线(Place & Route)阶段拥塞风险低,时序预测性好,非常适合作为标准单元库中的硬核IP。然而,其代价是加法器数量为O(N²),且关键路径从输入到输出需要穿越整个阵列的对角线,延迟约为O(N)级加法器。
| 乘法器类型 | 部分积数量 | 加法器数量 | 关键路径延迟 | 适用场景 |
|---|---|---|---|---|
| 阵列乘法器(无符号) | N | N×(N-1) 个FA | 约2N级FA | 小位宽(≤8位)、低功耗 |
| 阵列乘法器(有符号补码) | N(含符号扩展) | N×(N-1) 个FA + 修正逻辑 | 约2N级FA | 教学验证、简单DSP |
| Booth Radix-4 | N/2 + 1 | 约N²/2 个FA | 约N级FA + 编码延迟 | 16~32位通用乘法 |
| Wallace树 + 4-2压缩 | N/2(Booth后) | 约N²/2 个FA(压缩器) | 约log₁.₅(N)级压缩 + 1级CPA | 高速乘法器(≥32位) |
判断方法:选择阵列乘法器时,需要评估三个约束条件:位宽(N×M是否超过12×12)、时序余量(目标时钟周期是否大于阵列关键路径延迟的1.2倍)、面积预算(是否允许O(N²)的加法器开销)。如果三个条件均满足,阵列乘法器是面积效率最优的选择;否则应考虑Booth编码或压缩树结构。
4.2 Booth编码:减少部分积数量的核心算法
核心原理:Booth编码的核心思想是利用乘数中连续的“0”或“1”位串来减少部分积的数量。Radix-2 Booth编码每次考察乘数的相邻两位(含一位重叠),将乘数编码为{-1, 0, +1}三种值;Radix-4 Booth编码(Modified Booth)每次考察三位(两位新位+一位重叠位),将乘数编码为{-2, -1, 0, +1, +2}五种值,从而将部分积数量从N减少到N/2+1。编码后的部分积通过移位和取反操作生成,其中+2倍通过左移一位实现,-1/-2倍通过取反加1实现。
操作流程:Radix-4 Booth编码的具体步骤为:
- 在乘数最低位LSB右侧补一个“0”作为重叠位,形成(N+1)位扩展序列。
- 从LSB开始,每次取3位(b[2i+1], b[2i], b[2i-1]),根据编码表生成对应的部分积值。
- 每个部分积相对于前一个部分积左移2位。
- 符号扩展所有部分积到最终乘积位宽,并处理负部分积的取反加1。
// Radix-4 Booth编码表(部分)
// b[2i+1] b[2i] b[2i-1] | 操作
// 0 0 0 | 0
// 0 0 1 | +A
// 0 1 0 | +A
// 0 1 1 | +2A
// 1 0 0 | -2A
// 1 0 1 | -A
// 1 1 0 | -A
// 1 1 1 | 0
案例拆解:以8位乘数B=0b01101110为例,补零后为0b01101110_0。从LSB开始分组:(1,0,0)→-2A,(1,1,0)→-A,(0,1,1)→+2A,(0,0,0)→0。共产生5个部分积(N/2+1=5),相比阵列乘法器的8个部分积减少了37.5%。在16位乘法器中,部分积从16个降至9个,压缩树级数从4级降至3级,关键路径延迟可缩短约25%。
4.3 Wallace树与压缩器结构:对数级延迟的压缩网络
核心原理:Wallace树的核心思想是并行压缩:将多个部分积按列分组,使用全加器(3:2压缩器)和半加器(2:2压缩器)同时进行进位保存加法,将每列的多个位压缩为两个位(和位与进位位),经过多级压缩后最终只剩两行,再由一个快速进位传播加法器(CPA)完成最终求和。Wallace树的压缩级数约为log₁.₅(N/2),对于16位乘法器,部分积从9个压缩到2个仅需3级;而阵列乘法器需要8级串行累加。
压缩器结构对比:实际工程中更常用的是4-2压缩器,它由两个全加器级联构成,但具有更规则的互连结构。4-2压缩器接受5个输入(4个数据位+1个进位输入),产生3个输出(和位、进位输出、进位传递),其延迟仅为单个全加器的约1.5倍,但压缩效率是3:2压缩器的两倍。此外,还有5-3压缩器、7-3压缩器等更高阶结构,但面积开销和布线复杂度会显著增加。
| 压缩器类型 | 输入数 | 输出数 | 压缩比 | 延迟(相对FA) | 面积(相对FA) |
|---|---|---|---|---|---|
| 半加器 HA | 2 | 2 | 1:1 | 0.6 | 0.5 |
| 全加器 FA | 3 | 2 | 3:2 | 1.0 | 1.0 |
| 4-2压缩器 | 5 | 3 | 5:3 | 1.5 | 2.0 |
| 5-3压缩器 | 6 | 3 | 6:3 | 2.0 | 2.8 |
判断方法:选择压缩器结构时,需要权衡压缩比与布线复杂度。4-2压缩器因其规则的“之字形”互连模式,在标准单元流程中布线拥塞最小,是工业界最常用的选择。Wallace树的不规则互连虽然理论延迟最低,但实际布局布线后可能因绕线延迟而失去优势。建议在综合前用Design Compiler或Genus分别尝试Wallace树和4-2压缩器结构,比较综合后时序与面积。
4.4 流水线划分与面积-速度权衡
核心原理:流水线划分的本质是在组合逻辑路径中插入寄存器,将长路径切割为多个短路径,从而提高时钟频率。乘法器的流水线划分点通常有三个:Booth编码后(部分积生成后)、压缩树中间级、最终加法器前。每个划分点都有不同的面积代价和时序收益。插入一级流水线寄存器会增加约N×M个触发器的面积,但可以将关键路径缩短为原来的1/2~1/3。
操作流程:流水线划分的决策步骤如下:
- 综合无流水线版本,获取关键路径延迟Tcomb和目标时钟周期Tclk。
- 计算所需流水线级数P = ceil(Tcomb / (Tclk × 0.85)),0.85为时序余量系数。
- 根据P值选择划分点:P=1时在最终加法器前插入;P=2时在Booth编码后和最终加法器前各插一级;P≥3时需在压缩树中间插入。
- 评估面积增加:每级流水线增加约(N+M)×位宽个触发器面积。
- 验证时序:重新综合并检查setup/hold时序是否满足。
案例拆解:某AI加速器需要16位×16位有符号乘法器,目标时钟频率500MHz(周期2ns)。无流水线综合结果:关键路径3.8ns,面积4200μm²。计算所需级数P=ceil(3.8/(2×0.85))=ceil(2.24)=3级。划分方案:第1级在Booth编码后(部分积生成),第2级在压缩树第2级后,第3级在最终加法器后。综合结果:关键路径1.9ns,面积5800μm²,面积增加38%。进一步优化:将第2级划分点移至压缩树第1级后,关键路径降至1.7ns,但面积增加至6100μm²。最终选择前者,因为时序余量已足够(1.9ns < 2ns×0.95)。
4.5 设计决策总结与常见误区
决策框架:定点乘法器的微架构选择应遵循以下优先级:位宽决定算法选型(≤8位用阵列,9~16位用Booth+Wallace,≥32位用Booth+4-2压缩器+多级流水线);时序余量决定流水线级数;面积预算决定压缩器类型和是否共享硬件;功耗目标决定是否采用门控时钟和操作数隔离技术。
常见误区汇总:
- 误区一:认为Booth编码一定比阵列乘法器面积小。实际上Booth编码需要额外的编码逻辑和部分积生成电路,在小位宽(≤8位)下面积反而更大。
- 误区二:忽略符号扩展位的处理。有符号乘法中,每个部分积都需要符号扩展到乘积位宽,否则结果错误。建议使用Verilog的signed关键字或显式位扩展。
- 误区三:压缩树级数计算错误。Wallace树的级数不是简单的log₂(N),而是满足递推关系T(k)=T(ceil(2k/3))+1,其中k为部分积数量。
- 误区四:流水线寄存器插入位置不当。如果插在Booth编码之前,编码逻辑仍在关键路径上,收益有限;应插在编码之后。
- 误区五:忽视最终加法器的优化。即使压缩树再快,如果最终CPA使用行波进位加法器,关键路径仍可能长达O(N)。应使用CLA或并行前缀加法器(如Kogge-Stone)。
定点乘法器设计是ASIC前端中“面积-速度-功耗”三角权衡的典型代表。设计者需要根据具体应用场景,在阵列乘法器的规整性、Booth编码的部分积缩减、Wallace树的对数延迟以及流水线的时序切割之间找到最优平衡点。建议在项目早期进行多方案综合对比,用数据驱动决策,而非凭经验猜测。同时,务必在RTL中保留参数化的位宽和流水线级数配置,以便后期根据后端时序反馈进行快速调整。