深入浅出计算机组成原理
徐文浩
bothub 创始人
70432 人已学习
新⼈⾸单¥68
登录后,你可以任选4讲全文学习
课程目录
已完结/共 62 讲
深入浅出计算机组成原理
15
15
1.0x
00:00/00:00
登录|注册

14 | 乘法器:如何像搭乐高一样搭电路(下)?

计算机体系结构中的RISC和CISC
硬件电路的特点
利用电路的并行性
电路展开
门延迟和时钟频率
电路并行
并联加速乘法
降低时间复杂度
乘法计算速度与位数的关系
顺序计算
乘法器的实现
列竖式的乘法
乘法退化成位移和加法
二进制乘法
课后思考
推荐阅读
总结延伸
电路并行
并行加速方法
节约开关的方法
顺序乘法的实现过程
乘法器

该思维导图由 AI 生成,仅供参考

和学习小学数学一样,学完了加法之后,我们自然而然就要来学习乘法。既然是退回到小学,我们就把问题搞得简单一点,先来看两个 4 位数的乘法。这里的 4 位数,当然还是一个二进制数。我们是人类而不是电路,自然还是用列竖式的方式来进行计算。
十进制中的 13 乘以 9,计算的结果应该是 117。我们通过转换成二进制,然后列竖式的办法,来看看整个计算的过程是怎样的。

顺序乘法的实现过程

从列出竖式的过程中,你会发现,二进制的乘法有个很大的优点,就是这个过程你不需要背九九乘法口诀表了。因为单个位置上,乘数只能是 0 或者 1,所以实际的乘法,就退化成了位移和加法。
在 13×9 这个例子里面,被乘数 13 表示成二进制是 1101,乘数 9 在二进制里面是 1001。最右边的个位是 1,所以个位乘以被乘数,就是把被乘数 1101 复制下来。因为二位和四位都是 0,所以乘以被乘数都是 0,那么保留下来的都是 0000。乘数的八位是 1,我们仍然需要把被乘数 1101 复制下来。不过这里和个位位置的单纯复制有一点小小的差别,那就是要把复制好的结果向左侧移三位,然后把四位单独进行乘法加位移的结果,再加起来,我们就得到了最终的计算结果。
对应到我们之前讲的数字电路和 ALU,你可以看到,最后一步的加法,我们可以用上一讲的加法器来实现。乘法因为只有“0”和“1”两种情况,所以可以做成输入输出都是 4 个开关,中间用 1 个开关,同时来控制这 8 个开关的方式,这就实现了二进制下的单位的乘法。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

本文介绍了乘法器的基本原理和优化方法。通过将乘法转化为加法和位移的操作,可以用简单的电路实现乘法运算。文章指出,顺序乘法器虽然简单,但计算速度较慢,时间复杂度为O(N),需要进行多次加法操作。为了提高计算速度,可以采用并行加速方法,将多个加法操作同时进行,从而降低时间复杂度至O(logN)。然而,并行加速方法需要更多的硬件资源来存储中间计算结果。文章还讨论了电路的并行性和门延迟的问题,以及硬件电路设计中的权衡。通过精巧地设计电路,可以用较少的门电路和寄存器完成复杂的乘法运算。最后,文章提到了计算机体系结构中RISC和CISC的经典历史路线之争,以及对读者的推荐阅读和课后思考。整体而言,本文深入浅出地介绍了乘法器的实现原理和相关技术细节,对于对计算机硬件感兴趣的读者具有很高的参考价值。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《深入浅出计算机组成原理》
新⼈⾸单¥68
立即购买
登录 后留言

