计算机组成原理---关于乘法电路与除法运算电路的理解

news2024/9/19 10:12:26

目录

一.乘法电路

1.无符号数乘法运算的硬件实现逻辑:

2.补码1位乘法运算的硬件实现逻辑:

3.无符号阵列乘法器

4.补码阵列乘法器

二.除法电路

1.原码除法运算

2.补码除法运算(不恢复余数法)


本篇是看湖科大与王道视频总结:

一.乘法电路

在手算乘法时,每进行一位乘法得到部分积(每次乘法后得到的乘积),都要错开一位

所以位积向前一位错开的原因就是为了保证小数点的对齐:

迁移到计算机中二进制乘法的运算同理:

怎么将手算过程用计算机实现呢?需要解决两个问题:

1.运算过程中,会产生的多个位积,这些位积需要使用多个寄存器进行暂存,以便最后进行一次性相加。
2.乘积的数据宽度增长了一倍,这将造成硬件资源浪费和运算时间的增加。例如上面的例子输入的数据小数点后只有4位,而输出的数据增长为小数点后8位。

针对问题1:

拿以下乘式举例,经过整理可以发现,若乘数小数点后有n位,那么进行n次的先加法后移位就能得到最终的乘积。


这就是为什么我们做题时,需要用这样的方式:

注:这里虽然是原码的一位乘法,但是其符号的确定是通过将x,y异或得到的,所以前面的计算过程可以看作无符号数的计算。

这样,只需要

① 1个位宽为4位的寄存器存放被乘数x;

② 1个位宽为4位的寄存器存放部分积

③ 1个位宽为4位的寄存器最终乘积的高位和低位。

初始阶段高位寄存器被清0,低位寄存器存放乘数y。

针对问题2:

在运算器中,ALU用来实现乘法运算(加法和移位运算),ACC用来存放乘积高位,MQ用来存放乘数和乘积低位,X用来存放被乘数。这样,将乘积分为乘积低位和乘积高位分开存放,就不需要额外的位数存储乘积了。

1.无符号数乘法运算的硬件实现逻辑:

① 初始时,被乘数会被放到X寄存器中,乘数被放到MQ中,而ACC和Cout初始都为0,计数器Cn的值为4,因为乘数y的整数形式为4位:

② 由于MQ的最低位为1,所以ALU对ACC和X中的内容进行加法运算,并且在写使能的控制下将运算结果写入到ACC中:

控制逻辑会通过右移信号控制Cout,ACC,MQ同时向右移动一位。MQ中的内容同时向右移动一位,MQ中最低位的内容被移出,丢弃。Cout中的“1”,移动到ACC中的第1位,Cout补0即可。因为是无符号数的右移,所以进行逻辑右移即可。

注:分不清逻辑右移,算术右移等,可以看看:

http://t.csdnimg.cn/GChue

③ 至此,第一轮的先加法后移位就完成了,Cn变为3。表示还剩余3次加法和移位操作。

④ 以此类推,若MQ最后低位为0,那么只进行右移操作,右移后,最后一位丢弃即可。

⑤ 运算结束后,ACC中保存的就是乘积高位,MQ中保存的就是乘积低位。

结果为0.1000 1111

对照王道书中对这一部分的讲解:

这里的乘积寄存器P即ACC,乘积寄存器Y即MQ,Cn初值置32,是因为进行的是32位的无符号乘法运算。

这里的“每次从寄存器Y移出的最低位都被送到控制逻辑,以决定被乘数是否“加”到部分积上。”就是判断MQ的最低位是否为“1”。若为1,则进行加法运算再右移,若为0,则只进行右移。

经过上面的讲解,这一段理解就清楚了。

2.补码1位乘法运算的硬件实现逻辑:

相比于无符号数的运算逻辑,补码的乘法运算需要一位辅助位,辅助位是由MQ扩展出的一位存储。整体右移时,辅助位会被丢弃,而MQ中参与乘运算的最后一位会变为辅助位。

由于计算机中寄存器的位数都是统一的,由于MQ多增加了1位,所以ACC和X也相应增加1位。

补码1位乘法运算中,每次加法可能加+[+x]补,+[-x]补,+0,推导起来过程比较繁琐,如果想知道可以搜索“Booth”算法的推导和分析。具体情况如下(这里的MQ的最低位指的是参与运算的最低位):Y4表示MQ的最低位,Y5表示辅助位。

有n位数值位,所以需要进行n位的加法和右移,最后还需要额外进行一次加法,这一次的加法加什么是和乘数的符号位有关的,所以说“补码乘数的符号位是参与运算的”

与之前将的原码的乘法运算进行对比:

硬件实现逻辑如下:

