数字电路学习
一.电路基础
1.数字电路仿真软件-digital
digital官网:https://github.com/hneemann/Digital?tab=readme-ov-file
建议使用红绿色盲模式
2.异或门
输入1 | 输入2 | 输出 |
---|---|---|
0 | 0 | 0 |
0 | 1 | 1 |
1 | 0 | 1 |
1 | 1 | 0 |
简单来说就是判断两个输入是否相同
异或门的组成:
异或门也有对应的异或非门
二.拓展电路
1.半加器和全加器
半加器:
对于一位二进制的加法运算,应该输入两个数,输出两个数,一个表示进位,一个表示和
得出真值表:
输入A | 输入B | 进位 | 和 |
---|---|---|---|
0 | 0 | 0 | 0 |
0 | 1 | 0 | 1 |
1 | 0 | 0 | 1 |
1 | 1 | 1 | 0 |
所以A、B和进位的关系是与,和和的关系是异或
数字电路实现:
叫半加器是因为没有实现进位到和的转化
全加器的实现:
cin表示上一位有没有进位,Cout表示进位,S表示和
全加器也是一位加法器
2.加法器
4位加法器的实现:
3.一位减法器
真值表:
输入A | 输入B | 差 | 借位 |
---|---|---|---|
0 | 0 | 0 | 0 |
0 | 1 | 1 | 1 |
1 | 0 | 1 | 0 |
1 | 1 | 0 | 0 |
根据真值表,得出半减器:
一位减法器:
4.减法器
4位减法器:
5.SR锁存器
与非门构成的1位锁存器:
=
S位set位,R是重置位
锁存器的初始状态应为S、R都为1
置位:S输入0,Q会变为1,此时S端变不变Q都为1
复位:R输入0,Q会变为0,此时S端变不变Q都为0
S、R都为0时,该电路失效
或非门构成的1位锁存器:
区别是低电平是初始状态
6.带en开关的SR锁存器
为了解决电路可能会失效的情况,用一个额外的使能开关en(enable)使这个电路不会失效
改进后的电路:
=
这个电路中,只要en不输入1,锁存器的输入端就都是1
但是这个电路中,S、R、en不能同时为1
7.带en开关的D锁存器
D锁存器:
为了解决S、R、en不能同时为1的问题,于是将S、R合并,并加入一个非门,使S、R不会同时为1
8.D触发器
电位从0到1的变化是有时间的,所以D锁存器的数据记录不精确
我们可以记录电位的上升和下降,这样精确度会提高
en为0、1时,D变化不会造成影响
只有en从0变为1时,D的数据才会被存到Q里:D为1则Q为1、D为0则Q为0
9.多位寄存器
4位寄存器:
10.带寄存器的加法器
每次按下C按钮,B中的数字都会加到A中,这样就能实现多个数字相加
三.计算机原理
1.冯诺依曼模型的计算机
冯诺依曼模型的四个子系统:
- 存储器
- 算数逻辑单元(ALU)
- 控制单元
- 输入/输出单元
2.CPU介绍
CPU中的算数逻辑单元:
- 算数运算:整数和浮点数运算
- 位移运算:逻辑移位运算和算数移位运算
- 逻辑运算:
CPU中的寄存器:
- 数据存储寄存器
- 指令寄存器
- 程序计数器
3.内存介绍
内存是存储单元的集合,每个存储单元都有唯一的标识,称为地址
内存分RAM和ROM。RAM就是内存,叫随机存取存储器;ROM叫只读存储器,常用来存储开机程序,在现代可以理解为硬盘
CPU与主存储器之间由称为总线的三组线路进行连接,分别是:数据总线、地址总线、控制总线
4.输入输出系统介绍
(1)分存储设备:键盘、鼠标
(2)存储设备:有磁介质和光介质两种,如CD
5.程序的执行
机器周期:CPU利用重复的机器周期来执行程序中的指令
一个周期分三步:取指令、译码、执行
不同的指令体系结构:
CISC:复杂指令集计算机
RISC:精简指令集计算机
四.构建alu
1.1位复用器的实现电路
1位复用器:1则开关闭合,0则开关打开,继电器是其中一种
电路:
2.多位复用器实现计算功能选择
用1位复用器实现2位复用器:
实现加减与或的算法选择:
3.比较器
ZF(Zero Flag):表示两个数字是否相等
下面这个电路就可以直接得出,ZF:
实际上就是一个异或非门
真正的比较器会有三个输出,分别是大于等于小于,所以这是一个1位比较器的简化版
2位比较器的简化版:
加上比较器的alu:
4.最初的计算单元
实现多个数字的加减与或运算的计算单元:
五.构建简易内存
1.使用38译码表示地址值
38指的是用3位数字表示8个值
38译码器的电路:
将38译码器和寄存器相连:
2.地址对应数据存储的简单实现
简易实现:
Din是输入的数据,Addr是指定的地址
3.EEPROM的简单电路实现
有独立端口的EEPROM:
str控制数据的写入,驱动器的作用是控制输出,若ld为0,则输出是高阻态,即Z,若ld为1,则输出等于输入
这种电路更接近于寄存器,现实中的内存不会是这种结构,而会更加复杂
六.组合CPU
1.EEPROM+计算单元
tips:EEPROM可以预编译数据
缺陷:需要在Addr中输入要查询的地址才能进行计算,如果要让三个数字相加,需要依次输入1、2、3
2.计数器
ovf表示有无溢出
加上计数器的EEPROM+计算单元:
3.halt信号
作用:使计算停止
由于时钟信号一般频率很高,halt信号不能手操,可以用比较器控制计算的次数
缺陷:只能一直加或一直减之类的
4.完整的自动化的计算单元
可以用第二个EEPROM来记录加减与或:
5.编写控制指令halt信号
对于优化halt信号,可以把它放到存运算符的EPPROM中:
在第15位为0时停止计算
6.存储计算结果
将记录计算符的EEPROM中每行数字的第11位编写为输送给数据内存的EEPROM的str
在计算完之后str变为1,Din中的数据便会存储到数据内存中的下一位
7.解决高阻态
因为str < halt,ld开启时,原本应只存储的数据也会被用于计算
为了解决这个问题,可以在第12位记录ld信号,存储后ld会变为0,阻止计算
但是,当ld为0时,输出D为高阻态,这时计算器的输入B是不确定的,会变成一个奇怪的数字
所以,可以加一个复用器,进行数据筛选
在第4、5位记录selB,当selB为1时使复用器输出0
8.selA实现多次计算
ldA为读取指令,实际上每次计算的第一个数字是ldA指令,即读取数字然后+0
计算结束后,计算结果需要清零,所以可以引入selA信号
将第2、3位分配给selA,当selA为1时使复用器输出0
9.修改计数器实现跳转
平时en_pc为1,计数器正常运行
需要时ld_pc为1,en_pc为0,计数器会变为addr中的值