好的,我们从基本的阵列乘法器开始,逐步介绍几种改进的乘法器类型,重点阐述它们的改进方法和优势。
二进制乘法的基本原理与十进制乘法类似,也是通过生成部分积(partial products)并将它们相加得到最终结果。对于两个N位的二进制数A和B相乘,A × B,通常会产生N个部分积。
1. 阵列乘法器 (Array Multiplier)
  • 基本原理: 阵列乘法器是直接将手算乘法过程硬件化的一种实现。它生成所有N个部分积,然后使用一个由全加器(Full Adder, FA)和半加器(Half Adder, HA)组成的二维阵列来并行地求和这些部分积。
    • 生成部分积:第 i 个部分积是乘数B的第 i 位 (Bi) 与被乘数A的乘积 (A×Bi)。由于 Bi 是0或1,所以 A×Bi 要么是全0 (如果 Bi=0),要么是A本身 (如果 Bi=1)。这可以通过N个AND门并行实现。
    • 求和:将这些部分积根据其权重(移位)对齐,然后使用一个由加法器组成的阵列逐位相加。最简单的阵列使用行或列方向上的波纹进位加法器(ripple-carry adder)。
  • 改进方法: 阵列乘法器本身是一种基础实现,其结构相对规整。
  • 优势:
    • 结构规整: 阵列结构非常规则,易于在VLSI(超大规模集成电路)中进行布局布线。
    • 易于理解和设计: 直接对应手算乘法,概念直观。
  • 劣势:
    • 速度慢: 主要缺点在于求和过程中的进位传播延迟。在一个由波纹进位加法器组成的阵列中,进位需要逐级传播,导致整个乘法器的延迟与位数N的平方(O(N2))或至少是N与N相加的深度(O(N) 在部分积产生后,求和阶段的延迟约为 O(N) 乘以阵列的深度)成正比。对于大位数的乘法,延迟非常大。
2. 改进求和方式的乘法器 (Reducing Summation Delay)
阵列乘法器的主要瓶颈在于部分积的求和过程。改进的方法主要集中在如何更快地将这些部分积加起来。
  • 利用高速加法器: 可以在阵列乘法器的求和中使用更快的加法器,如超前进位加法器(Carry-Lookahead Adder, CLA),但这主要加速了最后一步的加法,对整个阵列的深度和结构改进有限。
  • 使用进位保存加法器树 (Carry-Save Adder Tree): 这是提高乘法器速度的关键技术。
    • 基本原理: 进位保存加法器(CSA)是一种三输入的加法器(两个加数和一个进位输入),输出两个值:一个和(Sum)和一个进位(Carry)。关键在于,CSA的输出进位不立即传播到下一位,而是作为下一级的输入。这打破了传统的逐位进位传播,使得求和延迟大大降低。
    • 结构: 采用树状结构,用CSA将多行部分积逐步归约。每层CSA树将3行(或2行,如果使用2-input CSA)减少到2行(一个和行,一个进位行)。经过多层CSA树后,最终只剩下两行:一个总和行和一个总进位行。
    • 最后求和: 最后剩下的这两行需要使用一个传统的快速加法器(如CLA)进行一次常规加法,得到最终结果。
    • 华莱士树乘法器 (Wallace Tree Multiplier):
      • 改进方法: 采用CSA树结构,目标是最小化树的级数(深度),以达到最快的求和速度。它不关心每层使用了多少个加法器,只关注如何尽快将行数从N减少到2。
      • 优势: 求和延迟显著降低,与位数的对数(O(logN))成正比。这比阵列乘法器快得多。
      • 劣势: 结构不规则,布线复杂,可能需要更多的加法器单元。
    • 达达树乘法器 (Dadda Tree Multiplier):
      • 改进方法: 也采用CSA树结构,但与华莱士树略有不同。达达树的目标是在满足求和速度要求的前提下,最小化所需的加法器数量。它遵循一套规则来决定每层CSA树的配置,以控制每层减少后的行数。
      • 优势: 延迟与华莱士树相当(O(logN)),但在某些实现中可能使用更少的加法器单元,优化了硬件成本。
      • 劣势: 结构同样不规则,布线复杂。
3. 减少部分积数量的乘法器 (Reducing the Number of Partial Products)
除了加速求和,另一种提高乘法器速度的方法是减少需要相加的部分积的数量。
  • 布斯乘法器 (Booth Multiplier) - 特别是基4或更高基数:
    • 基本原理: 通过编码乘数B来减少部分积的数量。它检查乘数B的相邻位(通常是两位一组,加上一个重叠位),根据位模式来决定当前步的操作(加被乘数A、减被乘数A、加2A、减2A或加0),并将结果左移两位(对于基4)。
    • 改进方法 (基4 Booth Encoding为例): 将N位乘数B编码为N/2个项。例如,检查 Bi+1BiBi−1 三位(B−1=0),根据这三位的组合产生相应的操作:
      • 000 -> +0 × A
      • 001 -> +1 × A
      • 010 -> +1 × A
      • 011 -> +2 × A
      • 100 -> -2 × A
      • 101 -> -1 × A
      • 110 -> -1 × A
      • 111 -> +0 × A 然后将这些结果左移2位(相当于乘以4)。这样,N位的乘数B被转换为 N/2 个需要相加的部分积(尽管部分积的值可能是 ±A,±2A,0)。
    • 优势:
      • 减少部分积数量: 基4 Booth编码将部分积数量减半。这意味着后续的求和阶段(无论是使用阵列还是树)需要处理的行数减少,从而降低了求和延迟。
      • 高效处理有符号数: Booth算法天然支持处理2's complement表示的有符号数。
      • 可以进一步推广到更高基数(如基8),进一步减少部分积数量,但生成部分积的逻辑更复杂。
    • 劣势:
      • 生成部分积的逻辑比简单的AND门阵列要复杂,需要根据编码结果进行选择或计算(例如生成2A)。
      • 如果与CSA树结合使用,虽然部分积数量减少,但生成部分积的复杂度会略微增加整体设计的复杂性。
总结
  • 阵列乘法器是最简单直观的硬件实现,结构规整但速度慢。
  • 通过 改进求和方式 (如使用CSA树的华莱士树和达达树) 可以显著降低求和延迟,将延迟从O(N)降低到O(logN),但结构不规则。
  • 通过 减少部分积数量 (如使用Booth编码) 可以从源头上减少需要相加的项,从而间接加速求和过程,并且天然支持有符号数。
现代高性能乘法器通常结合使用减少部分积数量的技术(如Radix-4 Booth编码)和快速求和树(如华莱士树或达达树),以实现最快的乘法运算速度。选择哪种结构取决于性能要求、硬件成本、设计复杂度和布线便利性等因素。
这个流程图展示了组合逻辑乘法器的演变路线,从基本的阵列乘法器开始,沿着两个主要改进方向发展:改进求和方式和减少部分积数量。最终,这些改进技术在现代高性能乘法器中得到结合使用。
Loading...
Z_cosy
Z_cosy
浙江大学电气工程学院本科生
公告
🎉Welcome to Z-cosy🎉
-- 食用指南 ---
目前只有课程笔记以及电控学习笔记
陆续会整理更多内容!