简 介: 生活本来就不容易,就不如将原本的枯燥的事情做得更加有趣一点点。在下面的博文中就介绍了在微信朋友圈里看到的一张趣图,认认真真求解的过程。也许惊喜就在最后出现了。
关键词
: 组合逻辑,乘法器, Python
01 朋友圈里的一张组合逻辑图
下面是在朋友区获得的一张组合逻辑图,询问它的二值逻辑功能是什么呢?
▲ Lucky Resistor的逻辑关系
1.逻辑分析
这个逻辑图输入变量由四个: A 0 , A 1 , B 0 , B 1 A_0 ,A_1 ,B_0 ,B_1 A0,A1,B0,B1;输出变量有四个: X 0 , X 1 , X 2 , X 3 X_0 ,X_1 ,X_2 ,X_3 X0,X1,X2,X3。由于该电路没有逻辑传输过程中没有反馈回路,所以它本质上应该是一个组合逻辑。
(1)逻辑表达式
可以根据逻辑中区间以及信号连接的关系,注意写出输出变量 X n , n = 0 , 1 , 2 , 3 X_n ,\,\,n = 0,1,2,3 Xn,n=0,1,2,3 输入变量 A 0 , 1 , B 0 , 1 A_{0,1} ,B_{0,1} A0,1,B0,1之间的逻辑关系。
(2)化简逻辑
可以将上述表达式化简成标准 最小项表达式 之和的形式:
首先, X 0 , X 3 X_0 ,X_3 X0,X3的最小项表达式比较容易获得:
X 1 , X 2 X_1 ,X_2 X1,X2的最小项表达式比起现在的形式更加的复杂,这里也就不再将其列些出来了。因此,通过化简逻辑好像还无法解释这个电路的基本功能。
2.真值表
可以通过Python程序给出输入输出之间的真值表:
(1)真值表
b1,b0,a1,a0 --> x3,x2,x1,x0
---------------------------
0 0 , 0 0 --> 0 0 0 0
1 0 , 0 0 --> 0 0 0 0
0 1 , 0 0 --> 0 0 0 0
1 1 , 0 0 --> 0 0 0 0
0 0 , 1 0 --> 0 0 0 0
1 0 , 1 0 --> 0 1 0 0
0 1 , 1 0 --> 0 0 1 0
1 1 , 1 0 --> 0 1 1 0
0 0 , 0 1 --> 0 0 0 0
1 0 , 0 1 --> 0 0 1 0
0 1 , 0 1 --> 0 0 0 1
1 1 , 0 1 --> 0 0 1 1
0 0 , 1 1 --> 0 0 0 0
1 0 , 1 1 --> 0 1 1 0
0 1 , 1 1 --> 0 0 1 1
1 1 , 1 1 --> 1 0 0 1
(2)求解程序
printf('b1,b0,a1,a0 --> x3,x2,x1,x0\n---------------------')
for i in range(16):
b1,b0,a1,a0 = [int(s) for s in format(i, '04b')]
x0 = b0 & a0
x1 = (a1&b0)^(a0&b1)
x2 = (a1&b1)^((a0&b1)&(a1&b0))
x3 = (a0&b1)&(a1&b0)
printff(' ', b1,b0,',',a1,a0, '-->', x3, x2, x1, x0)
02 逻辑图背后的故事
那么问题来了,到现在为止我们是否可以说,知道了这个电路的功能了吗? 这张逻辑图背后的故事究竟是什么呢?
■ 相关文献链接:
- 最小项表达式
- 本博文对应的TSINGHUAZHUOQING公众号推文链接
#!/usr/local/bin/python
# -*- coding: gbk -*-
#============================================================
# TEST1.PY -- by Dr. ZhuoQing 2021-05-03
#
# Note:
#============================================================
from head import *
#------------------------------------------------------------
def ab2x(b1,b0,a1,a0):
x0 = b0 & a0
x1 = (a1&b0)^(a0&b1)
x2 = (a1&b1)^((a0&b1)&(a1&b0))
x3 = (a0&b1)&(a1&b0)
return x0,x1,x2,x3
#------------------------------------------------------------
printf('b1,b0,a1,a0 --> x3,x2,x1,x0\n---------------------')
for i in range(16):
ab = [int(s) for s in format(i, '04b')]
x0,x1,x2,x3 = ab2x(ab[3],ab[2],ab[1],ab[0])
printff(ab[3], ab[2], ',', ab[1], ab[0], '-->', x3, x2, x1, x0)
#------------------------------------------------------------
# END OF FILE : TEST1.PY
#============================================================