当前位置: 首页 > news >正文

z3-加法器实验

补码器加减法,运算方法简介

我们要知道什么是补码的加法,我们为什么要用补码的加法?

补码的加法其实就是将两个补码形式的二进制数字直接相加,处理的时候忽略超出固定位数的进位。补码的加法运算和无符号二进制数的加法操作一样,不需要额外处理负号或减法的逻辑

补码加法的具体操作步骤

  1. 将两个补码数位对齐(确保位数一致)
  2. 诸位相加,处理进位
  3. 如果结果超出固定的位数,忽略超出部分的进位

例子:
假如我们在一个8位的系统中进行加法计算

  • 5+3
    • 5的补码:00000101
    • 3的补码:00000011
    • 00001000(结果位8)
  • 5+(-3)
    • 5的补码:00000101
    • -3的补码:11111101
    • 相加:10000010(结果位-2,最高位1表示结果是负数)

那么我们为什么要使用补码的加法?

补码的使用简化了计算机硬件的设计,使有符号的整数运算变得更加高效统一。补码的使用还简化了负数的表示和处理,使计算机更方便地进行各种数值运算。

在了解了补码的加法之后我们就可以尝试设计一位全加器电路了

构造一个一位全加器

首先要知道什么是全加器?

全加器是一种基本的数字电路,用于二进制数的加法运算。它能够同时处理两个二进制数的加法运算。它能够同时处理两个二进制位和一个来自低位的进位输入,并输出该位的和以及进位到高位的值。全加器是构建多位二进制加法器的基本模块。

全加器的功能

全加器有三个输入两个输出:

  • 输入:两个被加的二进制位A和B,以及来自前一位的进位输入C_in_
  • 输出:该位的和S和向更高位传递的进位输出C_out_

全加器的真值表

ABC_in_SC_out_
00000
00110
01010
01101
10010
10101
11001
11111

全加器的逻辑表达式

根据真值表,全加器的输入S和输出C可以用逻辑表达式表示:

  • 和(sum)S:S = A XOR B XOR C_in_
  • 进位(Carry)C_out_:C_out_ = (A * B) + (B * C_in_) + (A * C_in_)

一位全加器的电路实现

如下图所示:
image.png
功能封装
image.png

八位串行加法器

八位串行加法器是一种可以对两个8位二进制数进行加法运算的电路,串行加法器的工作原理是每次处理一个位,并将进位传递到下一位进行累加。以下是八位串行加法器的详细电路设计和验证。

电路设计

  • 全加器:用于对两个二进制位及一个进位进行相加。
  • 移位寄存器:用于存储和移位操作,分别存储两个8位数加数和结果
  • **D触发器:**用于存储和传递进位
  • 时钟:用于同步操作

电路示意图

image.png

使用具体数字验证

1. 初始化
  • A寄存器:10101010
  • B寄存器:01010101
  • 进位 𝐶0:0
