第一章,02-实现异或门,Mux,DMux
简介
这是《计算机系统要素:从零开始构建现代计算机》的学习笔记,刚刚启程学习,记录博客好提醒自己不要半途而废。
书籍获取,代码实现与书籍介绍,可关注这位大佬,视频课程:coursera/B站
偷一张大佬github截图作为介绍:
有了上一篇:从零开始构建现代计算机–第一章,01-用与非门实现与戓非构建的与戓非门后,我们可以使用它们实现更复杂的电路
实现的逻辑门
异戓门(Xor)
Multiplexor(从多个输入值中选取一个作为输出,与DMux相反)
Demultiplexor(从多个输出线路中选择一个,将输入从这条线路输出)
符号约定
操作 | 表示 |
---|---|
与 | x ⋅ y x \cdot y x⋅y |
戓 | x + y x+y x+y |
非 | x ˉ \bar{x} xˉ |
用And/Or/Not实现Xor
真值表
相同为0,不同为1
x x x | y y y | X o r ( x , y ) Xor(x,y) Xor(x,y) |
---|---|---|
0 | 0 | 0 |
0 | 1 | 1 |
1 | 0 | 1 |
1 | 1 | 0 |
转换为And/Or/Not表示
使用书中提到的技巧,可以将真值表转化为布尔函数
f
(
x
,
y
)
f(x,y)
f(x,y) :
1.找到真值为1的行,即
x x x | y y y | X o r ( x , y ) Xor(x,y) Xor(x,y) |
---|---|---|
0 | 1 | 1 |
1 | 0 | 1 |
2.每一行中,输入变量x,y为0的取反,为1的不动,再取与:
x
=
0
,
y
=
1
x=0,y=1
x=0,y=1行,构造
x
ˉ
⋅
y
\bar{x} \cdot y
xˉ⋅y,显然
x
ˉ
⋅
y
\bar{x} \cdot y
xˉ⋅y在
x
=
0
,
y
=
1
x=0,y=1
x=0,y=1时,值才能是1
x
=
1
,
y
=
0
x=1,y=0
x=1,y=0行,构造
x
⋅
y
ˉ
x \cdot \bar{y}
x⋅yˉ,显然
x
⋅
y
ˉ
x \cdot \bar{y}
x⋅yˉ在
x
=
1
,
y
=
0
x=1,y=0
x=1,y=0时,值才能是1
3.什么时候Xor(x,y)输出1?显然只能是2中的两种情况,要么是第一种,要么是第二种,既然是"要么…要么…",那么用or连接就好了:
f
(
x
,
y
)
=
x
ˉ
⋅
y
+
x
⋅
y
ˉ
f(x,y) = \bar{x} \cdot y + x \cdot \bar{y}
f(x,y)=xˉ⋅y+x⋅yˉ
电路连接
上节实现的与戓非门,就可以直接拿来用了:
用And/Or/Not实现Multiplexor(Mux)
Mux有三个输入:x,y,sel
一个输出:out
功能为根据sel的值从x,y中选择一个值输出:out = x if sel == 0, else out = y
真值表
x x x | y y y | sel | out |
---|---|---|---|
0 | 0 | 0 | 0 |
0 | 1 | 0 | 0 |
1 | 0 | 0 | 1 |
1 | 1 | 0 | 1 |
0 | 0 | 1 | 0 |
0 | 1 | 1 | 1 |
1 | 0 | 1 | 0 |
1 | 1 | 1 | 1 |
简化真值表
sel | out |
---|---|
0 | x |
1 | y |
转换为And/Or/Not表示
利用公式
x
⋅
y
ˉ
⋅
s
e
l
‾
+
x
⋅
y
⋅
s
e
l
‾
=
x
⋅
s
e
l
‾
x
ˉ
⋅
y
⋅
s
e
l
+
x
⋅
y
⋅
s
e
l
=
y
⋅
s
e
l
x\cdot \bar{y} \cdot \overline{sel} + x\cdot y \cdot \overline{sel} = x \cdot \overline{sel}\\ \bar{x}\cdot y \cdot sel + x\cdot y \cdot sel = y \cdot sel
x⋅yˉ⋅sel+x⋅y⋅sel=x⋅selxˉ⋅y⋅sel+x⋅y⋅sel=y⋅sel
按上面从真值表到Xor函数的转化方法,可以得到Mux函数为
M
u
x
(
x
,
y
,
s
e
l
)
=
x
⋅
y
ˉ
⋅
s
e
l
‾
+
x
⋅
y
⋅
s
e
l
‾
+
x
ˉ
⋅
y
⋅
s
e
l
+
x
⋅
y
⋅
s
e
l
=
x
⋅
s
e
l
‾
+
y
⋅
s
e
l
Mux(x,y,sel) =x\cdot \bar{y} \cdot \overline{sel} + x\cdot y \cdot \overline{sel} + \bar{x}\cdot y \cdot sel + x\cdot y \cdot sel \\= x \cdot \overline{sel} + y \cdot sel
Mux(x,y,sel)=x⋅yˉ⋅sel+x⋅y⋅sel+xˉ⋅y⋅sel+x⋅y⋅sel=x⋅sel+y⋅sel
电路连接
用And/Or/Not实现Demultiplexor(DMux)
DMux有两个输入:in,sel
两个输出:x,y
功能为根据sel,从x,y中选择一路,将in从这条路上输出:
{x, y} =
{in, 0} if sel == 0
{0, in} if sel == 1
真值表
in | sel | x x x | y y y |
---|---|---|---|
0 | 0 | 0 | 0 |
0 | 1 | 0 | 0 |
1 | 0 | 1 | 0 |
1 | 1 | 0 | 1 |
转换为And/Or/Not表示
按上面Xor函数的转化方法,从真值表中可以得到DMux函数为
x
=
i
n
⋅
s
e
l
‾
y
=
i
n
⋅
s
e
l
x = in \cdot \overline{sel}\\ y = in \cdot sel
x=in⋅sely=in⋅sel