相比于无符号数的硬件实现逻辑,增加了选择器,译码器和反相器:

Yi+1-Yi=0:

译码器对“辅助位-MQ中最低位”的值进行译码,若相减结果为0:输出译码结果(1有效信号,0无效信号),选择器选择输入端接收到有效信号后,会将输入端的“全0”从数据输出端输出,作为其中一个操作数。

Yi+1-Yi=1:

选择器会将x寄存器中的被乘数的补码输出到ALU中,作为其中一个操作数。

Yi+1-Yi=-1:

选择器会将寄存器x中的内容做取反操作,作为输出,同时需要进行+1操作,这样就可以为实现,由[x]补+[y]补---->[x]补+[-y]补

来看一下实现步骤:

① 初始时MQ存放乘数,X存放被乘数,辅助位初始位0,ACC初始为0,计数器Cn为0(不包括辅助位)

由于1-0等于1,所以做被乘数取反+1的操作。

② 将ALU中计算的结果会在写使能的控制下,将结果写入ACC。控制逻辑发送右移信号,使得ACC和MQ同步右移一位,由于是算术右移,所以ACC的最高位补符号位0。移出的最后一位丢弃即可。Cn更新为3,表示还剩余3次加法和算术右移操作。

③ Cn变为0后,还要额外再进行1次加法操作,由于1-0=1,所以进行取反+1的操作。最后更新到ACC中。

注意:MQ中的最低两位分别是乘数y的符号位和辅助位,需要舍弃,所以最后结果为:

0.0111 0101(单符号位的补码形式)

3.无符号阵列乘法器

原码、补码一位乘法的硬件逻辑实现,需要在时钟节拍下、通过控制逻辑的控制,执行相应轮次的“加法、右移”操作来实现,速度较慢。为了提高运算速度,可以仅采用组合逻辑电路以专用硬件方式构建阵列乘法器。

笔算乘法是这样的,

若采用组合逻辑电路实现:

如下图所示,某位的乘法运算可以采用与门实现,在进行加法运算时可以使用加法器进行运算,图中的“0”表示从低位的进位为0,而FA产生的进位,会用作下面一列的进位输入。

以此类推可以得到:

若被乘数x为1011,乘数y为1101,那么进行阵列乘法的过程如下:

以画圈部分举例,其是计算来自低位的两个进位,所以1+0=“1”,再加上同列中另一个加法器的运算结果“1”,得到本列的计算结果是“0”,并产生进位“1”。

性能分析:

与门的计算产生延迟1T,由于行间存在进位依赖,所以有3*6T;最后一行构成串行进位加法器,所以有时间延迟,(2*3+4)T。

注:关于串行加法器的时间延迟,可以看另一个视频:

3-2-5 定点数的加法和减法运算 — 串行进位加法器的硬件逻辑实现(无字幕版)_哔哩哔哩_bilibili

无符号阵列乘法器可以用于原码的乘法,因为原码的数值位可以看作无符号数,原码符号位单独处理(进行异或运算即可)。

4.补码阵列乘法器

补码阵列乘法器的思想:

如果将补码的符号位单独处理,将补码的数值位转换成原码的数值位,就可利用无符号阵列乘法器进行乘法运算。得到的结果为无符号乘积,将其转换成补码的数值位,然后在其前面添加单独处理的符号位即可得到补码乘法的结果。

Xf与Yf单独进行异或运算,同时Xf与Yf会决定求补电路的运算逻辑,例如,如果Xf为0,那么就不做变换,如果Xf为1,那么就需要数值位按位取反,末位+1

补充:对于求补电路,取反,末位+1的实现:

由上图可以看到需要n位加法器组成求补电路,硬件开销较大,可以用以下方式实现:

Xf=0时:

剩余位保持不变地输出:

Xf=1时:

依次类推,可以得到正确的结果:

来看一道真题:

答案如下:

补充3)问:a属于软件实现,b属于通用硬件实现,c属于专用硬件实现。

补充4)问:

二.除法电路

1.原码除法运算

除法运算中,ACC存放的是被除数,余数;通用寄存器X存放的是除数,MQ存放的是商。

:原码除法运算中都是数值位去绝对值参加除法运算的,最后的符号位需要单独通过x和y异或得到,所以其实相当于无符号数的运算。所以中间采用的是逻辑移位。而补码运算中,由于符号位参与运算,所以采用的是算术移位。虽然都是低位补0,但是还是要说明一下。

在手算过程中,手算时每一位商取0/1是通过判断当前余数和除数的大小确定的,在计算机中,也就是要判断ACC中保存的内容和通用寄存器X中的内容谁更大,如果ACC内容(被除数)更大,商1,ACC内容小,商0。