2. 逐位相加
  1. 第1次时钟脉冲
    • 取出最低位:A0 = 0, B0 = 1, 𝐶0=0
    • 全加器计算:𝑆0=0⊕1⊕0=1
    • 进位:𝐶1=(0⋅1)+(1⋅0)+(0⋅0)=0
    • 移位:A -> 01010101, B -> 00101010
  2. 第2次时钟脉冲
    • 取出当前位:A1 = 1, B1 = 0, 𝐶1=0
    • 全加器计算:𝑆1=1⊕0⊕0=1
    • 进位:𝐶2=(1⋅0)+(0⋅0)+(1⋅0)=0
    • 移位:A -> 00101010, B -> 00010101
  3. 第3次时钟脉冲
    • 取出当前位:A2 = 0, B2 = 1, 𝐶2=0
    • 全加器计算:𝑆2=0⊕1⊕0=1
    • 进位:𝐶3=(0⋅1)+(1⋅0)+(0⋅0)=0
    • 移位:A -> 00010101, B -> 00001010
  4. 第4次时钟脉冲
    • 取出当前位:A3 = 1, B3 = 0, 𝐶3=0
    • 全加器计算:𝑆3=1⊕0⊕0=1
    • 进位:𝐶4=(1⋅0)+(0⋅0)+(1⋅0)=0
    • 移位:A -> 00001010, B -> 00000101
  5. 第5次时钟脉冲
    • 取出当前位:A4 = 0, B4 = 1, 𝐶4=0
    • 全加器计算:𝑆4=0⊕1⊕0=1
    • 进位:𝐶5=(0⋅1)+(1⋅0)+(0⋅0)=0
    • 移位:A -> 00000101, B -> 00000010
  6. 第6次时钟脉冲
    • 取出当前位:A5 = 1, B5 = 0, 𝐶5=0
    • 全加器计算:𝑆5=1⊕0⊕0=1
    • 进位:𝐶6=(1⋅0)+(0⋅0)+(1⋅0)=0
    • 移位:A -> 00000010, B -> 00000001
  7. 第7次时钟脉冲
    • 取出当前位:A6 = 0, B6 = 1, 𝐶6=0
    • 全加器计算:𝑆6=0⊕1⊕0=1
    • 进位:𝐶7=(0⋅1)+(1⋅0)+(0⋅0)=0
    • 移位:A -> 00000001, B -> 00000000
  8. 第8次时钟脉冲
    • 取出当前位:A7 = 1, B7 = 0, 𝐶7=0
    • 全加器计算:𝑆7=1⊕0⊕0=1
    • 进位:𝐶8=(1⋅0)+(0⋅0)+(1⋅0)=0

结果

最终输出结果的各位和为 𝑆7𝑆6𝑆5𝑆4𝑆3𝑆2𝑆1𝑆0=11111111,即十进制的255。进位输出 𝐶8=0,表示没有产生进位。
image.png

八位可控加减法器

8位可控加减法器是一种能够对两个8位二进制数进行加法或减法运算的电路。它通过控制信号来决定是执行加法还是减法。减法可以通过将被减数取补码并进行加法来实现。以下是详细的电路设计和使用具体数字进行验证的步骤。

电路设计

  • 全加器:用于对两个二进制位及一个进位进行相加。
  • 移位寄存器:用于存储和移位操作,分别存储两个八位数和结果。
  • D触发器:用于存储和传递进位。
  • 时钟:用于同步操作。
  • 异或门:用于将减法操作转化为加法操作。
  • 控制信号:用于选择加法或减法操作。

电路示意图

image.png

使用具体数字验证

加法验证

