计算机组成原理 3 运算器

2024-03-27 20:44

本文主要是介绍计算机组成原理 3 运算器,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

定点补码加/减法运算

        补码加减法的实现

        补码加法 [X Y] = [X] [Y]
        和的补码 = 补码的和
        补码减法 [X−Y] = [X] [−Y] = [X] −[Y]
        差的补码 = 补码的差
        求补公式 [−Y] = [ [Y] ]
        对 [Y] 逐位取反 , 再在最低位加 1

                溢出检查(OF)

                        方法1

                                溢出逻辑: 正正得负  负负得正

                                设两数符号位为 f_0 \ \ \ f_1 ,和数符号位f_s

                                Overflow = \overline{f_0}\ \overline{f_1}f_s + f_0 f_1 \overline{f_s}

                        方法2

                                符号位进位位C_f,最高位进位位C_n

                                Overflow = C_f \oplus C_n

                        方法3——双符号位

                                双符号位的最高位永远是正确符号

                                Overflow = f_1 \oplus f_2

                二进制加法运算 

                        先考虑一位加法,然后构成加法链。

                        一位加法:S = X\oplus Y

                        一位全加器:S = X_i \oplus Y_i \oplus C_{i-1}C_{i+1} = X_iY_i + (X_i + Y_i)C_{i-1}

                        n位加法器:n个一位加法器串联,低位的进位输出连接到高位的进位输入。

                加法器的改造 

                        引入运算控制位Sub,Sub = 0 时作加法,Sub = 1时作减法,此时送入[-Y]补。

                        Input = Y_i \oplus Sub

                        标志寄存器 

                                存放运算标志的寄存器,每个标志对应标志寄存器中的一个标志位。

                        IA-32中的EFLAGS寄存器     (MIPS 无标志寄存器):

                                ZF(结果为零)        SF(结果为负数)

                                CF(进位/借位)      OF(有符号溢出)

                        并行加法器

                                串行加法器高位运算需要等待低位运算,延迟过高,因此想要改成并行。

                                关键在于解决进位C_i对低位运算的依赖。

                        进位链

                                S_i = X_i\oplus Y_i \oplus C_{i-1}

                                C_i = X_i Y_i + (X_i \oplus Y_i)C_{i-1}

                            设G_i = X_i Y_i(进位生成函数),P_i = X_i \oplus Y_i(进位传递函数)

                            则C_i= G_i + P_iC_{i-1}

                                由递推式C_i= G_i + P_iC_{i-1}可以提前得到进位表达式,使得每一位全加器的进位输入不再依赖前一个全加器。

                                C_1 = G_1 + P_1C_0

                                C_2 = G_2 + P_2 C_1 = G_2 + P_2(G_1 + P_1C_0) = G_2 + P_2G_1 + P_2P_1C_0

                                ......

                                C_n = G_n + P_nG_{n-1} + P_nP_{n-1}G_{n-2} +... \ + P_nP_{n-1}P_{n-2}...P_1C_0 

  •                                 进位输出仅与最低位进位输入C_0有关
  •                                 位数越长,进位链电路复杂度越高
  •                                 通常按照4位一组进行分组运算

定点乘法运算 

        实现思路

  •         执行乘法运算子程序实现乘法运算(软件实现):零成本、RISCV32-I指令集
  •         利用加法器多次累加实现乘法运算:原码、补码一位乘法,成本低
  •         设置专用乘法器实现乘法运算:成本高

        二进制手算乘法 

        由此可以想到阵列乘法:即先计算相加数,然后逐列相加。用到了很多的全加器,成本高,但换来了效率。

        从这种横向进位模式想到,实际上进行的就是:相加➡移位➡相加➡移位......的过程。数学表达出来是这样:

        由此可以推出原码乘法 

        原码乘法

累加后 逻辑右移
n 次加法
符号位单独计算
流程图
核心运算
  • 累加= + 0 或 = + X,分支合并​​​​​​​为累加 ∑ = +YnX
  • 逻辑右移  = ∑ / 2
减少寄存器访问
 ∑ = (∑ +YnX)/2
先移位再锁存,简化电路,提升速率
运算计数控制
简单状态机控制,计数器比较

         硬件实现:

        但由于机器内采用补码存储,原码乘法实际上没有什么实际意义 ,但可以通过原码乘法稍作转换推出补码乘法运算方法。

        补码乘法

可以推出:[X  *  Y]补 = [X]补 * 0.Y1Y2…Yn – Y0[X]补  (Y0为符号位)

进一步有:[X  *  Y]补 = [X]补 * [ Y1 - Y0 + (Y2 - Y1)2^-1 + (Y3 - Y2)2^-2+…+(0-Yn)2^-n ] 

可以看出和原码乘法形式非常类似,因此可以改进原码乘法来实现。​​​​​​​

