Superb Garbages 2

千野純一(chinorin)のはてなダイアリーの続きです。

TフリップフロップをNANDで作る その1?

・T型フリップフロップ(略称T-FF)ってのは、入力がひとつ(T)と出力が2つ(Qとそれを反転した/Q)あって、Tの立ち上がりごとに出力が反転するというフリップフロップ回路(1ビットメモリ)。TはToggleのTね。

・↑回路図記号はこんなの。(これは左下のクロックの立ち上がりでTを見て、HIGHだったらQが反転、LOWだったら何もしないというもの)

・これがさあ。Wikipediaのフリップフロップの項目をはじめ、どこを見てもたいていRS-FF、JK-FF、D-FFは回路図が載ってるのにT-FFだけは「JK型フリップフロップのJとKをHighに固定し、クロックを入力とすれば実現できる」としか書いてなくて、どーも納得いかないわけよ。他のみたいにNANDの組み合わせで作れないの?? とずっと思ってた。

・しかしそれを自力で考え出すなんてこともできず、しかし先日ついにですわ。ぼーっとネットサーフィンしてたらその回路図を見かけましてな。

NANDゲートを使ったT型フリップフロップの回路図?

・こんな感じらしい。はて⋯⋯コンデンサは入力をパルスにするコンデンサの充電中はマイナス側に電流が漏れ*1、満充電状態になると漏れが止まるので、コンデンサを直列に⋯回路図の上では電気の流れを切断するような形で繋げば「一瞬HIGHになってすぐLOWになる」という仕組みを作れる)ために使ってるのはわかるんだけど、この抵抗は何だ。これがあることで逆流しないとかそんなやつ? だとしたらNANDのICの入力抵抗より大きい値にするようなことが必要なのか? よくわかんねーな。


・そんな感じで、いちいち「こことここがHIGHってことはここがLOWで、ええとー⋯」ってやるのがめんどくさいのでまず組んでみた。けどうまく動かにゃい。定数が悪いのかなあ。仕方ないから考えるか、こことここがHIGHってことはここがLOWで、ええとー⋯

・いや、変遷がわからん。ぱっと見発振するように思えるんだけど、試した限りはそんなことなかった。何なの。

・そんでまあ、諦めて再びT-FFに思いを馳せながらぼーっといろんな回路図を見てたら、ちょっとまて、クロックつきのJK-FFはこんな感じなんだってさ。

JK型フリップフロップの回路図?

・これの、JとKをHIGHに固定すればCLKの入力でトグルするということは、左にある2つのNANDは3入力だけど、JとKを取り除いて2入力にすればいいってことだよね? 確かにJKフリップフロップは(J,K)が(1,0)ならQがHIGH、(0,1)ならQがLOW、(0,0)なら何もせず、(1,1)ならQが反転(/Qは常にNOT Q)という動作だから、ほんとにその通りの動きをするはずだが⋯?

・いや、っていうかこれ、初めてこのあたりの文章とかを読んだときに真っ先に試してみたはずだよなあ。それにWikipediaに載ってるJK-FFの回路図はそのまんま組んでも正しくうごかねーぞみたいな文言もどこかで見たような⋯。あ、これWikipediaに載ってるやつと等価なんですけどね。

「こことここがHIGHってことはここがLOWで、ええとー⋯」をやってみても結局ぐるぐる回ってよーわからん。組んでみようじゃないの。


・動かにゃい。

・最後の手段として、ChatGPT先生に聞いてみることにした。

・あーーなるほどね。フリップフロップって必ず出力と反転出力があるから、それをいい感じに帰還させればそれだけでトグルが作れるんだ。何かスイッチの仕組みを噛ませばRSラッチでもいけるんじゃ?

・つまりこういう⋯⋯右の2個のNANDが負論理RSラッチで、どうせNANDゲート使うときは74HC132の4個セットなのでちょうど余るNAND2個を「TのHighをトリガーとして、Qを出力するNANDに/Qを、/Qを出力するNANDにQを入力する(ラッチが負論理なのでこれらは反転する)」というスイッチに見立てて作ってみたが、これさっきのJK-FFの回路図と等価じゃねーか。帰還する経路が外側から内側になってるだけで、ちょうど左の2つのNANDからJとKを取り除いてそれぞれ2入力のものに取り替えた形。接続せずに交差する点が少ないからこっちの方が見やすいと思うんだけどな。


・というわけで、簡単に組めるT-FFが欲しいと前から思ってるんだけど、ずっとこんな調子でさ。コンピュータはNANDで動いてるんだし、やっぱNANDで組みたいじゃんっていうお気持ちである。

・ちなみにNOT2個とコンデンサでT-FF的なものを実現する方法もあることは知っているんだが、よく考えたらNOTってNAND1個で表現できるんだよな⋯。たぶんつづく。

*1:コンデンサは無充電状態のときは電荷の偏りがなく安定。電圧をかけるとコンデンサのプラス極から電子が出て行き電源を通ってマイナス極に入る。それによって電荷が偏るというのが充電という現象で、電子がマイナス極に入る流れ(=マイナス極から発生する電流)をここでは「漏れ」と表現している。無充電状態のときにプラス極にあった自由電子が全てマイナス極に移動すると満充電となり、それ以上電圧をかけても電子は移動しない(=漏れが止まる)。電圧をかけるのをやめると電荷の偏りを解消する方向(=かけた電圧と逆の方向)に電子が移動を始める。これが放電。