8位2进制CPU设计和实现


半加器

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

实现原理

结果S是AB的异或 进位C是AB的与
$$
S = \overline{A}B + \overline{B}A
$$

$$
C = AB
$$

真值表:

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

电路实现:

半加器

测试电路

全加器

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

实现原理
$$
S_i = A_i \bigoplus B_i\bigoplus C_{i-1}
$$

$$
C_i=A_iC_i+A_iB_i+B_iC_{i-1}
$$

真值表:

C1 A B S C2
0 0 0 0 0
0 0 1 1 0
0 1 0 1 0
0 1 1 0 1
1 0 0 1 0
1 0 1 0 1
1 1 0 0 1
1 1 1 1 1

电路实现:

全加器

测试电路

8位串行加法器

8位串行加法器

测试电路

8位并行加法器

待…

减法器

计算机无法直接实现减法,减法实现可以通过补码实现。

补码:原码取反+1

比如:101-001 == 101 + 111(进位被舍去了)

则就可以按照这个思路实现一个减法器,基于加法器实现即可。

1位取反器

EN INPUT OUTPUT
0 0 0
0 1 1
1 0 1
1 1 0

由真值表可得,一位取反器就是一个异或门

8位取反器

电路实现

当使能端位1的时候开启取反功能,并且连接到C1口,同时进行了+1操作,接下来处理C2的进位,我们期望当EN为0做加法时有正确的进位,当EN为1做减法时忽略进位,真值表:

EN C2 O
0 0 0
0 1 1
1 0 0
1 1 0

真值表达式:
$$
O = \overline{EN}C2
$$
非门+与门

此时减法操作进位忽略

数码管实现

16进制

使用ROM实现

单个数码管显示

一对

加法测试:

减法测试:

10进制

电路

这里的ROM数据太多了,手动的效率很慢,使用python脚本完成设置

保存在本地,命名为test.bin

出现打不开的情况下载hex插件

同目录下新建python程序

import os

dirname = os.path.dirname(os.path.abspath(__file__))

with open(os.path.join(dirname, "test.bin"), "wb") as file:
    for var in range(256):
        var = str(var)
        var = int(var,16)
        byte = var.to_bytes(2,byteorder="little")
        file.write(byte)

修改成功,重新载入即可

加法测试:

形象的解释了255+1 == 0

减法测试:

0-1 = 255!出现了大一的时候无法理解的事情

改进

需求:当没有数字显示的数码管就不显示数字0,而且不点亮。

8位二选一选择器

一位:

真值表:

EN A B O
0 0 0 0
0 0 1 1
0 1 0 0
0 1 1 1
1 0 0 0
1 0 1 0
1 1 0 1
1 1 1 1

当EN为0,输出等于B,当EN为1,输出等于A

八位:

数码管使能

如果EN为1,则数码管使能,如果EN为0,则数码管熄灭

电路实现

十进制版本:

实现原理:如果要显示的数据的话,数码管的某一位就一定有一个1,就给最高位或输入,再送给EN,如果有一个1就说明点亮,第二个 数码管用了5位的或门,其中有一位来自最高位的数码管,比如显示108,这个0虽然本身没有1,但是高位是一个1,送了进来,则就点亮,如果接受高位的这个结果,108,中间的0就不会点亮。

测试

十六进制版本:

原理同上


数字电路结束


触发器

RS触发器

真值表:

R S Q Q`
0 0 不变 不变
0 1 1 0
1 0 0 1
1 1 0 0

该电路有以下特点:

  • 刚上电时,输出的状态是不确定的,只确定两个输出是相反的。
  • 当其中一个输出为1时,输出状态立刻确定,见上面真值表。
  • 当两个输出都为0时,输出状态保持不变。
  • 当两个输出都为1时,输出都为0,则无法通过单个输出判断状态,此时触发器状态不确定(应避免此情况)。

初始状态不确定

电路

D触发器


文章作者: zhang
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 zhang !
  目录