n+1 次加法, n 算术右移
符号位参与运算, 不需单独计算符号位

        硬件实现:

        阵列乘法

         再回看阵列乘法

  • 符号单独运算:直接异或
  • 绝对值相乘:仅需考虑数值部分的计算
  • R=X*Y

        1 × 1 = 1

        1 × 0 = 0

        0 × 1 = 0

        0 × 0 = 0

  • 与门实现一位乘法
  • 25个与门并发
  • 一级门延迟,生成所有相加数

         不同的进位方式延迟不同,主要有横向进位、斜向进位两种。

横向
斜向

        

这篇关于计算机组成原理 3 运算器的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/853330

相关文章

Redis主从/哨兵机制原理分析

《Redis主从/哨兵机制原理分析》本文介绍了Redis的主从复制和哨兵机制,主从复制实现了数据的热备份和负载均衡,而哨兵机制可以监控Redis集群,实现自动故障转移,哨兵机制通过监控、下线、选举和故... 目录一、主从复制1.1 什么是主从复制1.2 主从复制的作用1.3 主从复制原理1.3.1 全量复制

Redis主从复制的原理分析

《Redis主从复制的原理分析》Redis主从复制通过将数据镜像到多个从节点,实现高可用性和扩展性,主从复制包括初次全量同步和增量同步两个阶段,为优化复制性能,可以采用AOF持久化、调整复制超时时间、... 目录Redis主从复制的原理主从复制概述配置主从复制数据同步过程复制一致性与延迟故障转移机制监控与维

SpringCloud配置动态更新原理解析

《SpringCloud配置动态更新原理解析》在微服务架构的浩瀚星海中,服务配置的动态更新如同魔法一般,能够让应用在不重启的情况下,实时响应配置的变更,SpringCloud作为微服务架构中的佼佼者,... 目录一、SpringBoot、Cloud配置的读取二、SpringCloud配置动态刷新三、更新@R

Redis主从复制实现原理分析

《Redis主从复制实现原理分析》Redis主从复制通过Sync和CommandPropagate阶段实现数据同步,2.8版本后引入Psync指令,根据复制偏移量进行全量或部分同步,优化了数据传输效率... 目录Redis主DodMIK从复制实现原理实现原理Psync: 2.8版本后总结Redis主从复制实

如何测试计算机的内存是否存在问题? 判断电脑内存故障的多种方法

《如何测试计算机的内存是否存在问题?判断电脑内存故障的多种方法》内存是电脑中非常重要的组件之一,如果内存出现故障,可能会导致电脑出现各种问题,如蓝屏、死机、程序崩溃等,如何判断内存是否出现故障呢?下... 如果你的电脑是崩溃、冻结还是不稳定,那么它的内存可能有问题。要进行检查,你可以使用Windows 11

深入探索协同过滤:从原理到推荐模块案例

文章目录 前言一、协同过滤1. 基于用户的协同过滤(UserCF)2. 基于物品的协同过滤(ItemCF)3. 相似度计算方法 二、相似度计算方法1. 欧氏距离2. 皮尔逊相关系数3. 杰卡德相似系数4. 余弦相似度 三、推荐模块案例1.基于文章的协同过滤推荐功能2.基于用户的协同过滤推荐功能 前言     在信息过载的时代,推荐系统成为连接用户与内容的桥梁。本文聚焦于

hdu4407(容斥原理)

题意:给一串数字1,2,......n,两个操作:1、修改第k个数字,2、查询区间[l,r]中与n互质的数之和。 解题思路:咱一看,像线段树,但是如果用线段树做,那么每个区间一定要记录所有的素因子,这样会超内存。然后我就做不来了。后来看了题解,原来是用容斥原理来做的。还记得这道题目吗?求区间[1,r]中与p互质的数的个数,如果不会的话就先去做那题吧。现在这题是求区间[l,r]中与n互质的数的和

计算机毕业设计 大学志愿填报系统 Java+SpringBoot+Vue 前后端分离 文档报告 代码讲解 安装调试

🍊作者:计算机编程-吉哥 🍊简介:专业从事JavaWeb程序开发,微信小程序开发,定制化项目、 源码、代码讲解、文档撰写、ppt制作。做自己喜欢的事,生活就是快乐的。 🍊心愿:点赞 👍 收藏 ⭐评论 📝 🍅 文末获取源码联系 👇🏻 精彩专栏推荐订阅 👇🏻 不然下次找不到哟~Java毕业设计项目~热门选题推荐《1000套》 目录 1.技术选型 2.开发工具 3.功能

hdu4407容斥原理

题意: 有一个元素为 1~n 的数列{An},有2种操作(1000次): 1、求某段区间 [a,b] 中与 p 互质的数的和。 2、将数列中某个位置元素的值改变。 import java.io.BufferedInputStream;import java.io.BufferedReader;import java.io.IOException;import java.io.Inpu

hdu4059容斥原理

求1-n中与n互质的数的4次方之和 import java.io.BufferedInputStream;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;import java.io.PrintWrit