首页 > 其他分享 >CPU原理学习

CPU原理学习

时间:2023-11-28 14:11:07浏览次数:38  
标签:十六进制 0111 二进制 学习 数码管 全加器 原理 CPU 进位

本文是对B站踌躇月光大佬的8位二进制CPU实现教程的学习记录 非常感谢这位大大能够提供这么好的教程!!!OvO

半加法器

  • 半加器是指对输入的两个一位二进制数相加(A与B),输出一个结果位(S)和进位(C),没有进位的输入加法器电路,是一个实现一位二进制数的加法电路。

计算公式:

S = A^B (A异或B)
C = A&B (A与B)

真值表

A B S C
0 0 0 0
0 1 1 0
1 0 1 0
1 1 0 1

电路实现

全加法器

  • 全加器是用门电路实现两个二进制数相加并求出和的组合线路,称为一位全加器。一位全加器可以处理低位进位,并输出本位加法进位。多个一位全加器进行级联可以得到多位全加器。

输入:
A:数值a
B:数值b
Cl: 进位输入
输出:
S:结果sum
C: 进位carry


真值表:

A B Cl S C
0 0 0 0 0
0 0 1 1 0
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0

  • 用两个半加器实现全加器

电路实现:

8位加法器

  • 通过8个全加器级联来实现8位加发器

输入:
A:数值a
B:数值b
Cl: 进位输入
输出:
S:结果sum
C: 进位carry


电路实现:

LED数码管


  • 不同的位控制不同的发光部件,从第0位到第7位,通过控制不同的LED来组合出数字

  • 电路测试:下图是控制数码管的 0 1 2 位来点亮 下图的LED灯管 可以看到发光的LED灯管组成了数字"7"

七段十六进制数码管


  • 利用七段数码管来显示16进制的数字 \
  • 通过四位二进制的输入来显示 0 到 F 十六进制符号

可以通过 ROM 来映射数据 将0到7位的二进制数,转为16进制数写入ROM即可

符号 8位二进制 十六进制
0 0011 1111 3F
1 0011 0000 30
2 0101 1011 5B
3 0101 1111 4F
4 0110 0110 66
5 0110 1101 6D
6 0111 1101 7D
7 0000 0111 7
8 0111 1111 7F
9 0110 1111 6F
A 0111 0111 77
B 0111 1100 7C
C 0011 1001 39
D 0101 1100 5E
E 0111 1001 79
F 0111 0001 71

将上述的十六进制数字填入ROM储存单元中 结果如下图所示

双十六进制数码管译码电路

  • 将一个8位二进制数 用两个7段数码管来显示
  • 将两个十六进制数码管并联 即为十六进制数码管

将十六进制数码管放到之前的加法器中测试

七段数码管十进制显示

  • 将一个8位二进制数 用三个7段数码管来显示
  • 将 0到255 这256个数字写入到 ROM 储存单元中

  • 将这个数据表命名为:test.bin 另存到桌面 然后用VsCode打开 这个二进制文件 (需安装Hex Editor插件才能显示数据)

  • 用python脚本来写入数据 在桌面新建 test.py

import os

// 获得当前文件所在的目录
dirname = os.path.dirname(os.path.abspath(__file__)) 

// 将 0-255 以小端序的方式写入 test.bin 文件里
with open(os.path.join(dirname, 'test.bin'), 'wb') as file:
    for var in range(256):
        var = str(var)
        var = int(var, base=16)
        byte = var.to_bytes(2, byteorder='little') 
        file.write(byte)

运行 test.py 后可以看到数据写入了 test.bin 中 如下图

将十进制数码管放到加法器中测试 如下图

标签:十六进制,0111,二进制,学习,数码管,全加器,原理,CPU,进位
From: https://www.cnblogs.com/cyhnanana/p/17801825.html

