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