计算机组成与设计(六)—— 乘法器[通俗易懂]

计算机组成与设计(六)—— 乘法器[通俗易懂]乘法的运算过程人们日常习惯的乘法是十进制,但计算机实现起来不方便。首先,需要记录9×9乘法表,每次相乘去表中找结果;其次,将竖式相加也不方便。但二进制却十分方便,冯·诺伊曼在《关于END

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

乘法的运算过程

人们日常习惯的乘法是十进制,但计算机实现起来不方便。首先,需要记录9×9乘法表,每次相乘去表中找结果;其次,将竖式相加也不方便。

但二进制却十分方便,冯·诺伊曼在《关于ENDVAC的报告草案》中说“二进制可以极大简化乘法和除法运算。尤其是对于乘法,不再需要十进制乘法表,也不需要两轮的加法”。

二进制乘法运算过程

计算机组成与设计(六)—— 乘法器[通俗易懂]

观察这个式子,可以发现我们并不需要乘法表,如果乘数位为0,就在中间过程中全补零,如果乘数位为1,就在中间过程补被乘数

 

运算过程的进一步调整

按照上面那种计算的话,需要大量的空间来存储中间结果,还要用一个空间存储积。其实,不难发现,每个中间结果最后都加在乘积上,我们可以将中间结果保存在乘积中,每次用中间结果更新乘积,运算结束时,乘积里面放的就是正确的乘积。

上面说直接对乘积加上被乘数是不准确的,为了满足对齐要求,只需将被乘数左移。

计算机组成与设计(六)—— 乘法器[通俗易懂]

 这样,我们得到了一个适合硬件实现的乘法运算过程。

 

乘法的实现

实现结构

以4-bit数为例,(1000)2 + (1001)2 = (1001000)2

计算机组成与设计(六)—— 乘法器[通俗易懂]

具体流程

  1. 初始化,将Multiplier = 1001,将Multiplicand的低4为设为1000,高4位补零,Product = 0.
  2. 检查乘数寄存器的最低位,如果为1,将被乘数寄存器加到乘积寄存器中,此时控制信号会给加法器一个信号,给乘积寄存器写信号,等到下一个上升沿到来时,会将运算的结果存到乘积寄存器中。如果为0,不管。同时给被乘数寄存器左移信号,给乘数寄存器右移信号,也是在下一个时钟上升沿起作用。
  3. 检测是否经历4次循环

最终的结果如下:

计算机组成与设计(六)—— 乘法器[通俗易懂]

4位的过程对N位同样有效。

N位的流程图

计算机组成与设计(六)—— 乘法器[通俗易懂]

 

 

乘法的优化1 

观察上面N位乘法器的流程图,由于每次信号要等到一个时钟上升沿才起作用,所以1a、2、3过程各用一个周期。其实这三个过程可以并列执行,就降为一个周期了。

计算机组成与设计(六)—— 乘法器[通俗易懂]

 

 乘法的优化2(面积优化)

面积优化就是指减少不必要的硬件资源。对于CPU这样的集成电路来说,它的价格的一个重要因素就是集体管的数量,或者说芯片的面积。因此,在设计各个功能部件的时候,如何减少芯片的面积也是一个重要的方向。

计算机组成与设计(六)—— 乘法器[通俗易懂]

 

 观察上面这个图,我们可以发现如下可以优化的地方:

  • “被乘数寄存器”有8位宽,但其中有效位始终只有4位
  • “乘数寄存器”是4位宽,但其中有效数字每周期减少1位
  • “乘积寄存器”是8位宽,但初始时有效位只有4位且每周期增加1位
  • “加法器”是8位宽,但参与运算的实际有效位置只有4位

 

我们只需逐一改进这些地方,注意,每个部件某个功能去掉,在另一个部件应加上该功能。比如”被乘数寄存器“取消了左移功能,”乘积寄存器“就相应的添加了右移功能。

  • “被乘数寄存器”缩减为4位,且取消左移功能
  • 取消“乘数寄存器”,乘数初始置于”乘积寄存器“低4位
  • ”乘积寄存器“增加右移功能,乘积初始置于其中高4位,随着运算过程不断右移(最高位补0)
  • ”加法器“缩减为4位,”乘积寄存器“只有高4位参与运算

