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

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

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

相关文章

【最新区块链论文录用资讯】CCF A — SP 2024 共17篇

Conference:45th IEEE Symposium onSecurity and Privacy CCF level:CCF A Categories:网络与信息安全 Year:2024 Num:17 Efficient Zero-Knowledge Arguments For Paillier Cryptosystem Paillier 加密系统的有效…

基于python的网页自动刷新工具

1.下载webdriver https://msedgewebdriverstorage.z22.web.core.windows.net/?prefix122.0.2365.59/下载Edge的浏览器驱动 2.安装selenium pip install selenium4.11.1 3.写代码 # -*- coding: utf-8 -*- import tkinter as tk from tkinter import messagebox import thr…

【halcon】set_part 实现平移和缩放 彻悟版

背景 之前写了一篇关于set_part 的文章 ,确实也实现了平移和缩放。平移是对的,但是缩放其实有畸变。这个问题一直都困扰着我,知道昨天连续测试了好几个小时,直到晚上11点终于完美解决。 坐标和高宽 坐标 再讲set_part 之前&am…

免费撸gpt-4o和各种大模型实用经验分享

项目 Github: https://github.com/MartialBE/one-api 先贴两张图: 说明 免费撸AI大模型,各位可以对照下面我给出的大模型记录表来填,key需要自己去拿,国内都需要手机号验证,如果你不介意。另外我在自己的博客放出免费API给大家…

模型评价指标笔记:混淆矩阵+F1+PR曲线+mAP

评价指标 二分类评价指标 混淆矩阵 TP: 正确预测为了正样本,原来也是正样本 FN: 错误的预测为负样本,原来是正样本 (漏报,没有找到正确匹配的数目) FP: 错误的预测为正样本,原来是负样本 (误报,没有的匹配不正确) TN…

CIM模型

CIM 是 Esri 制图信息模型。 它是一个地图内容规范,用于记录在保存、读取、引用或打开时如何永久保留描述不同项目组件的信息。 该规范以 JSON 表示,适用于 ArcGIS 应用程序和 API 中的地图、场景、布局、图层、符号和样式。 CIM 不仅限于制图设置。 要了解属性的组织方式以及…

【Tools】SpringBoot工程中,对于时间属性从后端返回到前端的格式问题

Catalog 时间属性格式问题一、需求二、怎么使用 时间属性格式问题 一、需求 对于表中时间字段,后端创建对应的实体类的时间属性需要设定格式(默认的格式不方便阅读),再返回给前端。 二、怎么使用 导入jackson相关的坐标&#x…

Vue.js - Vue 的安装 以及 常用的 Vue 指令 【0基础向 Vue 基础学习】

文章目录 Vue 快速上手1、Vue.js 官网 & Vue.js 的获取2、创建 Vue 实例,初始化渲染3、插值表达式 安装 Vue 开发者工具:装插件调试 Vue 应用Vue 指令1、v-show 指令2、v-if3、v-else & v-else-if4、v-onv-on 调用传参 5、v-bindv-bind 对于样式…

【算法】前缀和算法——和为k的子数组之和

题解:和为k的子数组之和(前缀和算法) 目录 1.题目2.题解思路2.1前缀和 哈希表,算法步骤:2.2细节如下:2.3参考代码: 3.总结及思考 1.题目 题目链接:LINK 2.题解思路 暴力求解自然不用多说,时…

【SQL】外连接 LEFT JOIN

目录 一.内连接与外连接 1.内连接(inner join) 2.外连接(outer join) 二.两表连接 1.我们先来试试看内连接: 2.我们再来试试外连接 三.单表外连接 四.总结 一.内连接与外连接 先得介绍内连接和外连接两个概念&…

第199题|关于函数的周期性问题|函数强化训练(六)|武忠祥老师每日一题 5月24日

解题思路:解这道题我们要用到下面这个结论 f(x)连续,以T为周期时,原函数以T为周期的充分必要条件是: (A) sin x显然是以π为周期的,我们可以看到并不等于0,根据结论,A的原函数显然不是周期函数。 (B) 的…

你以为的私域是真正的私域嘛??你的私域流量真的属于你嘛?

大家好 我是一个软件开发公司的产品经理 专注私域电商行业7年有余 您的私域流量是真正的属于你自己嘛? 私域的定义 私域的界定:一个互联网私有数据(资产)积蓄的载体。这个载体的数据权益私有,且具备用户规则制定权…

Mysql 备份恢复 mysqldump与xtrabackup备份

1.1 备份的原因 备份是数据安全的最后一道防线,对于任何数据丢失的场景,备份虽然不一定能恢复百分之百的数据 (取决于备份周期),但至少能将损失降到最低。衡量备份恢复有两个重要的指标:恢复点目标(RPO) 和恢复时间目标(RTO)&…

数据库常用命令(1)

DML 1.添加数据(insert into) insert into 表名 values (值1,值2....); 表示成功运行: 2.修改数据(update) update 表名 set 字段名1值1,字段名2值2.....【where条件】 3.删除数据&#xff0…

元年科技数据智能研发部负责人张亚东受邀为第十三届中国PMO大会演讲嘉宾

全国PMO专业人士年度盛会 北京元年科技股份有限公司数据智能研发部负责人张亚东先生受邀为PMO评论主办的2024第十三届中国PMO大会演讲嘉宾,演讲议题为“大模型时代,AI创新型工具提升项目管理效率”。大会将于6月29-30日在北京举办,敬请关注&a…

jmeter之HTTP请求和查看结果树

一、HTTP请求作用: 可以发送post或get请求等请求可以向服务器发送参数或消息体数据可以进行文件上传 HTTP请求:是线程组内的取样器最常用的的一个原件 二、查看界面 添加一个HTTP请求:选择线程组–添加–取样器–HTTP请求 默认界面 名称和…

ThreadLocal为什么会导致内存泄漏?

问题引出: ThreadLocal是为了解决什么问题而产生的? ThreadLocal发生内存泄漏的根本原因是什么? 如何避免内存泄漏的发生?定义 为了解决多个线程同时操作程序中的同一个变量而导致的数据不一致性的问题。   假设现在有两个线程A…

如何获取一个城市或者一个区域的玫瑰风向图?

玫瑰风向图是一种直观展示风向和风速的图形工具,它在气象学、城市规划、农业等领域都有广泛的应用。那么,如何获取某个城市或某个区域的玫瑰风向图呢? 首先,我们可以借助互联网资源获取玫瑰风向图。现代网络技术发达,…

前端 防抖和节流

在前端开发中,防抖(Debounce)和节流(Throttle)是两种常用的性能优化技术,尤其在处理频繁触发的事件时显得尤为重要。无论是在用户输入、窗口调整大小,还是滚动事件中,这两种技术都可…

3D 生成重建011-LucidDreamer 优化SDS过平滑结果的一种探索

3D 生成重建011-LucidDreamer 优化SDS过平滑结果的一种探索 文章目录 0论文工作1论文方法2 效果 0论文工作 文本到3D生成的最新进展标志着生成模型的一个重要里程碑,为在各种现实场景中创建富有想象力的3D资产打开了新的可能性。虽然最近在文本到3D生成方面的进展…