仅使用NAND和NOT GATES构建电路

时间:2016-10-07 15:58:46

标签: boolean-logic

在图像中,上面的电路是 产品总和
=(B'+ D')(A + D)(A + C)

而图像下面是我尝试仅使用NAND和NOT门。但是,我的感觉告诉我,我做错了。请帮忙!

My Attempt

2 个答案:

答案 0 :(得分:0)

您可以用NAND门替换所有AND门,只是否定结果。我可以看到你否定了输入,这是错误的,因为:

(ab)'  !=  a'b'

作为一个例子,考虑信号(a,b)=(1,0)。如果你否定它们并计算输出,你得到0.如果你先计算然后否定输出,你得到1.

关于OR门:

a + b + c  ->  ((a + b + c)')'  ->  (a'b'c')'

因此OR门是与非门,所有信号都被否定。

答案 1 :(得分:0)

第一个电路实际实现

AD + AC + B'D' http://latex.codecogs.com/gif.download?AD%20+%20AC%20+%20%5Cbar%7BB%7D%5Cbar%7BD%7D

这是这个电路:

AD + AC + B'D'

使用De Morgan's Laws,这相当于

((AD)'(AC)'(B'D')')' http://latex.codecogs.com/gif.download?%5Coverline%7B%5Coverline%7BAD%7D%5Ccdot%5Coverline%7BAC%7D%5Ccdot%5Coverline%7B%5Cbar%7BB%7D%5Cbar%7BD%7D%7D%7D

这是这个电路:

((AD)'(AC)'(B'D')')'

这个Python程序可用于比较电路:

import itertools
# Create all the possible input combinations
x = (True, False)
comb = set(itertools.product(x, x, x, x))
# AD + AC + B'D'
def c1(a, b, c, d):
    return ((a and d) or (a and c) or ((not b) and (not d)))
# ((AD)'(AC)'(B'D')')'
def c2(a, b, c, d):
    return not ((not (a and d)) and (not (a and c)) and (not ((not b) and (not d))))
# For each input combination, verify that the results are the same
for x in comb:
    r1 = c1(*x)
    r2 = c2(*x)
    if r1 != r2:
        print "Error: Input %s produced %s != %s" % (x, r1, r2)