pp.408-413
7.2 シンプルなプロセッサー
図7.2に示したのと同じようなディジタルシステムをもう一例、図7.9に示します。4つのnビットレジスタ(R0
~R3
)がトライステートドライバーを介してバスに接続されています。各レジスタへは、nビットのData
入力から外部データがロードできます。このData
入力は、Extern
制御信号で有効、無効の切り換わるトライステートドライバーを介してバスに接続されています。また加算/減算モジュールも備わっています。加算/減算モジュールのデータ入力の一方へは、バスに接続されたnビットレジスタA
からデータが与えられます。もう一方のデータ入力B
はバスに直接接続されています。AddSub
信号が0の場合は和(A+B)が生成されます。AddSub
信号が1の場合は差(A-B)が生成されます。セクション3.3で解説したとおり、引き算を実行する手段として加算/減算モジュールにはXORゲートが必要です。このXORゲートでB
の2の補数を生成します。レジスタG
には、加算/減算モジュールの出力が格納されます。レジスタA
およびレジスタG
は、Ain
、Gin
、Gout
の各信号で制御します。
図7.9のシステムは、制御回路の設計次第でさまざまな機能が実行できます。ここでは例として、表7.1に示す4つの操作が実行できる制御回路を設計します。表の左列には、操作名と各オペランドとを示します。右列には、それぞれの操作で実行される機能を示します。Load
操作のところに示したRx ← Data
の意味は、外部Data
入力のデータがバスを介して任意のレジスタRx
(Rx
はR0
~R3
のいずれか)へ転送されるという意味です。Move
操作を実行すると、レジスタRy
に格納されているデータがレジスタRx
にコピーされます。表に示した角括弧([Rx]
など)はレジスタの中身であることを表しています。Load
操作もMove
操作も、バスを介した転送は1回限りであるため、その操作は1ステップ(1クロックサイクル)だけで完了します。Add
操作およびSub
操作はどちらも3ステップが必要です。第1ステップでは、Rx
の中身がバスを介してレジスタA
に転送されます。次のステップでは、Ry
の中身がバスに乗ります。加算/減算モジュールによって、要求された処理が実行され、その結果がレジスタG
に格納されます。最後、第3ステップでG
の中身がRx
へ転送されます。
表7.1に示したような操作を実行するディジタルシステムは一般に「プロセッサー」と呼ばれます。どの処理をいつ実行するのかは、制御回路への入力Function
によって指示されます。w
入力を1にすると目的の操作が開始され、その操作が完了すると制御回路によってDone
出力がアサートされます。
図7.9の制御回路はFSMを使って実現できます。しかし別の手段でも実現できることを示すため、カウンターを用いて制御回路を設計します。この回路は、各操作のステップごとに必要な制御信号を生成する必要があります。一番長い操作(Add
、Sub
)には3ステップ(3クロックサイクル)が必要であるため、2ビットカウンターで用が足ります。図7.10に、2-4デコーダーに接続した2ビットアップカウンターを示します。デコーダーについては第4章で解説しました。このデコーダーは、イネーブル(En
)入力を常時1に設定して常時有効化しておきます。デコーダー出力のそれぞれが、各操作の1ステップに相当します。何の操作も実行されていないときはカウント値は00であり、したがってこのときはデコーダーのT0
出力がアサートされます。各操作の第1ステップのときはカウント値が01であり、このときはT1
がアサートされます。Add
操作およびSub
操作の場合は、第2ステップ、第3ステップのときにT2
、T3
がそれぞれアサートされます。
T0
~T3
の各ステップでは、実行する操作に応じてさまざまな制御信号を生成しなければなりません。それぞれの操作は、図7.11を見ると分かるように、Function
入力を構成する6ビットで指定されます。左端の2ビットF = f1f0
は、目的の操作を指定する2ビット値として用います。ここでは、Load
、Move
、Add
、Sub
のそれぞれを表すのに、f1f0
=00、01、10、11というコードをそれぞれ使います。入力Rx1Rx0
はRx
オペランドを示す2進数であり、Ry1Ry0
はRy
オペランドを示します。Function
入力は、FRin
信号がアサートされたときに6ビットのFunction
レジスタに格納されます。
図7.11には、F
、Rx
、Ry
の各入力にエンコードされた情報をデコードするのに使われる2-4デコーダーも示しました。少しあとに説明しますが、このデコーダーは便宜上示したにすぎません。各デコーダーの出力は、さまざまな制御信号を入力とする単純な論理式で表現できるからです。
図7.10および図7.11の各回路は制御回路の一部です。入力w
、およびT0
~T3
、I0
~I3
、X0
~X3
、Y0
~Y3
の各信号を使って、どうやって制御回路の残りの部分を作り出すのかを示します。Extern
、Done
、Ain
、Gin
、Gout
、AddSub
、R0in
~R3in
、R0out
~R3out
の各出力を生成しなければなりません。さらに、図7.10および図7.11で使用しているClear
およびFRin
の各信号も制御回路で生成する必要があります。
Clear
およびFRin
の各信号はどの操作でも共通です。Clear
信号は、w
=0で何の操作も実行されていないときにカウント値を00のままにしておく手段として使われます。また各操作の終了したときにカウント値をクリアして00にする手段としても使われます。したがってそのための論理式は下のとおりです。
Clear
= !w
・T0
+ Done
FRin
信号は、w
が1に変化したときにFunction
入力の値をFunctionレジスタにロードする手段として使われます。したがってその論理式は下のとおりです。
FRin
= w
・T0
この2つ以外の制御回路出力は、それぞれの操作で実行される個々の手順によって違ってきます。信号ごとに生成しなければならない値を表7.2に示します。この表の各行は具体的な操作です。各列が1ステップに相当します。Extern
信号がアサートされるのは、Load
操作の第1ステップのときだけです。したがってExtern
信号を実現するための論理式は下のとおりです。
Extern
= I0
・T1
Done
信号はLoad
、Move
の第1ステップでアサートされるほか、Add
、Sub
の第3ステップでもアサートされます。したがってその論理式は下のとおりです。
Done
= (I0
+I1
)・T1
+(I2
+I3
)・T3
Ain
、Gin
、Gout
の各信号はAdd
操作およびSub
操作のときにアサートされます。Ain
はステップT1
のときに、Gin
はステップT2
のときに、Gout
はステップT3
のときに、それぞれアサートされます。AddSub
信号は、Add
操作のときは0に、Sub
操作のときは1にセットしなければなりません。従ってAin
、Gin
、Gout
、AddSub
の各信号は下の論理式で表現されます。
Ain
= (I2
+I3
)・T1
Gin
= (I2
+I3
)・T2
Gout
= (I2
+I3
)・T3
AddSub
= I3
R0in
~R3in
の各値は、X0
~X3
の各信号かY0
~Y3
の各信号かいずれかによって決定されます。この処理は、表7.2ではRin = X
またはRin = Y
と記述しています。Rin = X
の意味はR0in = X0
、R1in = X1
...ということです。同じくR0out
~R3out
の各値はRout = X
またはRout = Y
という形で示しています。
まずR0in
およびR0out
の各論理式を表7.2から導き出してから、それ以外のレジスタ制御信号を表現する論理式を導き出しましょう。表7.2を見ると、Load
、Move
の各操作の第1ステップのとき、およびAdd
、Sub
の各操作の第3ステップのときに、R0in
がX0
の値にセットされることが分かります。このことから下の論理式が導かれます。
R0in
= (I0
+I1
)・T1
・X0
+(I2
+I3
)・T3
・X0
同様にR0out
は、Move
操作の第1ステップのときにY0
の値にセットされるほか、Add
およびSub
の第1ステップのときにはX0
に、Add
およびSub
の第2ステップのときにはY0
にセットされます。このことから下の論理式が導かれます。
R0out
= I1・
T1・
Y0+(
I2+
I3)・(
T1・
X0+
T2・
Y0`)
R1in
およびR1out
を表す論理式は、X0
およびY0
のところにX1
およびY1
が入ることを除けばR0in
およびR0out
の論理式と同じです。R2in
およびR2out
、R3in
およびR3out
の論理式も同じように導けます。
図7.10および図7.11に示した回路と、これまでに示した論理式で表現される回路とを組み合わせると、図7.9の制御回路が実現されます。
プロセッサーは、広く使われている大変便利な回路です。ここでは、プロセッサー設計の最も基本的な事柄のみ示します。しかしここに示した方法は、最新のマイクロプロセッサーなど実際のプロセッサーの設計にも応用できます。興味があれば、プロセッサー設計についてもっと詳しく書かれた、コンピューターの作り方に関する書籍を読んでください。