コンピュータ・アーキテクチャ [補足資料]
[論理回路]の復習 −簡単な電卓を設計するには−
井澤 裕司
1. はじめに
-
CPU(中央処理装置)の動作を理解し、オリジナルのCPUを設計するためには、
-
基本的な論理回路から、コンピュータ・アーキテクチャまで幅広い知識が必要です。
-
-
ここでは、その手始めとして「最も単純な電卓」を設計し、その動作について理解を深めます。
-
これらの学習は、1年や2年で学んだ「論理回路」や「コンピュータ工学」の復習にもなります。
-
-
さらに、「電卓」と「コンピュータ」の類似点・相違点について、整理してみましょう。
-
CPUの基本的な原理や構造が、やがて見えてくることと思います。
2. 簡単な電卓を作ってみよう
-
2.1 電卓の機能
-
-
コンピュータを用いて、1桁の10進数の和を計算する機能について学習するため、
-
電卓で検討してみましょう。
-
-
電卓の入力装置は、数字やプラス(+)、イコール(=)等の記号を入力するテンキーです。
-
-
10進数のキーボードやテンキーを押すと、それぞれのキーに対応する電気信号が
-
発生します。
-
-
この電気信号を、10進数のキーに相当する2進数に変換します。これをエンコーダ
-
(符号器)といいます。1桁の10進数は4ビットの2進数で表すことができます。
-
-
例えば、テンキーの”7”を押すと”0111”という2進数が生成され、この2進数をレジスタ
-
に記憶します。
-
-
次に、テンキーの”+”(プラス)押すと、上の”0111”という2進数が加算器の一方の
-
入力レジスタにセットされます。
-
-
次に、テンキーの”3”を押すと、”0011”という2進数が生成され、この2進数をレジスタ
-
に記憶します。
-
-
テンキーの”=”(イコール)を押すと、2進数の”0011”が加算器のもう一方の入力レジ
-
スタにセットされます。
-
-
加算器の出力は5ビットの2進数”01010”になります。この演算結果を10進数に変換
-
します。この変換を行うのがデコーダ(復号器)です。
-
デコーダの結果を人間の目に見える形で表示するのがディスプレイです。電卓の場合、
-
液晶表示装置になります。
以上の電卓の機能を、最も簡単な回路で実現してみましょう。
キーになるのは、エンコーダ、加算器、デコーダです。
2.2 エンコーダの構成
-
ここではエンコーダを設計します。このエンコーダは、0から9までのキーのいずれか1つを押すと、
-
これに相当する4ビットの2進数を出力する回路です。
-
-
下に設計したエンコーダの回路を示します。テンキーを押すと、出力が変化しますので、いろいろ
-
試してみて下さい。
-
-
-
このエンコーダは簡単な組み合わせ回路です。10進数の”10”、”11”、”12”、”13”、”14”、”15”が
-
使用されていないことを利用して、論理を簡略化しています。具体的な簡略化手法に「カルノー図」が
-
あります。この手法の具体的な内容については、
「論理回路」の第5章
を復習して下さい。
-
-
なお、この回路は1桁の入力を想定しています。実際には、10桁以上の入力を想定しなければなりま
-
せん。この場合は、2進化10進符号を、2進数に変換する回路が必要になります。
-
2.3 加算器の構成
-
-
ここでは、正の4ビットの加算器を設計します。
-
この具体的な回路構成を以下に示します。
-
なお、FAは全加算器、HAは半加算器です。これらの具体的な回路については、
「論理回路」の第9章
を
-
参照して下さい。
-
-
入力の値をクリックすると、0と1の値を変えることができます。
-
いろいろ操作して、正しい結果が得られるか確認して下さい。
-
-
-
-
-
加算器の桁数を増やすには、全加算器をMSB側に増設します。
-
また、減算の機能を追加するためには、マイナスの数を
補数表現
する必要があります。
-
1の補数を用いた例を、
「論理回路」第9章
の最後に紹介してありますので、参考にして下さい。
-
2.4 デコーダの構成
-
-
次に、加算器出力の2進数を10進数に変換して、液晶等の
7セグメント表示装置
で表示するデコーダ回路に
-
ついて検討してみましょう。
-
-
一般の電卓では、2進数の計算結果を10進数に変換し、各桁ごとに数字の形状を7つのセグメントで表して
-
表示します。すなわち、10進数への変換と、表示用の変換操作が必要になるわけです。
-
-
1桁の10進数の加算の場合、表示すべき10進数は多くても2桁です。
-
ここでは、回路の簡単化を図るため、5ビットの2進数を直接2つの7セグメント表示装置で表示することを考え
-
てみましょう。なお、表示すべき10進数が1桁のときは、上位の桁には何も表示しないようにします。
-
-
通常の組み合せ回路の設計手法にならい、真理値表を作成して、論理式を簡略化し、MIL記号で回路図を
-
作成します。ここで、「加算器の出力が、10進数で18を越えることはない」ということを用いて、論理を簡略化
-
します。
-
-
このようにして得られた回路図を下に示します。なお、途中の過程については、各自トレースして下さい。
-
-
-
-
-
2.5 電卓の構成
-
-
これまで説明したエンコーダと加算器、デコーダに、
DFF
を用いた
レジスタ
、2組の信号の一方を選択して出力
-
するマルチプレクサ(
セレクタ
)、そしてこれらを制御する制御回路を追加すると、下の電卓が完成します。
-
-
なお、エンコーダには、いずれかのキーが押された状態を識別するため、10個の入力の論理和をとる機能を
-
追加してあります。
-
また、デコーダには入力ミス等のエラーが生じた場合、誤りを示す”E”という文字を表示する機能を加えました。
-
これは、内部に2組の入力(8入力)を切り替えるマルチプレクサ(セレクタ)を組み込むことにより実現します。
-
-
制御回路は、各キー入力に基づいて、状態遷移の図を描き、遷移表からDFF等で構成します。
-
クリアキー”C”で、これらのFFをリセットすると、初期状態に戻ります。
-
3. CPUによる加算
- これまで電卓の構成について、整理してきましたが、次はCPUを用いて、簡単な数値の和を計算する場合に
- ついて考えてみましょう。
-
- 下の図は、アセンブラ言語を用いて整数の4と3の和を計算し、その結果をI/Oポートの50番地に出力するプロ
- グラムを表しています。CPUの種類には、最も簡単なx86系を想定しています。
- I/Oポートの50は、2進数を10進数に変換して、コンソールに出力するポートの番号と考えて下さい。
-
- ここで使用するCPUのレジスタは、ax、bx の2種類と、プログラムカウンタ
(pc)です。
- はじめに、プログラムカウンタが 0 にリセットされ、0番地の命令[mov ax, 4] から実行を開始します。
- 以下、各行の内容について簡単に説明します。
-
- ・0番地 [mov
ax, 4] ; axレジスタに値4を代入する。
- ・1番地 [mov
bx, 3] ; bxレジスタに値3を代入する。
- ・2番地 [add
ax,bx] ; axレジスタとbxレジスタの和を計算し、結果を
axレジスタに代入する。
- ・3番地 [mov
dx, 50]; dxレジスタに50を代入する。
- ・4番地 [out
dx, ax]; dxレジスタで表されるアドレス(50)に、axレジスタの内容を出力する。
- ・5番地 [stop]
; プログラムカウンタを止める。
-
実際のCPUでは、
[mov]
や
[add]
のような記号(文字列)が使用されているわけではなく、これらに対応する
-
0と1で構成されるビット列
(これを
「マシン語」
、
「機械語」
と言います)
をメモリから読み込んでいます。
-
-
ALU(Arithmetic and Logic Unit)は算術演算ユニットであり、加算だけでなく減算や、論理和・論理積等の
-
ビット演算、シフト命令等の演算を行うことができます。
-
乗算、除算については、かつてはビットシフトと加減算で実行したり、高速化のためコプロセッサという外部
-
プロセッサで実行していましたが、最近のCPUには、この乗除算をハードウェアで実現する機能が含まれて
-
います。
-
-
またこの例では、加算する数値は固定されていますが、実際にはキーボードから入力した内容を読み取る
-
ため、
-
-
・[mov dx,60]
-
・[ in ax, dx]
-
-
のような命令が必要です。
-
また、7セグメントの表示装置を直接制御する場合には、デコードの機能をソフトウェアで実現しなければなり
-
ません。
-
-
これらの処理をハードウェアで行うのか、ソフトウェアで処理するのかは、CPUの性能やシステムに要求され
-
るアプリケーションによって変わります。
-
一般に、それらの仕様が変更される可能性がある場合はソフトウェア、変更の余地がなく、CPUの負荷を軽
-
くしたい場合はハードウェア化します。
4. まとめ
-
ここでは、「最も単純な電卓」を論理回路で構成する手法について、整理しました。
-
また、比較のため、簡単なCPUを用いて2つの10進数の和を計算する例を示しました。
-
-
この両者を比較・検討することにより、CPUと論理回路の間が若干でも埋まることを期待しています。
-
-
もともと、CPU(正確にはMPU:マイクロプロセッサ)は、電卓の開発を効率化するために、考え出され
-
たものです。このアイデアが実現されるにあたり、日本人の嶋正利氏が活躍されたことは有名な事実
-
です。MPU開発のエピソードについて、インターネット等を用いて調べてみられてはいかがでしょうか?
-