1.不恢复余数法

① 计算机会先默认上商1,使得被除数-除数,即(ACC)+[-y]补,结果存放到ACC中。

② 若ACC中的结果为负数,即首位为1,那么说明被除数小于除数,应该商0才对。

所以计算机会恢复原来的ACC值,即(ACC)+[y]补。同时MQ最低位改为0。(如果ACC中结果为正,表示并没有上商错,不需要恢复)。

③ 整体逻辑左移,MQ低位补0,计算机依旧会默认先上商“1”,若结果为负再改为0。

④ 最后,ACC中存放的就是余数,MQ中存放的就是商。(如果最后一步商为负,需要恢复余数,并且上商改为0)商为0.1101,余数为0.0111*(2^-n),n为数值位位数。

⑤ 最后符号位单独运算,将x,y两个符号位进行异或运算即可。

现在来看这一段就非常容易理解,R表示的就是ACC,Q表示的就是MQ。

恢复余数法的手算过程如下:

2.不恢复余数法(加减交替法)

被除数-除数,若商为负,直接左移,再加[y]补。若商为正,处理方式和恢复余数法相同,即左移,然后+[-y]补。

整个过程加/减n+1次,每次加减确定一位商(余数为负商0,余数为正商1);左移n次(最后一次加减完不移位)。最终可能还要再多一次加。

由于探讨的是除法运算,所以最后得到的商也只能是个定点小数,即被除数要小于除数。也就是第一步被除数-除数时,得到的一定是一个负值,商0。如果商1,则硬件电路停止运算,因为结果无法用定点小数表示。

2.补码除法运算(不恢复余数法)

补码除法运算与原码除法运算最大的不同就是符号位也要参与运算,符号位不用单独计算。

对于下面的例子,商为1.0101,余为0.0111*(2^-4)。

在原码的加减交替法中,若最终余数为负,还需要+[y补](恢复余数),所以移动次数为N次,加减次数可能为N+2次。而补码的加减交替法中,加减次数只可能为N+1次。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2036696.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

35_WebShell管理工具、中国蚁剑AntSword的安装及使用、御剑的使用、后台目录扫描

WebShell管理工具 WebShell 以asp、php、jsp或cgi等网页形式存在的一种代码执行环境主要用于网站和服务器管理由于其便利性和功能强大,被特别修改后的WebShell也被部分人当作网站后门工具使用国内常用的WebShell有海阳ASP木马,Phpspy,c99sh…

<Qt> 系统 - 事件