相关文章

  • C++ Primer 学习笔记——第十三章
    第十三章拷贝控制前言类是如何控制类型对象的拷贝、赋值、移动和销毁的?类通过一些特殊的成员函数控制,包括:拷贝构造函数、移动构造函数、拷贝赋值运算符、移动赋值运算符以及析构函数。当定义一个类时,我们显式地或隐式的指定在此类型的对象拷贝、移动、赋值和销毁时做什么。一......
  • Netty源码学习6——netty编码解码器&粘包半包问题的解决
    系列文章目录和关于我零丶引入经过《Netty源码学习4——服务端是处理新连接的&netty的reactor模式和《Netty源码学习5——服务端是如何读取数据的》的学习,我们了解了服务端是如何处理新连接并读取客户端发送的数据的:netty的reactor:主reactor中的NioEventLoop监听accept事件,然......
  • Redis Sentinel(哨兵)实现原理之领导者Sentinel节点选举和故障转移
    领导者Sentinel节点选举Sentinel节点之间会做一个领导者选举的工作,选出一个Sentinel节点作为领导者进行故障转移的工作。Redis使用了Raft算法实现领导者选举。故障转移领导者选举出的Sentinel节点负责故障转移,过程如下:1.在从节点列表中选出一个节点作为新的主节点,这一步是相对复杂......
  • Linux驱动开发笔记(五):驱动连接用户层与内核层的文件操作集原理和Demo
    前言  驱动写好后,用户层使用系统函数调用操作相关驱动从而实现与系统内核的关联,本篇主要就是理解清楚驱动如何让用户编程来实现与内核的交互。<br>杂项设备文件操作集cd/usr/src/linux-headers-4.18.0-15viinclude/linux/fs.h  搜索到(vi则直接使用“/”):  struct......
  • 客户端相关知识学习(一)之混合开发,为什么要在App中使用H5页面以及应用场景、注意事项
     混合开发随着移动互联网的高速发展,常规的开发速度已经渐渐不能满足市场需求。原生H5混合开发应运而生,目前,市场上许多主流应用都有用到混合开发,例如支付宝、美团等。下面,结合我本人的开发经验,简单谈一下对混合开发的认识以及实现方式。Hybrid App(混合开发)主要以JS+Native两......
  • 客户端相关知识学习(二)之h5与原生app交互的原理
      前言现在移动端web应用,很多时候都需要与原生app进行交互、沟通(运行在webview中),比如微信的jssdk,通过window.wx对象调用一些原生app的功能。所以,这次就来捋一捋h5与原生app交互的原理。h5与原生app的交互,本质上说,就是两种调用:app调用h5的代码h5调......
  • 客户端相关知识学习(三)之Android原生与H5交互的实现
     Android原生与H5交互的实现H5调用原生的方式方式可能有多种,根据开发经验,接触过两种方式。方法一:Android向H5注入全局js对象,也就是H5调Android1.首先对WebView进行初始化WebSettingssettings=webview.getSettings();settings.setJavaScriptEnabled(true);//允......
  • 客户端相关知识学习(四)之H5页面如何嵌套到APP中
      Android原生如何渲染H5页面Android与H5的交互方式大概有以下1种:利用WebView进行交互(系统API)iOS原生如何渲染H5页面iOS与H5的交互方式大概有以下5种:利用WKWebView进行交互(系统API)利用UIWebView进行交互(系统API)苹果的javascriptcore.f......
  • 客户端相关知识学习(五)之什么是webView
      webview是什么?作用是什么?和浏览器有什么关系?Android系统中内置了一款高性能webkit内核浏览器,在SDK中封装为一个叫做WebView组件也就是说WebView是一个基于webkit引擎、可以解析DOM元素展现web页面的控件,它和浏览器展示页面的原理是相同的所以可以把它当做浏览器......
  • 客户端相关知识学习(八)之Android“.9.png”
    客户端相关知识学习(八)之Android“.9.png” 参考Android中.9图片的含义及制作教程.9.pngAndroid.9.png的介绍......