演算器構成例


定義した ALU は大きく分けて算術演算(加算、減算、インクリメント、デクリ メント)、論理演算(論理和、論理積、排他的論理和、論理否定)、および、シ フト演算(算術右、算術左、論理右、論理左、右回転、左回転、バイトスワッ プ)に分かれています。これを、各々算術演算部、論理演算部、シフト演算部 とすると、以下の図のように(a)縦続接続、(b)並列接続、(c)混在接続が考え られます。

これらのブロックの中で、算術演算部が論理的な段数が多く信号が伝播するた めに必要な時間は算術演算部が最も大きくなると考えられます。

演算速度の点からは一般的には並列接続が速くなります。 しかし、実装する際のデバイスによっては、一概にこうい い切ることはできません。 また、回路規模については一般的にマルチ プレクサが必要になる並列接続が最も大きくなります。 しかし、これも実装するデバイスによっては、こうのよう にいい切ることはできません。

したがって、通常ALUを設計する際には、回路規模(実装面積)、演算速度、お よび、実装デバイスの特性を十分考慮して設計しなければなりません。

演習では、構成としてどういう形態にするか(縦続接続、並列接続、混在接続) を決定してALUを設計します。グループ毎に違う構成のALUを作成し回路構成や 動作速度を比較してみると面白いでしょう。


ALUの入出力端子は以下のようになっています。被演算数"A"、演算数"B"、結 果"S"は各々16ビットのバスです。演算機能の指定は制御信号"CB"です。制御 信号はALUに必要な演算機能が16種類あることから4ビットは必要です。しかし、 4ビットのみで制御を行うようにすると、ALUの演算機能の指定のため、および、 ALU内の制御信号を生成するために余分なエンコーダ、デコーダが必要となり ます。したがって、ALUの制御信号は4ビットに因われず、冗長性を持たせた信 号本数(たとえば8ビット程度)にするのが良いでしょう。

フラグ出力は4ビットのバスであり、符号フラグ"S"、零フラグ"Z"、オーバー フローフラグ"V"、キャリーフラグ"C"があります。バスにおけるビットの順序 は自由です。フラグの変化は各命令で異なり、以下のようになっています。

算術系命令
演算種類 S Z V C
加算(ADD) 結果に応じて変化 結果に応じて変化 結果に応じて変化 結果に応じて変化
デクリメント(DEC) 結果に応じて変化 結果に応じて変化 結果に応じて変化 結果に応じて変化
インクリメント(INC) 結果に応じて変化 結果に応じて変化 結果に応じて変化 結果に応じて変化
減算(SUB) 結果に応じて変化 結果に応じて変化 結果に応じて変化 結果に応じて変化

論理系命令
演算種類 S Z V C
論理和(OR) 結果に応じて変化 結果に応じて変化 常に0 常に0
排他的論理和(XOR) 結果に応じて変化 結果に応じて変化 常に0 常に0
論理積(AND) 結果に応じて変化 結果に応じて変化 常に0 常に0
論理否定(NOT) 結果に応じて変化 結果に応じて変化 常に0 常に0

シフト系命令
演算種類 S Z V C
算術右シフト(ASR) 結果に応じて変化 結果に応じて変化 常に0 結果に応じて変化
算術左シフト(ASL) 結果に応じて変化 結果に応じて変化 結果に応じて変化 結果に応じて変化
論理右シフト(LSR) 結果に応じて変化 結果に応じて変化 常に0 結果に応じて変化
論理左シフト(LSL) 結果に応じて変化 結果に応じて変化 常に0 結果に応じて変化
右回転(ROR) 結果に応じて変化 結果に応じて変化 常に0 結果に応じて変化
左回転(ROL) 結果に応じて変化 結果に応じて変化 常に0 結果に応じて変化
バイトスワップ(SWP) 結果に応じて変化 結果に応じて変化 常に0 常に0

特別な演算機能
演算種類 S Z V C
パス(PASS) 無変化 無変化 無変化 無変化 フラグレジスタに記憶されないので、ALUからの出力はdon't careという意味です。

符号フラグ、零フラグは全ての演算機能で必要ですから、ALUの最終結果部分 で生成するようにすれば良いでしょう。オーバーフローフラグ、キャリーフラ グについは、算術演算部およびシフト演算部から共に出力されます。制御信号 によって指定された演算機能に応じたフラグが出力されるよう考慮しなければ なりません。


以下、 ALUを設計する上で必要な情報を各演算部に毎に簡単に説明します。


| Back | CAD Home |

Our mail address is kite@arch.cs.kumamoto-u.ac.jp .
Last modified on