すべてがNANDになる
これじゃ、ULX3SもTinyFPGA BXもつんどくしかない..
Verilog HDLとか無理ぽ..
なんてことにならないように、ちょっと道案内できればな、と筆を持つ次第。
『すべてがNANDになる - The Perfect Insider』
The Nand Gameも、MHRDも、Digital Logic Design (The Game)も、すべてNANDからはじまります。The Nand Gameなんて、そのまま、ザNANDゲームですしね。
なんでNAND? (韻を踏んでいる)
そもそもNANDて?
NANDとは
NANDとは、NOT ANDなだけ。
Pythonなら
out = not (A and B)
だし、Javascriptなら
out = !(A && B)
なだけ。
なぜ、あの3つのゲーム The Nand Game、MHRD、Digital Logic Design (The Game) が、NANDからはじまるかというと、すべての論理回路はNANDから作り出せる、から。「NANDからテトリスへ」って聞いたことありません? NANDがあれば、テトリスを作れる、と。
そして、物理世界の論理回路では、NANDを使うのが効率がいいから (小さくて、速い)。
以上、2つの理由により、NAND。すべてがNANDになる。
そしてFPGAも.. というと、実はあんまり直接関係ない。でも、楽しいので続ける。
確認
Pythonで確認。
def nand(a, b):
return not (a and b)
print(nand(False, False)) # True
print(nand(True, False)) # True
print(nand(False, True)) # True
print(nand(True, True)) # False
表にすると (NAND Truth Table)
記号で描くと
第一歩 NOT
あの3つのゲーム、第一歩はNOTを作るところから。
すべての論理回路はNANDから作り出せるということは、NOTもNANDで作れると。ゲームによってはInvertと言ってますが。
念のため、PythonでNOTの確認。
print(not True) # False
print(not False) # True
NOTをNANDで作る。
NANDの表から、NOTに必要なところを見ると、いうまでもなく以下の囲ったところ2箇所。AとBが同じ値のときがNOTとまったく同じ。
つまり、NANDの入力2つに、同じものをつなげたものに入れ替えられる。
NANDによるNOTの完成である。
NANDでAND (韻)
PythonでAND。
print(False and False) # False
print(True and False) # False
print(False and True) # False
print(True and True) # True
ANDの記号と表。
ところで、NOT二回つなげたらどうなりましたっけ。みんな大好きでないわけがない二重否定。
print(not not (False and False)) # False
print(not not (True and False)) # False
print(not not (False and True)) # False
print(not not (True and True)) # True
変化なし。NOT二回ないのとまったく同じ。
print(False and False) # False
print(True and False) # False
print(False and True) # False
print(True and True) # True
記号で描くと
これは、ANDとまったく同じ。
そういえば、この囲ったところ、見覚えがありません?
NOT ANDですよね。つまりNAND。
NOTもNANDで描けます。これがANDの最終形態。
Pythonで答え合わせ。
def nand(a, b):
return not (a and b)
print(not nand(False, False)) # False
print(not nand(True, False)) # False
print(not nand(False, True)) # False
print(not nand(True, True)) # True
あってる!
すべてがNANDになる
NOTもANDもNANDになりました。すべてがNANDになります。
Discussion