t-hom’s diary

主にVBAネタを扱っているブログ…とも言えなくなってきたこの頃。

トランジスタでXOR回路(NAND 4回路の合成タイプ)を作る

今回はトランジスタを使ってXOR回路を作ることに成功したのでご紹介。

前提の説明:そもそもXORとは

XORは、2つの命題(Yes/Noで回答できる問題)があったとき、片方がYes、もう片方がNoの場合のみ成立する論理演算である。
そう書くと難しそうだけど、日常生活でも割とよく登場する。

たとえば機内食で、チキンとビーフどっちか選べというシチュエーション。

命題1:チキンを選ぶ 命題2:ビーフを選ぶ 成立するか?
Yes Yes No
Yes No Yes
No Yes Yes
No No No

※あくまでイメージしやすくするための例であって、実生活ではNo/No = Yes(腹減ってないので断る)はあり得るし、ひょっとしたらYes/Yes = Yes(余ってるから差し上げます)もあり得るかもしれないけど、無視してほしい。

プログラミングではYesをTrue(真)・NoをFalse(偽)という値で扱うが、電子回路では電圧の高低よって判定され、YesをHIGH・NoをLOWとして扱うことが多い(逆の場合もある)。

作成の動機:基本情報技術者試験のMIL記号がモヤるので

基本情報技術者の試験では、MIL記号というものが登場する。
今回作るXORは次のMIL記号で表される。
f:id:t-hom:20211013080504p:plain

受験当時、問題は解けるものの何故3本線で回路になるのか意味が分からずモヤっとしていた。

電気が流れるにはプラス極とマイナス極が必要で、当時の私は次のような電気の流れを考えていた。
f:id:t-hom:20211013081839p:plain
注)これは間違い

この理解だとAに電流を流すには、ルート1かルート3しかない訳だけど、ルート1を選択した時点でCにもう電流流れてしまうので、AがTrueならCも必然的にTrueとなってしまう。ルート3を選択するとBに向かって電流が流れるのでBをTrueにすることはできなくなる。

実際電気回路を組んでみて分かるのは、MIL記号には電源のプラスとマイナスが省略されているということ。
本当の電気の流れは次のようになっている。
f:id:t-hom:20211013083219p:plain

電源は必ず必要だ。要るのが当たり前だから、わざわざ書かれない。論理回路を考える際には、電源のことは思考の外に追いやってしまったほうがシンプルに考えられるからである。この大前提を知らなかったので当時MIL記号が苦手だった。

私は疑問が出てくるとなかなか前に進めなくなる質で、試験は試験だと割りきって無意味な暗記に徹することが難しい。
この記事で同じ様なタイプの人間が少しでも救われると幸いである。

トランジスタでXOR回路を設計する

トランジスタとは

さて、ではこのMIL記号の中身はトランジスタという部品で作成することができる。
一般的なトランジスタは3本足の部品で、それぞれの足をエミッタ・コレクタ・ベースと呼び、ベースからエミッタへ弱い電流を流すとコレクタからエミッタへ大きな電流が流れるという部品だ。
f:id:t-hom:20211013085823p:plain

トランジスタのこの特性を「増幅」と呼ぶがこれも私が昔よくわかっていなかった概念である。
イメージとしてはコレクタ・エミッタ間の通路を広げてることで通れる電流を増やしているだけ。
増幅というとパワーアップしているようなイメージを持ってしまうが、もともとの電源が200mAしか持ってなかったら、それ以上に増えることはない。どちらかといえばベース・エミッタ間の電流によって、コレクタ・エミッタ間の電流を流量コントロールしているといったほうが誤解がないと思う。

トランジスタそのものの仕組みは良い動画があるのでご紹介。
youtu.be

XOR回路の構成

WikipediaによるとXOR回路は複数の作り方があり、例えばNAND回路4つを組み合わせて作ることができるようだ。
実際にNAND4つの組み合わせでXORと等価になるのかVBAでもやってみた。
f:id:t-hom:20211013092407p:plain
上記コードの、AとBのTrue/Falseを変えながら全組み合わせ試したところNANDで作成したQはA Xor Bと同じ結果になった。

NAND回路の回路図

NAND回路は次のような構成となる。
f:id:t-hom:20211013093419g:plain

電気は流れやすい方に沢山流れるので、スイッチを2つともONにするとトランジスタが2つとも開放されて、電流はほとんどそちらを通る。よってLEDにはほとんど電気が流れず消灯する。スイッチが片方でもOFFだと一方のトランジスタで電気がせき止められるので、電流はLED側に流れ込み、LEDが点灯する。これがNAND回路。

