半加器
半加器
电路是指对两个输入数据位相加
,输出一个结果位
和进位
,没有进位输入
的加法器电路。 是实现两个一位二进制数
的加法运算电路
。
实现原理
结果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位并行加法器
待…
减法器
计算机无法直接实现减法,减法实现可以通过补码实现。
补码:原码取反+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触发器