この記事はセルオートマトンによるCPU作成連載記事の5つ目です。(2022/12/09)
今回は、AND回路・OR回路・NOT回路を組み合わせて加算器を作成します。
加算器は2進数の数同士を加算する論理回路です。
1桁の2進数同士の加算をする回路を半加算器といいます。入力は2つです。出力は加算結果と桁上がりフラグの2つです。
1桁の2進数同士の加算は次の4通りあります。
1 + 1 に限って2進数では1桁では足りず、上の桁に繰り上がりをします。
これを論理式で表現すると次のようになります。
「NOT (入力1 AND 入力2)」の部分は「入力1 AND 入力2」の出力を反転するもので、NANDの意味です。
真理値表にすると次の通りです。
入力1 | 入力2 | (入力1 OR 入力2) | NOT (入力1 AND 入力2) | 加算結果 | 桁上がり出力 |
---|---|---|---|---|---|
0 | 0 | 0 | 1 | 0 | 0 |
0 | 1 | 1 | 1 | 1 | 0 |
1 | 0 | 1 | 1 | 1 | 0 |
1 | 1 | 1 | 0 | 0 | 1 |
この論理式をそのまま回路にしたのが下です。ボタンを押して試してみてください。
入力が3つになったものを全加算器といいます。複数桁を計算する際の上位桁では下位からの桁上がりを受け取るために全加算器が必要になります。
全加算器は半加算器を2つ並べることで実現できます。
この例では、1つ目の半加算器の加算結果と桁上がり入力を加算するのが2つ目の半加算器です。2つの半加算器の桁上がり出力のいずれかが1であれば、全加算器自体の桁上がり出力を1とします。つまり2つの桁上がり出力をOR回路で接続したのが、全体の桁上がり出力となります。2つの半加算器が2つとも同時に桁上がり出力をすることはありません。
加算器を3つ並べ、3桁同士の加算をできるようにしました。最下位の桁(この回路上では上に位置している)は半加算器で、上2桁(この回路上では真ん中と下に位置している)は全加算器です。
加算器は桁上がりがありますので、下の桁から順番に計算していくことになります。1桁の加算は単純な計算ですが、64ビットのCPUですと、64桁を順番に計算することになり、時間のかかる処理になってしまいます。そのため実際の半導体を使った加算器では、桁上げ先見回路、桁上げ選択回路など高速化の工夫をします。
しかし、このセルオートマトンの世界ではそのような工夫はほとんど無駄です。このセルオートマトンの世界では、ANDやORなどの素子を通過する時間がゼロだからです。本当はゼロではなく信号が伝達するのに時間がかかりますが、これは素子ではないただの伝達線でも同じだけの時間がかかるため、素子による遅延がゼロという意味です。このセルオートマトンの世界での信号が伝わる速度は、現実世界でいう光の速度に相当します。すべての素子を光の速度で通過して演算できてしまうため、このセルオートマトンでのCPUを高速化をするには、回り道をしている伝達線を直線にしたり、回路を小さくするほかありません。
これまでの加算回路も隙間が大きく広い面積が必要でしたので、隙間を詰めて省スペースにしました。次の例は省スペースの加算器で4桁同士の加算をします。
右にあるのが全加算器1つ分です。積み重ねてもコンパクトにまとまるように、横長の形状です。しかも上下に並べたときに形がぴったり合います。
最後の例は、横長ではなく正方形に近い形状の全加算器です。
後日CPUの設計でわかってくることですが、8ビット加算回路は全加算器を縦に積み重ねるので縦幅を圧縮したいのに対して、8ビット乗算回路では正方形に近い全加算器を必要とします。