4、定点乘法器设计:阵列乘法器、Booth编码、Wallace树、压缩器结构、流水线划分与面积速度权衡

定点乘法器是ASIC前端设计中最高频使用的算术单元之一,无论是FIR滤波器、FFT蝶形运算、矩阵乘加器,还是神经网络推理引擎中的卷积累加路径,乘法器的微架构选择都直接决定数据通路的时序收敛难度、面积开销与功耗水平。本章从乘法器的基本算法出发,依次剖析阵列乘法器、Booth编码、Wallace树与压缩器结构,并重点讨论流水线划分策略与面积-速度权衡方法,帮助设计者在RTL编码之前建立清晰的微架构决策框架。

定点乘法器微架构决策与流水线设计 A[N-1:0] 被乘数 B[M-1:0] 乘数 Booth编码选择 Radix-2 / Radix-4 部分积数量 N/2 部分积生成 PP0 ~ PPk-1 压缩器树 Wallace / 4-2压缩器 最终加法器 CPA / CLA 进位传播 P[N+M-1:0] 乘积输出 流水线寄存器划分点:编码后 / 压缩树中 / 最终加法前 面积优化方向 阵列乘法器 / 串行Booth 减少压缩器级数 速度优化方向 Wallace树 / 4-2压缩器 多级流水线 / 超前进位 ■ 数据通路 ■ 控制/编码 ■ 压缩/加法 ■ 流水线寄存器

4.1 阵列乘法器:从移位加到规则化阵列

核心原理:阵列乘法器(Array Multiplier)是最直观的定点乘法实现方式。其基本思想是将乘法分解为“产生部分积”和“累加部分积”两个阶段。对于N位乘M位的无符号乘法,共产生N个M位部分积,每个部分积对应乘数的一位与被乘数的逻辑与结果,并按照位权左移排列。累加过程通过由全加器(FA)和半加器(HA)组成的规则阵列完成,阵列的拓扑结构直接映射了部分积的加权求和关系。

阵列乘法器的关键特征在于其规整性:所有加法器单元按二维网格排列,每个单元仅与相邻单元连接,没有全局长走线。这种规整性使得布局布线(Place & Route)阶段拥塞风险低,时序预测性好,非常适合作为标准单元库中的硬核IP。然而,其代价是加法器数量为O(N²),且关键路径从输入到输出需要穿越整个阵列的对角线,延迟约为O(N)级加法器。

乘法器类型部分积数量加法器数量关键路径延迟适用场景
阵列乘法器(无符号)NN×(N-1) 个FA约2N级FA小位宽(≤8位)、低功耗
阵列乘法器(有符号补码)N(含符号扩展)N×(N-1) 个FA + 修正逻辑约2N级FA教学验证、简单DSP
Booth Radix-4N/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编码或压缩树结构。

实战经验:在8位×8位无符号乘法场景下,阵列乘法器综合后面积约为等效Booth乘法器的70%,功耗低约30%,但延迟多出约40%。如果设计运行在50MHz以下且面积紧张,阵列乘法器是合理选择。对于16位以上乘法,阵列乘法器的延迟会迅速恶化,不建议使用。

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编码的具体步骤为:

  1. 在乘数最低位LSB右侧补一个“0”作为重叠位,形成(N+1)位扩展序列。
  2. 从LSB开始,每次取3位(b[2i+1], b[2i], b[2i-1]),根据编码表生成对应的部分积值。
  3. 每个部分积相对于前一个部分积左移2位。
  4. 符号扩展所有部分积到最终乘积位宽,并处理负部分积的取反加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%。

常见误区:Booth编码本身不减少加法器数量,只减少部分积数量。如果后续仍使用简单的行波进位加法器阵列累加,延迟改善有限。Booth编码必须与压缩树(Wallace树或4-2压缩器)配合才能发挥最大优势。另外,有符号乘法中符号扩展位的处理容易出错,建议在RTL中显式声明所有部分积为有符号数,并统一扩展到乘积位宽。

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)
半加器 HA221:10.60.5
全加器 FA323:21.01.0
4-2压缩器535:31.52.0
5-3压缩器636:32.02.8

判断方法:选择压缩器结构时,需要权衡压缩比与布线复杂度。4-2压缩器因其规则的“之字形”互连模式,在标准单元流程中布线拥塞最小,是工业界最常用的选择。Wallace树的不规则互连虽然理论延迟最低,但实际布局布线后可能因绕线延迟而失去优势。建议在综合前用Design Compiler或Genus分别尝试Wallace树和4-2压缩器结构,比较综合后时序与面积。

工程实践:在32位×32位乘法器设计中,采用Booth Radix-4编码产生17个部分积,使用4-2压缩器树进行4级压缩(17→9→5→3→2),最后用64位超前进位加法器(CLA)完成最终求和。综合结果显示,相比纯阵列乘法器,关键路径延迟从6.2ns降至2.8ns(改善55%),面积增加约20%。如果进一步采用5-3压缩器,延迟可再降0.3ns,但面积增加12%,且布线拥塞度上升15%。

4.4 流水线划分与面积-速度权衡

核心原理:流水线划分的本质是在组合逻辑路径中插入寄存器,将长路径切割为多个短路径,从而提高时钟频率。乘法器的流水线划分点通常有三个:Booth编码后(部分积生成后)、压缩树中间级、最终加法器前。每个划分点都有不同的面积代价和时序收益。插入一级流水线寄存器会增加约N×M个触发器的面积,但可以将关键路径缩短为原来的1/2~1/3。

操作流程:流水线划分的决策步骤如下:

  1. 综合无流水线版本,获取关键路径延迟Tcomb和目标时钟周期Tclk。
  2. 计算所需流水线级数P = ceil(Tcomb / (Tclk × 0.85)),0.85为时序余量系数。
  3. 根据P值选择划分点:P=1时在最终加法器前插入;P=2时在Booth编码后和最终加法器前各插一级;P≥3时需在压缩树中间插入。
  4. 评估面积增加:每级流水线增加约(N+M)×位宽个触发器面积。
  5. 验证时序:重新综合并检查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)。

风险提示:流水线级数并非越多越好。每增加一级流水线,除了面积开销外,还会增加输入到输出的延迟(Latency),对于依赖乘法结果进行反馈运算的电路(如递归滤波器),过高的延迟会破坏数据依赖性。此外,多级流水线需要额外的时钟门控和复位策略,功耗可能增加15%~25%。在低功耗设计中,应优先考虑减少压缩器级数而非增加流水线。

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)。
复盘经验:在某5G基带芯片的FIR滤波器设计中,最初使用16位阵列乘法器,关键路径4.2ns无法满足400MHz目标。改为Booth Radix-4 + 4-2压缩器后,关键路径降至2.5ns,但仍差0.3ns。最终通过插入2级流水线(Booth编码后和压缩树第2级后)并改用Kogge-Stone最终加法器,关键路径降至1.8ns,满足时序。面积从5200μm²增至6800μm²,但功耗仅增加8%(得益于操作数隔离)。该案例说明:乘法器优化需要算法、微架构、流水线三管齐下,单一手段往往不够。

定点乘法器设计是ASIC前端中“面积-速度-功耗”三角权衡的典型代表。设计者需要根据具体应用场景,在阵列乘法器的规整性、Booth编码的部分积缩减、Wallace树的对数延迟以及流水线的时序切割之间找到最优平衡点。建议在项目早期进行多方案综合对比,用数据驱动决策,而非凭经验猜测。同时,务必在RTL中保留参数化的位宽和流水线级数配置,以便后期根据后端时序反馈进行快速调整。