假设我们要相加的两个8位数是:

  • A = 01101101 (十进制的109)
  • B = 00111011 (十进制的59)
  1. 初始化
    • A寄存器:01101101
    • B寄存器:00111011
    • 进位 _C_0:0
    • 控制信号 Add/Sub = 0(加法)
  2. 逐位相加
  • 第1次时钟脉冲
    • 取出最低位:A0 = 1, B0 = 1, 𝐶0=0
    • 全加器计算:𝑆0=1⊕1⊕0=0
    • 进位:𝐶1=(1⋅1)+(1⋅0)+(0⋅0)=1
    • 移位:A -> 00110110, B -> 00011101
  • 第2次时钟脉冲
    • 取出当前位:A1 = 0, B1 = 1, 𝐶1=1
    • 全加器计算:𝑆1=0⊕1⊕1=0
    • 进位:𝐶2=(0⋅1)+(1⋅1)+(0⋅1)=1
    • 移位:A -> 00011011, B -> 00001110
  • 第3次时钟脉冲
    • 取出当前位:A2 = 1, B2 = 1, 𝐶2=1
    • 全加器计算:𝑆2=1⊕1⊕1=1
    • 进位:𝐶3=(1⋅1)+(1⋅1)+(1⋅1)=1
    • 移位:A -> 00001101, B -> 00000111
  • 第4次时钟脉冲
    • 取出当前位:A3 = 1, B3 = 0, 𝐶3=1
    • 全加器计算:𝑆3=1⊕0⊕1=0
    • 进位:𝐶4=(1⋅0)+(0⋅1)+(1⋅1)=1
    • 移位:A -> 00000110, B -> 00000011
  • 第5次时钟脉冲
    • 取出当前位:A4 = 0, B4 = 1, 𝐶4=1
    • 全加器计算:𝑆4=0⊕1⊕1=0
    • 进位:𝐶5=(0⋅1)+(1⋅1)+(0⋅1)=1
    • 移位:A -> 00000011, B -> 00000001
  • 第6次时钟脉冲
    • 取出当前位:A5 = 1, B5 = 1, 𝐶5=1
    • 全加器计算:𝑆5=1⊕1⊕1=1
    • 进位:𝐶6=(1⋅1)+(1⋅1)+(1⋅1)=1
    • 移位:A -> 00000001, B -> 00000000
  • 第7次时钟脉冲
    • 取出当前位:A6 = 0, B6 = 0, 𝐶6=1
    • 全加器计算:𝑆6=0⊕0⊕1=1
    • 进位:𝐶7=(0⋅0)+(0⋅1)+(0⋅1)=0
    • 移位:A -> 00000000, B -> 00000000
  • 第8次时钟脉冲
    • 取出当前位:A7 = 0, B7 = 0, 𝐶7=0
    • 全加器计算:𝑆7=0⊕0⊕0=0
    • 进位:𝐶8=(0⋅0)+(0⋅0)+(0⋅0)=0
结果

最终输出结果的各位和为 𝑆7𝑆6𝑆5𝑆4𝑆3𝑆2𝑆1𝑆0=10101000,即十进制的168。
image.png

减法验证

初始化
  • A寄存器:01101101
  • B寄存器:00111011
  • 进位 _C_0:1(由于使用补码减法,初始进位为1)
  • 控制信号 Add/Sub = 1(减法)
逐位计算(将B取反再加上A)
  1. 第1次时钟脉冲
    • 取出最低位:A0 = 1, B0 = 1
    • 由于控制信号为1,B0取反:B0’ = 0
    • 全加器计算:𝑆0=1⊕0⊕1=0
    • 进位:𝐶1=(1⋅0)+(0⋅1)+(1⋅1)=1
    • 移位:A -> 00110110, B -> 00011101
  2. 第2次时钟脉冲
    • 取出当前位:A1 = 0, B1 = 1
    • 由于控制信号为1,B1取反:B1’ = 0
    • 全加器计算:𝑆1=0⊕0⊕1=1
    • 进位:𝐶2=(0⋅0)+(0⋅1)+(0⋅1)=0
    • 移位:A -> 00011011, B -> 00001110
  3. 第3次时钟脉冲
    • 取出当前位:A2 = 1, B2 = 1
    • 由于控制信号为1,B2取反:B2’ = 0
    • 全加器计算:𝑆2=1⊕0⊕0=1
    • 进位:𝐶3=(1⋅0)+(0⋅0)+(1⋅0)=0
    • 移位:A -> 00001101, B -> 00000111
  4. 第4次时钟脉冲
    • 取出当前位:A3 = 1, B3 = 0
    • 由于控制信号为1,B3取反:B3’ = 1
    • 全加器计算:𝑆3=1⊕1⊕0=0
    • 进位:𝐶4=(1⋅1)+(1⋅0)+(1⋅0)=1
    • 移位:A -> 00000110, B -> 00000011
  5. 第5次时钟脉冲
    • 取出当前位:A4 = 0, B4 = 1
    • 由于控制信号为1,B4取反:B4’ = 0
    • 全加器计算:𝑆4=0⊕0⊕1=1
    • 进位:𝐶5=(0⋅0)+(0⋅1)+(0⋅1)=0
    • 移位:A -> 00000011, B -> 00000001
  6. 第6次时钟脉冲
    • 取出当前位:A5 = 1, B5 = 0
    • 由于控制信号为1,B5取反:B5’ = 1
    • 全加器计算:𝑆5=1⊕1⊕0=0
    • 进位:𝐶6=(1⋅1)+(1⋅0)+(0⋅0)=1
    • 移位:A -> 00000001, B -> 00000000
  7. 第7次时钟脉冲
    • 取出当前位:A6 = 0, B6 = 0
    • 由于控制信号为1,B6取反:B6’ = 1
    • 全加器计算:𝑆6=0⊕1⊕1=0
    • 进位:𝐶7=(0⋅1)+(1⋅1)+(0⋅1)=0
    • 移位:A -> 00000000, B -> 00000000
  8. 第8次时钟脉冲
    • 取出当前位:A7 = 0, B7 = 0
    • 由于控制信号为1,B7取反:B7’ = 1
    • 全加器计算:𝑆7=0⊕1⊕0=1
    • 进位:𝐶8=(0⋅1)+(1⋅0)+(0⋅0)=0
