組み合わせ回路と順序回路
これまで論理ゲートで扱ってきた回路は入力が決まると出力は一意に決まりました。 一方フリップフロップ回路は入力が同じでも、出力が同じとは限りません。入力パターンの順序によって出力が変わるのです。 前者のように入力によって出力が決定される回路を組み合わせ回路、 後者のように入力の順番によって出力が変化する回路を順序回路といいます。
結局のところコンピューター(CPU)は、組み合わせ回路と順序回路が交互に並んでいて、1クロックごとに、組み合わせ回路で信号が変換(=計算)され、 その変換結果が順序回路に保持される。次のクロックが来ると次の組み合わせ回路を通って順序回路で結果が保持される。という繰り返しで動く単純な仕組みと言っていいでしょう。
これで私はほぼCPUについて説明しきった気持ちになっております。
図1-18の下の回路は図1-16の最後にある、NANDゲート4個で作ったXORゲートです。 その上の回路はXOR回路の途中4か所にDフリップフロップを入れ込んだ回路です。 3つの入力がありますが、一番下がクロックです。 クロックをオン・オフすると全Dフリップフロップのクロック入力端子に一斉に信号が届くように配線されています。 次に一番上の入力をL→Hにして、クロックをオン・オフすると、1クロックごと順番に信号が伝わり、4クロック目で出力がL→Hに変化することが分かると思います。 下のXORは入力を変えると一瞬で結果が出力に反映されますが、上の回路は結果を確認するまでに4クロック必要になります! しかし、例えば1クロックごとに入力を変化させるプログラムを組む仕組みを作れば、4クロック後から次々にXORの出力結果を得ることができることになります。
プログラミングっぽいことができました。 (ちょっと乱暴かもしれませんが)CPUっぽいことがでたと言ってよいでしょう!
図1-18
およそこれでCPUがどうなっているのか、私の思っている基本的なことは説明しました。 CPUを知るためには他にも、レジスタをはじめ、カウンタ、マルチプレクサ、命令デコーダなど 必要な概念がいくつも残っていると思います。しかし、レジスタやカウンタだったらDフリップフロップの応用な気がするし、マルチプレクサや命令デコーダは論理ゲート(組み合わせ回路)の応用と考えることができる気がします。これらについても時間のあるときに解説していきたいと思っています。
ご参考までに、CPUの解説本としてウェブ検索すると「CPUの創りかた」という本がよくヒットします。 私も購入して拝読し、とても良い本でしたのでオススメです。 これを読むともっとCPU分かったという気持ちになれると思います。