全部留言(51)

  • 最新
  • 精选
  • 最后一个的展开电路图,没有看懂

    编辑回复: 这里想要解决的问题是,如果电路的“层数”太深,意味着一次运算需要的时钟循环数会太多,这样CPU就会“慢”,所以我们就把原先的电路尽量展开到比较少的层数,虽然这可能意味着电路的晶体管数量的增加。 具体到这里的加法,是把两个4位的二进制数相加,一个数A,从高位到低位是 A3A2A1A0,第二个数B,从高位到低位是 B3B2B1B0 我们加完之后的和,应该是 C4C3C2C1C0,变成5位,最高位的C4是代表这两个数相加之后是否会溢出一位需要进位。 不展开的情况下,我们计算C4,需要先算出A0和B0的和,以及是否进位,然后把是否进位,再和A1和B1相加,在看是否进位,这样一层层上来,这样的话,整个计算就需要至少5层(现在图里的是3层) 但是实际上我们可以把整个电路图展开,C4这个进位,只有这几种情况: 1. A3+B3 需要进位(两个都是1) 2. A3+B3是1(通过一个一个异或门)并且 A2+B2 进位。这里前面的这个就是图里第二列第一行的P3,后面是同一个节点里面的G2 3. A3+B3是1,并且 A2+B2 是1,并且 A1+B1进位。对应的就是第二列第二行的 P3,P2,G1 4. A3+B3是1,并且 A2+B2 是1,并且 A1+B1是1,并且A0+B0进位。对应的就是第二列第三行的 P3,P2,P1,G1 5. A3+B3是1,并且 A2+B2 是1,并且 A1+B1是1,并且A0+B0是1,并且下面进位上来的标志C0是1,对应的就是第二列第四行的P3,P2,P1,P0,C0 这5个结果就是图里面的第二列的电路,都是与门。然后任意一个条件满足,C4就需要进位,所以C4是这五个 与门 并联之后的 或门。

    2019-06-02
    11
    88
  • 旺旺
    从加法到乘法,先是计算过程变得复杂了,步骤变得更多,可以像人一样,逐位计算,但线性带来时间复杂度高。从而可以考虑通过增加线路/硬件复杂度,从空间换时间的思路,加快乘法速度。 空间 vs 时间。 但CPU毕竟也是很珍贵的资源,晶体管也不宜太多,这中间需要相互平衡。

    作者回复: 总结得很好,其实这也可以认为是CISC和RISC的路线之争最朴素的由来

    2019-05-27
    2
    38
  • 活的潇洒
    “这之间的权衡,其实就是计算机体系结构中的RISC和CISC的经典历史路线之争” 这句才是重点,day14 笔记:https://www.cnblogs.com/luoahong/p/10929985.html

    作者回复: 👍

    2019-05-27
    3
    14
  • WB
    最后一张图片中的加法器是一个与门和一个或门?? 加法器不是由一个与门和一个异或门组成的吗?

    作者回复: WB同学你好, 最后一张图是表示如果我们不希望有太多的门延迟的情况下,我们怎么让加法器里面高位的是否获得进位,不用等待前面低位的全加器的计算结果。而不是一个完整的加法器。 我们重新复习一下 13 和 14 两讲的内容 完整的加法器可以由很多个全加器串联起来 全加器由两个半加器外加一个或门组成 半加器由一个与门和一个异或门组成 半加器只是整个加法器中最基础的一个零件

    2019-05-27
    12
  • 愤怒的虾干
    老师好,最近在看您推荐的计算机组成公开课,x86保护模式下会使用全局符号描述表寻址,同时操作系统又是使用页表来分配地址、映射物理和逻辑地址。我想问全局符号描述表和页表在寻址上有什么区别与联系?

    作者回复: 全局符号表是虚拟内存内的内存寻址和跳转。 页表是虚拟内存和物理内存之间的映射关系。

    2019-05-27
    5
  • Become a architect
    我想现在并发编程的思想起源于此吧。效率确实高了,但是编程的复杂度变高了。

    作者回复: Become a architect同学, 你好,并发的思路是一个很直观的思路,并不是发源于乘法器,反而是乘法器设计的时候,可以去想想并发的思路。 而且这里最后的乘法器,前后的计算其实有依赖关系,我们只是通过分析电路,让部分前后的计算依赖关系解耦合,通过一个更复杂的电路来实现。

    2019-12-18
    2
  • 木心
    4位加法器的最大门延迟是进位,是2*4+1 9个门延迟

    作者回复: 木心同学, 你好,这是一个问题么?电路并行这部分我已经写了,可以做到没有那么多门延迟的。

    2019-09-27
    2
    2
  • J.D.Chi
    “把结果加到刚才的结果上”,想起了编程语言里的 sum = sum + i 之类的语句。

    作者回复: J.D.同学, 你好,是很像的

    2019-09-21
    2
  • 小广
    徐老师你好,最后那个展开图,第二列的最下面一个运算组件,标注的表达式是"P3*P2*P1*P0*G0",但是我认为这里是笔误,应该是"P3*P2*P1*P0*C0",应该把G0改为C0,^_^

    作者回复: 小广同学, 你好,谢谢你,的确是笔误了,应该是C0

    2019-09-16
  • Dylan
    CPU做除法时和做乘法时是相反的,乘法是右移,除法是左移,乘法做的是加法,除法做的是减法。除数右移,商左移,商左移后最右位补0还是1取决于,本次余数和除数相减后余数最高位,最高位1则,回退;0那么商左移后最右位补1。
    2020-02-25
    1
    15
收起评论
显示
设置
留言
51
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部