结果

最终输出结果的各位和为 𝑆7𝑆6𝑆5𝑆4𝑆3𝑆2𝑆1𝑆0=00110010,即十进制的50。
image.png

相关文章:

z3-加法器实验

补码器加减法,运算方法简介 我们要知道什么是补码的加法,我们为什么要用补码的加法? 补码的加法其实就是将两个补码形式的二进制数字直接相加,处理的时候忽略超出固定位数的进位。补码的加法运算和无符号二进制数的加法操作一样&…...

解决git克隆项目出现fatal无法访问git clone https://github.com/lvgl/lvgl.git

Windows 11系统 报错 $ git clone https://github.com/lvgl/lvgl.git Cloning into lvgl... fatal: unable to access https://github.com/lvgl/lvgl.git/: Failed to connect to github.com port 443 after 21141 ms: Couldnt connect to server 解决方法 git运行这两段代码…...

Vue中引入组件需要哪三步

在Vue中引入组件通常需要以下三步: 导入组件:首先,你需要在父组件中导入你想要使用的子组件。这通常是通过ES6的import语法完成的。 注册组件:接下来,你需要在父组件中注册这个子组件。这可以通过components选项完成&…...

到底该用英文括号还是中文括号?

这篇博客写的还挺详细的,不错。...

一个普通双非女生的秋招之路

大家好,我是小布丁。 先简单地做个自我介绍: 我今年本科毕业于某双非院校(属于那种没什么人听说过的小学校),学的是计算机专业,英语四级水平(没办法,六级确实没过)。我本…...

一个模型用了几层神经网络怎么算?

有权重参数的层算作一层,没有权重参数的就是参数不更新,不能称之为一层 有权重:卷积层、全连接层 没有权重的层:激活函数层、池化层 即数卷积层和全连接层的个数,就是这个模型用了几层神经网络。...

python获取cookie的方式

