盘算机构成原理(九):乘法器

[复制链接]
发表于 2025-11-11 06:13:48 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
乘法器原理

乘法器的工作原理可以用二进制乘法来分析。二进制乘法和十进制乘法类似,通过部门积的累加得到效果。
部门积的天生

在二进制乘法中,每一位的乘积是两个二进制数位的 与运算(0 × 0 = 0,1 × 0 = 0,0 × 1 = 0,1 × 1 = 1)。比方:
  1.   A = 1101  (13 in decimal)
  2. × B = 1011  (11 in decimal)
  3. --------------
  4.       1101   (部分积1,对应 B 的最低位)
  5. +    0000    (部分积2,B 的次低位为 0)
  6. +   1101     (部分积3,B 的次高位为 1)
  7. +  1101      (部分积4,B 的最高位为 1)
  8. --------------
  9.   10011111   (143 in decimal)
复制代码
累加器的利用

乘法器通过天生部门积,并利用一个累加器不停相加终极得到效果。
乘法器的分类

串行乘法器


  • 特点:

    • 利用移位寄存器和一个累加器。
    • 部门积逐位天生并累加。

  • 长处:

    • 硬件简朴,占用资源少。

  • 缺点:

    • 速率慢,每次操纵须要多个时钟周期。

  • 算法:

    • 从最低有效位到最高有效位逐位处置惩罚乘数。
    • 每处置惩罚一位,若该位为1,则累加乘数。
    • 移位操纵用来对应权重增长。

  1. +-----------------+
  2. |  被乘数寄存器  | --> 左移
  3. +-----------------+
  4.        ^
  5.        |       +----------------+
  6.        +------>+ 累加器寄存器   |  (累加部分积)
  7.        +------>+----------------+
  8.        ^
  9.        |       +----------------+
  10.        +------>+ 乘数寄存器     | --> 右移
  11.                +----------------+
复制代码
并行乘法器


  • 特点:

    • 同时生玉成部部门积并举行累加。

  • 长处:

    • 速率快,只需少量时钟周期。

  • 缺点:

    • 硬件复杂,资源占用高。

  • 实现方式:

    • 利用逻辑门实现。
    • 可利用加法器树(如Wallace树)优化部门积的累加过程,镌汰延长。

  1. 乘数位  --> 部分积生成器 --> 加法器树 --> 最终结果
  2. 被乘数位
复制代码
Booth 乘法器


  • 特点:

    • 针对有符号数优化,镌汰部门积的数目。
    • 通过对乘数举行编码(Booth 编码)镌汰操纵次数。

  • 长处:

    • 得当处置惩罚有符号乘法。
    • 可以有效镌汰硬件复杂度。

  • 算法焦点:

    • 检测乘数的相邻位变革,克制逐位处置惩罚部门积。

阵列乘法器


  • 特点:

    • 利用一个阵列结构,将乘法分解成多个加法和移位操纵。

  • 长处:

    • 可并行盘算,进步运算速率。
    • 得当在硬件中实现。

  • 缺点:

    • 硬件资源斲丧较多。

  1. 被乘数
  2. × 乘数
  3. --------------
  4.   部分积阵列 --> 加法阵列 --> 最终结果
复制代码
乘法器的实现步调

部门积天生


  • 通过对每位乘数和乘数位的与运算天生部门积。
部门积对齐


  • 通过移位操纵,使部门积对应权重精确对齐。
部门积聚加


  • 串行乘法器利用一个累加器徐徐累加部门积。
  • 并行乘法器利用多个加法器或加法器树快速完成部门积聚加。
乘法器在硬件中的实现

逻辑门实现


  • 利用根本的逻辑门(如与门、或门、异或门)实现部门积的天生。
  • 加法器用于部门积的累加。
FPGA 或 ASIC 实现


  • 在 FPGA 中,可以通过硬件形貌语言(如 Verilog 或 VHDL)实现乘法器。
  • 硬件平台中,当代编译器通常会将乘法优化为内置乘法器单位。
浮点数乘法器


  • 对于浮点数,须要处置惩罚尾数的乘法、指数的加法,并对效果举行规格化。
示例(c++模拟乘法器)
  1. #include <iostream>
  2. int multiply(int multiplicand, int multiplier) {
  3.     int result = 0;
  4.     while (multiplier != 0) {
  5.         if (multiplier & 1) { // 如果当前位为1
  6.             result += multiplicand;
  7.         }
  8.         multiplicand <<= 1;   // 左移乘数
  9.         multiplier >>= 1;    // 右移乘数
  10.     }
  11.     return result;
  12. }
  13. int main() {
  14.     int a = 13, b = 11;
  15.     std::cout << "Result: " << multiply(a, b) << std::endl; // 输出 143
  16.     return 0;
  17. }
复制代码
回复

使用道具 举报

登录后关闭弹窗

登录参与点评抽奖  加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表