目录 前言: 一、事件介绍 二、事件的处理 (一)鼠标事件 1. 进入和离开事件 2. 鼠标点击事件 3. 释放事件 4. 双击事件 5. 移动事件 6. 滚轮事件 (二)键盘按键事件 1. 单个按键 2. 组合按键 (…

如何判断监控设备是否支持语音对讲

目录 一、大华摄像机 二、海康摄像机 三、宇视摄像机 一、大华摄像机 注意:大华摄像机支持跨网语音对讲,即设备和服务器可以不在同一网络内,大华设备的语音通道填写:34020000001370000001 配置接入示例: 音频输入…

十日Python项目——第七日(商品购物车)

#前言: 在最近十天我会用Python做一个购物类电商项目,会用到DjangoMysqlRedisVue等。 今天是第六天,主要负责撰写编写关于商品购物车的编写,以及相应的增删改查。若是有不懂大家可以先阅读我的前六篇博客以能够顺承。 若是大家…

Github Copilot 使用技巧

🎯目标读者 本文不包含如何安装 Github Copilot本文介绍了 Github Copilot 使用方法和一些技巧 本人已经使用 Github Copilot 2 年了,交了 3 次年费,每年 100$ 着实心痛,但是用着确实爽歪歪 但是感觉一直只用了一小部分功能&am…

(第二十七天)

上午 核心:内核中的 ipvs , ipvsadm 1 、安装 ipvsadm [rootnat ~] # yum -y install ipvsadm 2 、配置规则 查看所有的规则,如果已经配置好规则,重启之后也就没有了 [rootnat ~] # ipvsadm -L -n 1 、配置 vip 网卡 &…

服装租赁押金管理-押金原路退回系统开通方法

一、婚纱影楼服装租赁收押金必要性 1. 保障服装的按时归还: - 押金的存在能促使租客按时归还服装,避免因拖延归还影响后续的租赁业务。比如,在一些大型活动期间,服装租赁需求旺盛,如果租客不按时归还,…

HTML样式- CSS——WEB开发系列08

一、HTML 基础概述 HTML 用于创建网页的结构。网页的所有内容&#xff0c;例如文本、图像、链接、表单等&#xff0c;都是通过 HTML 标签来定义的。以下是一个简单的 HTML 文档结构示例&#xff1a; <!DOCTYPE html> <html lang"en"> <head><…

matlab 音频音量处理(音量大小按照dB调节)

1 音量(声压级)以分贝(dB)表示的计算公式为: 2 % 已知的 x 值 x = 0:-1:-127; % 在这里填入 x 的具体值% 计算 y %y = 10

浅谈php://filter的妙用

文章目录 分析源码巧用编码与解码利用字符串操作方法 分析源码 <?php $content <?php exit; ?>; $content . $_POST[txt]; file_put_contents($_POST[filename], $content);首先&#xff0c;先分析一下这段代码。 首先他定义了content为’<?php exit;?>‘…

计算机网络17——IM聊天系统——客户端核心处理类框架搭建

目的 拆开客户端和服务端&#xff0c;使用Qt实现客户端&#xff0c;VS实现服务端 Qt创建项目 Qt文件类型 .pro文件&#xff1a;配置文件&#xff0c;决定了哪些文件参与编译&#xff0c;怎样参与编译 .h .cpp .ui&#xff1a;画图文件 Qt编码方式 Qt使用utf-8作为编码方…

服务器被ddos攻击多久能恢复?具体怎么操作

服务器被ddos攻击多久能恢复&#xff1f;如果防御措施得当&#xff0c;可能几分钟至几小时内就能缓解&#xff1b;若未采取预防措施或攻击特别猛烈&#xff0c;则可能需要几小时甚至几天才能完全恢复。服务器被DDoS攻击的恢复时间取决于攻击的规模和强度、服务器的配置和性能以…

【C++】类与对象(中)_7.const成员函数

7.const成员 7.1 const修饰类的成员函数 将const修饰的类成员函数称之为const成员函数&#xff0c;const修饰类成员函数&#xff0c;实际修饰该成员函数隐含的this指针&#xff0c;表明在该成员函数中不能对类的任何成员进行修改。 我们来看看下面的代码 #define _CRT_SECU…

【ARM CoreLink 系列 5.1 -- CI-700 各种 Node 组件详细介绍】

请阅读【ARM CoreLink 文章专栏导读】 文章目录 CI-700 组件(Components)RN-I( I/O-coherent Request Node) 和 RN-D(I/O coherent Request Node with DVM)HN-F(Fully coherent Home Node)IO coherent Home Node (HN-I)IO coherent Home Node with Debug Trace Controller (H…

JSON与Jsoncpp库:数据交换的灵活选择

目录 引言 一.JSON简介 二. Jsoncpp库概述 三. Jsoncpp核心类介绍 3.1 Json::Value类 3.2 序列化与反序列化类 四. 实现序列化 五. 实现反序列化 结语 引言 在现代软件开发中&#xff0c;数据交换格式扮演着至关重要的角色。JSON&#xff08;JavaScript Object Notati…

鸿蒙(API 12 Beta3版)【媒体会话提供方】本地媒体会话

音视频应用在实现音视频功能的同时&#xff0c;需要作为媒体会话提供方接入媒体会话&#xff0c;在媒体会话控制方&#xff08;例如播控中心&#xff09;中展示媒体相关信息&#xff0c;及响应媒体会话控制方下发的播控命令。 基本概念 媒体会话元数据&#xff08;AVMetadata…

WordPress原创插件:Download-block-plugin下载按钮图标美化

WordPress原创插件&#xff1a;Download-block-plugin下载按钮图标美化 https://download.csdn.net/download/huayula/89632743

Mapreduce_csv_averageCSV文件计算平均值

csv文件求某个平均数据 查询每个部门的平均工资&#xff0c;最后输出 数据处理过程 employee_noheader.csv&#xff08;没做关于首行的处理&#xff0c;运行时请自行删除&#xff09; EmployeeID,EmployeeName,DepartmentID,Salary 1,ZhangSan,101,5000 2,LiSi,102,6000…

疫情下图书馆管理系统

TOC springboot126疫情下图书馆管理系统 系统概述 1.1 研究背景 随着计算机技术的发展以及计算机网络的逐渐普及&#xff0c;互联网成为人们查找信息的重要场所&#xff0c;二十一世纪是信息的时代&#xff0c;所以信息的管理显得特别重要。因此&#xff0c;使用计算机来管…

mock.js的简单使用~

1、什么是mock? mock.js:是一款模拟数据生成器&#xff0c;可以生成随机数据&#xff0c;拦截 Ajax 请求. 2、mock的作用。 可以通过mock来模拟后端接口&#xff0c;可随机生成所需数据&#xff0c;模拟对数据的增删改查。并且截Ajax请求不需要修改既有代码就可以拦截&…