この記事はセルオートマトンによるCPU作成連載記事の9本目です。(2022/12/20)
7セグメントディスプレイを作り、2進数を10進数に変換する仕組みも理解したので、任意の2進数をディスプレイに表示したいのですが、まだ必要な回路がありますのでこれから準備していきます。まずはデコーダです。
デコーダとは、2進数の数値を入力信号として、その数値に対応する出力をする回路です。例えばこんな動きをする回路です。
左の回路はカウンタで、0から15を順番に出力しています。右の回路がデコーダです。4ビットの入力信号を左から受け入れ、下方向に16本のいずれかを出力します。
応用です。次の例では入力が3の倍数(0, 3, 6, 9, 12, 15)のときにのみOnを出力し、それ以外はOffとなる回路です。たまにゴミが出てきますが、これは許容することにします。
CPUの中では入力が特定のパターンのときにだけ出力するという回路が多く必要で、このように格子状の回路がたくさんできます。
次は出力が2つあるパターンです。Fizz Buzz問題です。入力が3の倍数と5の倍数のときに出力をします。
これをソフトウェアで実装すると
if (x % 3 == 0) { ...; } else if (x % 5 == 0) { ...; }
のようなコードになり、剰余計算が必要になりますが、ビット数が限られていればこのようにハードウェアで実装されていると処理が速いです。