トランジスタのベースに繋がる1KΩはベースに電流を流しすぎて壊れないようにするベース保護抵抗なので、ロジックそのものに関係は無い。
上部の5Vの直後にある100Ωの抵抗はコレクタ抵抗と呼ばれ、電流の入場制限のようなものである。こちらはトランジスタのベース保護抵抗の1/10くらいが良いらしい。
いくらトランジスタのコレクタ・エミッタが開放されているとは言ってもこの入場制限がないと、大量に電流が流れこみすぎてトランジスタで渋滞し、溢れた電流がLED側へ流れてしまう。入ってきた電流がトランジスタで詰まらないように先手を打って入口で電流の勢いを殺すのがコレクタ抵抗である。

LEDの直前にある120ΩはLEDが壊れないようにする保護用である。
赤色LEDはだいたい0.02A~0.03Aで動作する。それ以上は壊れる。
オームの法則から、5V÷0.02A = 250Ω、5V÷0.03A ≒ 166.6Ωとなる。つまり250未満、166.6以上の抵抗を選択すれば正常にLEDを光らせることができる。
手持ちの抵抗でいつも220Ωを使うので、今回はそこからコレクタ抵抗を引いて120Ωとした。

回路設計に使ったのはWebベースの回路シミュレーター。
www.falstad.com
電流の流れが視覚的に把握できるのでかなり気に入っている。

XOR回路の回路図

先ほどのNANDを4つ組み合わせることでXOR回路を作ることができる。
f:id:t-hom:20211013094354g:plain

最初の頃、電源とGNDがそれぞれ切れた回路図も意味が分かってなかったので、一応、中学理科で習うような繋がった回路図も掲載しておく。
f:id:t-hom:20211013095419p:plain
※線の交差するところが分かりにくくなったのでオレンジの被膜を被せて接続ではなくて交差していることを示しておく。
今のところ私は、5Vは全部繋げてしまって良いしGNDも全部繋げてOKという雑な理解である。複雑な回路になると線の交差が増えてしまって逆に理解しにくくなってしまうので、今では先に紹介した5VとGNDが分離しているタイプの方が便利だと感じている。

ちなみにXOR回路の方ではベース保護抵抗とコレクタ抵抗のみで、LEDの保護抵抗は入れなかった。

理由は最近買った定電流LEDを使う為である。こちらは5Vから20Vまでの電源に直接ぶっさすだけで使えるという代物。
1個60円もするので普通のLEDを詰め合わせで買った場合に比べると10倍くらいの価格差となるが、部品を減らせるので検証用途ではとても楽だ。
f:id:t-hom:20211013101641p:plain

むしろコレクタ抵抗100Ωによって電圧が5Vを下回るので若干光量が落ちてしまうと思うが、気にしないことにする。

XOR回路のレイアウト

回路図をベースにブレッドボードに落とし込んでいく。これはちょっとしたパズルだ。
いきなりは難しいのでfritzing(フリッツィング)というツールでレイアウトを作る。
f:id:t-hom:20211013095857p:plain

NANDの入力1が青、入力2が緑、内部配線がオレンジ、出力が黄色、5Vが赤、GNDが黒という風に色分けした。
MIL記号と回路図の対応でイメージするとこんな感じ。
f:id:t-hom:20211013103725p:plain

XOR回路を実際にブレッドボード上で配線

若干、線の引き回しを変更したけど、概ね同じように配置できた。
f:id:t-hom:20211013103928p:plain

そしてちゃんと動いた。写真だとLED光ってないけど、押しボタンスイッチは2つともOFFなので、光ってなくて正しい。
動画で証明したかったけど、わざわざYouTubeに上げるほど大層なものではないし回路図シミュレーターで動作アニメーション作ったのであれで証明としておこう。

今後やりたいこと

XORとANDを組み合わせることで半加算器を作ることができる。半加算器を2つ組み合わせると1ビットの全加算器となり、この全加算器をN個用意すればNビット加算器となる。これは計算機つまりコンピューターの基本的な仕組みの部分となる。

今後の展望としては4ビット加算器を作ってみたいが、さすがにトランジスタで作るのはしんどいので、ロジックゲートICを買ってみようと思う。


例えば東芝のTC74HC00APはNAND回路が4つ入ったICである。
f:id:t-hom:20211013105242p:plain

他にもAND・OR・NOT・XORなどいろんなロジックがICとして販売されている。

なかにはトランジスタだけでCPUを作り上げてしまう猛者もいるようだけど、構造を理解したらあとはただの面倒くさい作業になってしまうので、毎回作るのではなく、より使いやすいパッケージに置き換えていく方が自分の好みに合っている。

こういう置き換えを活用しながら、いつかCPUそのものを作りながらその挙動を理解したい。
CPUの作り方自体は書籍が出てるので部品さえそろえてそのとおり配置すればできるはず。ただ意味を理解せずに部品を配置していく作業にはそれほど魅力を感じないので、今回トランジスタ回路から初めてみた次第。

以上

当ブログは、amazon.co.jpを宣伝しリンクすることによってサイトが紹介料を獲得できる手段を提供することを目的に設定されたアフィリエイト宣伝プログラムである、 Amazonアソシエイト・プログラムの参加者です。