优化后的图如下:

计算机组成与设计(六)—— 乘法器[通俗易懂]

 注:乘法寄存器实际应该是9位,以保存加法器的进位,但这里保持8位,以突出使用优化后的演变。

N位乘法器优化同理

计算机组成与设计(六)—— 乘法器[通俗易懂]

 

 

参考链接:https://www.coursera.org/learn/jisuanji-zucheng/lecture/JioZX/404-cheng-fa-qi-de-you-hua-2

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/167115.html原文链接:https://javaforall.net

(0)
上一篇 2022年8月5日 下午6:36
下一篇 2022年8月5日 下午6:46


相关推荐

  • android 电脑浏览器,这5种轻量级的国内Android浏览器,都有自己的“专有秘密”…

    android 电脑浏览器,这5种轻量级的国内Android浏览器,都有自己的“专有秘密”…在上一篇文章中,我整理并测试了六种来自国际力量的Android浏览器,包括流行的Chrome,具有丰富扩展功能的Firefox,具有隐私和安全性的FirefoxFocus,具有悠久历史的Opera,以及后来的MicrosoftEdge,Yandex除了主要国际制造商生产的产品外,国内开发商还致力于Android浏览器类别。他们希望在保持简单设计的基础上,寻求提供更多差异化的功能。这次我选择了五…

    2022年5月15日
    170
  • matlab中误差计算公式_mse均方误差计算公式

    matlab中误差计算公式_mse均方误差计算公式残差平方和(SSE)计算公式:代码实现:sse=sum((YReal-YPred).^2);均方误差(MSE)计算公式:代码实现:mse=sqrt(sum((YReal-YPred).^2))./2;平均绝对误差(MAE)计算公式:代码实现:mae=mean(abs(YReal-YPred));平均绝对百分比误差(MAPE)计算公式:代码实现mape=mean(abs((YReal-YPred)./YReal));均方根误差(R

    2022年9月30日
    7
  • 深度学习环境配置1——windows下的tensorflow-gpu=1.13.2环境配置

    深度学习环境配置1——windows下的tensorflow-gpu=1.13.2环境配置神经网络学习小记录42——windows下的tensorflow-gpu=1.13.2环境配置学习前言环境内容Anaconda安装下载Cudnn和CUDA配置tensorflow环境安装VSCODE学习前言好多人问环境怎么配置,还是出个教程吧。环境内容tensorflow-gpu:1.13.2keras:2.1.5numpy:1.17.4Anaconda安装取网上搜索Anacon…

    2022年5月2日
    45
  • Kali linux 安装中文输入法

    Kali linux 安装中文输入法1 首先 设置源 在终端中键入如下代码 打开源设置文件 leafpad etc apt sources list 将 source list 文件清空 保存如下信息 debhttp http kali org kalikalimain freecontribd srchttp http kali org kalikalimain freecontr

    2026年3月16日
    1
  • 【Unity3D 灵巧小知识点】 ☀️ | 求解 两个向量的夹角度数

    【Unity3D 灵巧小知识点】 ☀️ | 求解 两个向量的夹角度数Unity 小科普老规矩 先介绍一下 Unity 的科普小知识 Unity 是实时 3D 互动内容创作和运营平台 包括游戏开发 美术 建筑 汽车设计 影视在内的所有创作者 借助 Unity 将创意变成现实 Unity 平台提供一整套完善的软件解决方案 可用于创作 运营和变现任何实时互动的 2D 和 3D 内容 支持平台包括手机 平板电脑 PC 游戏主机 增强现实和虚拟现实设备 也可以简单把 Unity 理解为一个游戏引擎 可以用来专业制作游戏 Unity 小知识点学习求解两个向量的夹角度数

    2026年3月26日
    2
  • KaTeX 数学符号列表[通俗易懂]

    KaTeX 数学符号列表[通俗易懂]数学符号希腊字母LaTexKaTex===isequalto=≠\ne̸​=isnotequalto\ne≈\approx≈isapproximatelyequalto\approx+++plus+−-−minus-±;∓\pm;\mp±;∓plus-minus;minus-plus\pm;\mp…

    2025年7月9日
    7

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号