通过js获取cookie,避免反复登录操作。 经验证在JD上没有用,cookie应该无痕或者加密了,只能用单浏览器不关的模式来实现,但是代码留着,其他网站可能有用。 def cookie_set():driver webdriver.Chrome(optionschrome_…...

Nginx-狂神说

Nginx概述 公司产品出现瓶颈? 我们公司项目刚刚上线的时候,并发量小,用户使用的少,所以在低并发的情况下,一个jar包启动应用就够了,然后内部tomcat返回内容给用户。 但是慢慢的,使用我们平台…...

Python筑基之旅-运算符

目录 一、运算符 1、了解定义 2、理解意义 2-1、基本数据处理 2-2、条件判断 2-3、逻辑操作 2-4、赋值和更新 2-5、位操作 2-6、提高代码可读性 2-7、解决实际问题 2-8、学习其他编程语言的基础 3、探索方法 3-1、理解概念 3-2、练习基本运算 3-3、掌握优先级 …...

【Text2SQL】Spider 数据集

论文:Spider: A Large-Scale Human-Labeled Dataset for Complex and Cross-Domain Semantic Parsing and Text-to-SQL Task ⭐⭐⭐⭐⭐ EMNLP 2018, arXiv:1809.08887 Dataset: spider GitHub: github.com/taoyds/spider 一、论文速读 本文提出了 Text2SQL 方向的…...

语雀——云知识库/笔记

对于日常进行学习/创作或是记录学习、工作内容与心得的群体来说,能够及时同步的云笔记应用有着广泛的应用场景。近期,我也探索了许多款不同的软件应用,今天来分享一款很有特点的应用——语雀。 语雀,为每一个人提供优秀的文档和知…...

Java学习:电影查询简单系统

1.创建一个movice的对象来存放电影 里面设置构造器(有参和无参) package com.movie;public class movice {//创建一个movice的对象存放电影private int id;private String name;private double price;private double score;private String diector;pri…...

在Mac电脑下怎么部署QAnything?

在Mac电脑下部署QAnything,可以选择使用纯Python环境进行部署,这种方式不依赖GPU,适合在Mac等笔记本电脑上运行。以下是基于QAnything的纯Python环境安装教程的步骤[18]: 安装要求 Python 3.10(建议使用Anaconda3来管…...

单条16g和双条8g哪个好

单条16g和双条8g各有优劣,具体选择要根据个人需求和电脑配置来决定。 以下是一些参考信息: •单条16g内存的价格比双条8g内存的价格低,而且16g的内存容量大,一条内存十分的方便。 •两条8g内存可以组成双通道,电脑运行速度要快一些。 •对于普通使用电脑的人群与热衷于…...

Microsoft VBA Excel 去重小工具

问题简述 在本工作表中,A1:B3单元格样式如下,通过名称管理器B列的单元格被命名为"LinkFile"、“SheetName”、“InputArea”,请实现以下功能:读取Excel文件中的数据,去除重复的数据,并记录每个数…...

数据库管理-第194期 网络加速RDMA初探(20240526)

数据库管理194期 2024-05-26 数据库管理-第194期 网络加速RDMA初探(20240526)1 概念2 发展3 使用总结 数据库管理-第194期 网络加速RDMA初探(20240526) 作者:胖头鱼的鱼缸(尹海文) Oracle ACE A…...

C++小游戏 合集

生化危机 #include<conio.h> #include<string.h> #include<stdio.h> #include<stdlib.h> #include<windows.h> #include<time.h> #include<direct.h> int n,round,gold0; bool f1,f2,f3,deadfalse,PC_64Bit; char str[4]; struct n…...

【Python爬虫篇】Selenium在获取网页数据方面的使用及采集中国大学课程评论数据

1 selenium概述 1.什么是selenium&#xff1f; &#xff08;1&#xff09;Selenium是一个用于Web应用程序测试的工具。 &#xff08;2&#xff09;Selenium 测试直接运行在浏览器中&#xff0c;就像真正的用户在操作一样。 &#xff08;3&#xff09;支持通过各种driver&#…...

【JavaScript】文件下载

文件下载的消息格式 服务器只要在响应头中加入 Content-Disposition: attachment; filename"kxx" 即可触发浏览器的下载功能其中&#xff1a; attachment 表示附件&#xff0c;浏览器看到此字段&#xff0c;触发下载行为&#xff08;不同的浏览器下载行为有所区别&…...

利用Python去除PDF水印

摘要 本文介绍了如何使用 Python 中的 PyMuPDF 和 OpenCV 库来从 PDF 文件中移除水印&#xff0c;并将每个页面保存为图像文件的方法。我们将深入探讨代码背后的工作原理&#xff0c;并提供一个简单的使用示例。 导言 简介&#xff1a;水印在许多 PDF 文件中都很常见&#x…...

Python|GIF 解析与构建(5):手搓截屏和帧率控制

目录 Python&#xff5c;GIF 解析与构建&#xff08;5&#xff09;&#xff1a;手搓截屏和帧率控制 一、引言 二、技术实现&#xff1a;手搓截屏模块 2.1 核心原理 2.2 代码解析&#xff1a;ScreenshotData类 2.2.1 截图函数&#xff1a;capture_screen 三、技术实现&…...

conda相比python好处

Conda 作为 Python 的环境和包管理工具&#xff0c;相比原生 Python 生态&#xff08;如 pip 虚拟环境&#xff09;有许多独特优势&#xff0c;尤其在多项目管理、依赖处理和跨平台兼容性等方面表现更优。以下是 Conda 的核心好处&#xff1a; 一、一站式环境管理&#xff1a…...

Spark 之 入门讲解详细版(1)

1、简介 1.1 Spark简介 Spark是加州大学伯克利分校AMP实验室&#xff08;Algorithms, Machines, and People Lab&#xff09;开发通用内存并行计算框架。Spark在2013年6月进入Apache成为孵化项目&#xff0c;8个月后成为Apache顶级项目&#xff0c;速度之快足见过人之处&…...

2024年赣州旅游投资集团社会招聘笔试真

2024年赣州旅游投资集团社会招聘笔试真 题 ( 满 分 1 0 0 分 时 间 1 2 0 分 钟 ) 一、单选题(每题只有一个正确答案,答错、不答或多答均不得分) 1.纪要的特点不包括()。 A.概括重点 B.指导传达 C. 客观纪实 D.有言必录 【答案】: D 2.1864年,()预言了电磁波的存在,并指出…...

家政维修平台实战20:权限设计

目录 1 获取工人信息2 搭建工人入口3 权限判断总结 目前我们已经搭建好了基础的用户体系&#xff0c;主要是分成几个表&#xff0c;用户表我们是记录用户的基础信息&#xff0c;包括手机、昵称、头像。而工人和员工各有各的表。那么就有一个问题&#xff0c;不同的角色&#xf…...

Java面试专项一-准备篇

一、企业简历筛选规则 一般企业的简历筛选流程&#xff1a;首先由HR先筛选一部分简历后&#xff0c;在将简历给到对应的项目负责人后再进行下一步的操作。 HR如何筛选简历 例如&#xff1a;Boss直聘&#xff08;招聘方平台&#xff09; 直接按照条件进行筛选 例如&#xff1a…...

关键领域软件测试的突围之路:如何破解安全与效率的平衡难题

在数字化浪潮席卷全球的今天&#xff0c;软件系统已成为国家关键领域的核心战斗力。不同于普通商业软件&#xff0c;这些承载着国家安全使命的软件系统面临着前所未有的质量挑战——如何在确保绝对安全的前提下&#xff0c;实现高效测试与快速迭代&#xff1f;这一命题正考验着…...

【Go语言基础【13】】函数、闭包、方法

文章目录 零、概述一、函数基础1、函数基础概念2、参数传递机制3、返回值特性3.1. 多返回值3.2. 命名返回值3.3. 错误处理 二、函数类型与高阶函数1. 函数类型定义2. 高阶函数&#xff08;函数作为参数、返回值&#xff09; 三、匿名函数与闭包1. 匿名函数&#xff08;Lambda函…...

深入浅出深度学习基础:从感知机到全连接神经网络的核心原理与应用

文章目录 前言一、感知机 (Perceptron)1.1 基础介绍1.1.1 感知机是什么&#xff1f;1.1.2 感知机的工作原理 1.2 感知机的简单应用&#xff1a;基本逻辑门1.2.1 逻辑与 (Logic AND)1.2.2 逻辑或 (Logic OR)1.2.3 逻辑与非 (Logic NAND) 1.3 感知机的实现1.3.1 简单实现 (基于阈…...

Qemu arm操作系统开发环境

使用qemu虚拟arm硬件比较合适。 步骤如下&#xff1a; 安装qemu apt install qemu-system安装aarch64-none-elf-gcc 需要手动下载&#xff0c;下载地址&#xff1a;https://developer.arm.com/-/media/Files/downloads/gnu/13.2.rel1/binrel/arm-gnu-toolchain-13.2.rel1-x…...