8位二进制cpu的设计和实现-半加器

8位二进制cpu的设计和实现-半加器

ligood Lv3

项目地址

[CPU/Circuit/Half Adder at main · TomLiYouXiu/CPU (github.com)](https://github.com/TomLiYouXiu/CPU/tree/main/Circuit/Half Adder)

CPU基本电路的实现

本文是对B站UP踌躇月光出的8位二进制CPU的设计和实现的文字教程复现第一部分 CPU基本电路的实现
相关 github 地址:https://github.com/StevenBaby/computer
PS:有错误的地方请指正,谢谢!共同学习,一起进步!

概述

这个视频主要是分享8位二进制CPU的设计和实现。
首先,解释一下为什么做这个视频。众所周知,计算机专业众多课程中有一门课是计算机组成原理,这门课程实际上并不那么好理解,因为他涉及到了硬件。但是组成原理这门课又没有对硬件部分做充分的描述,导致这门课没有其他课那么容易学习,特别是中央处理器(CPU)部分的实现。那么我们一起来实现一个8位二进制CPU,就可以更加自然的理解计算机组成原理究竟说了些什么。
其次,关于做CPU或者说做一台计算机,做一台什么样的计算机的问题,图灵(1912-1954)给出过答案,图灵在他的论文<可计算性>中给出了什么样的事情是计算机可以做的,什么是做不到的,以及给出了计算机的抽象模型-图灵机,其中就描述了计算机和机器的区别,区别就是支持任何条件转移指令的机器就是计算机,也就是说我们要做一个支持条件转移的计算机,在这篇论文中还介绍了另一种测试计算机的方法,这就是人们熟知的图灵测试。最早引入条件转移指令的人是英国数学家和经济学家查尔斯.巴贝奇(1792-1871),大约在19世纪,巴贝奇就有了制造解析机的想法,不过巴贝奇的解析机并没有在他有生之年实现。那么我们要做的CPU就是可以支持条件转移指令的机器,这里推荐大家两本书,一本是查尔斯的《编码:隐匿在计算机软硬件背后的语言》,也是这本书让up有了想做此视频的想法,第二本是李忠的《穿越计算机的迷雾》,可以作为前一本书的补充,值得大家一读再读。以上两本就作为教材了,如果想尽快了解做什么,可以去下载这两本书先读一读。工欲善其事必先利其器,本教程使用一个电路仿真的软件logiccircuit(下面会提到)来制作CPU电路。

准备工作

  • 小白可以看看上面的两本书的前面部分或者快速入门数电基础
  • 下载仿真软件logiccircuit

logiccircuit软件使用方法

打开软件,主窗口由以下几个部分组成

  • 软件提供模块:软件自身提供的一些基本输入输出单元和基本模块
  • 自建模块:通过下面的软件提供模块搭建的特殊功能模块
  • 搭建操作窗口:拖动模块连线和仿真展示的窗口
  • 开启仿真按钮:模块搭建和连线之后开启仿真的按钮

输入输出单元

  • 输入单元
    • 位宽:可选位宽如1位,8位
    • 边:搭建模块时选择接口位置
  • 输出单元
    • 位宽:可选位宽如1位,8位
    • 边:搭建模块时选择接口位置
  • 按钮/切换器
    • 符号:名字是模块内部用的,特别是展示真值表时显示。符号是模块上表示该引脚的一个代号。
    • 切换器:切换器是锁定状态的,和按钮不同,按钮按下是一个状态,弹开是一个状态,切换器每按下弹起一次切换一次状态
    • 针脚:和边类似,搭建模块时选择接口位置
  • 常量:和输入单元差不多,只不过是常量
  • 传感器:暂时不涉及
  • 时钟:提供时钟信号
  • 分路器:用来合并分路针脚为总线
    • 分路针脚数目:引脚多的一端的针脚数
    • 分路针脚位宽:引脚多的一端的单个针脚的位宽
    • 组合针脚位置:单总线的位宽=分路针脚数目x分路针脚位宽,位置决定是输入还是输出,有三角标志的是低位
  • LED:方便显示逻辑电平输出,1 亮 0灭
  • 7段数码管:显示数字
  • LED矩阵
  • 图形序列
  • 蜂鸣器
  • 探针:方便看某一处的电平输出

基本元件

  • 非门
    • 逻辑表达式:L = !A
    • 真值表
      A L
      0 1
      1 0
  • 与门
    • 逻辑表达式:L = A & B
    • 真值表
      A B L
      0 0 0
      0 1 0
      1 0 0
      1 1 1
  • 或门
    • 逻辑表达式:L = A | B
    • 真值表
      A B L
      0 0 0
      0 1 1
      1 0 1
      1 1 1
  • 与非门
    • 逻辑表达式:L = !A & B
  • 或非门
    • 逻辑表达式:L = !A | B
    • 真值表
      A B L
      0 0 1
      0 1 0
      1 0 0
      1 1 0
  • 异或门
    • 逻辑表达式:L = A ^ B
    • 真值表
      A B L
      0 0 0
      0 1 1
      1 0 1
      1 1 0
  • 异或非门
    • 逻辑表达式:L = !A ^ B
  • 与或非门
    • 逻辑表达式:L = !(A & B)
  • 或非门
  • 与非门
    • 逻辑表达式:L = !A & B
    • 真值表
      A B L
      0 0 1
      0 1 1
      1 0 1
      1 1 0
  • 异或非门
    • 逻辑表达式:L = !A ^ B
  • NAND门
    • 逻辑表达式:L = !(A | B)
  • 或非门
    • 逻辑表达式:L = !A | B
  • 异或非门
    • 逻辑表达式:L = !A ^ B
  • NAND门
    • 逻辑表达式:L = !(A & B)

真值表:选中自建模块后,确保有输入输出单元,然后点击菜单栏电路-真值表,即可查看该模块的真值表

操作方法

  • 新建模块
    点击菜单栏电路-新建逻辑电路,即可新建模块
  • 修改自建模块名称
    选中模块,点击菜单栏电路-逻辑电路,即可修改名字,符号,类别
  • 交叉线的画法
    按住Alt,点击交叉点
  • 旋转元器件
    ctrl+L

半加器

单位二进制加法:0 + 0 = 0(无进位)、0 + 1 = 1(无进位)、1 + 0 = 1(无进位)、1 + 1 = 0(进位1)
半加器:实现单位二进制加法,不涉及进位

  • 逻辑表达式:S = A ^ B、C = A & B
  • 真值表
    A B S C
    0 0 0 0
    0 1 1 0
    1 0 1 0
    1 1 0 1
    实现这样一个运算的逻辑电路称为半加器

半加器电路是指对两个输入数据位相加,输出一个结果位和进位,没有进位输入的加法器电路。 是实现两个一位二进制数的加法运算电路。

根据经验我们得知,逻辑表达式:

Misplaced & C = A & B

打开logiccircuit根据上面异或和与关系搭建门电路,验证

  • 将异或(XOR)门用与、或、非门实现出来
  • 然后用异或(XOR)门和与门共同搭建半加器(Half Adder)
  • 搭建完之后通过按键和LED测试,符合真值表逻辑即可

  • 标题: 8位二进制cpu的设计和实现-半加器
  • 作者: ligood
  • 创建于 : 2024-07-25 20:40:23
  • 更新于 : 2024-07-25 20:41:36
  • 链接: https://blog.ligood.top/2024/07/25/8位二进制cpu的设计和实现-半加器/
  • 版权声明: 版权所有 © ligood,禁止转载。