|
|
まずはデコーダーとALUを作ってみる
|
|
|
========
|
|
|
|
|
|
まずは組み合わせ論理回路であるデコーダーとALUの設計を行ってみましょう。
|
|
|
|
|
|
## デコーダーとは
|
|
|
|
|
|
デコーダーは、命令のビット列を*解釈*し、以降のステージで使用するときに使いやすい形に整形するモジュールです。
|
|
|
|
|
|
### デコーダーの入力と出力
|
|
|
|
|
|
デコーダーの入力は、命令のビット列(32ビット)です。
|
|
|
|
|
|
デコーダーの出力は、(設計にもよりますが、)以下のものが必要になることが多いです。
|
|
|
|
|
|
* 第一ソースレジスタの番号
|
|
|
* 第二ソースレジスタの番号
|
|
|
* デスティネーションレジスタの番号
|
|
|
* 即値の値
|
|
|
* ALUで行う演算の種類
|
|
|
* etc...
|
|
|
|
|
|
ここで、出力はビット列(整数値)である必要があるため、「ALUで行う演算の種類」なども整数で表す必要があります。
|
|
|
このような場合、ソースファイル上に直接数値として書くのではなく、定数値に適当な名前を付けて見通しをよくするのが一般的です。
|
|
|
そのような定数値と名前の対応は、ヘッダファイルに書いておき、それを各ソースファイルでインクルードするのが良いでしょう(そうしないと、複数のソースファイルで定数値と名前の対応が一貫していない、というバグが発生する可能性が出てきます)。
|
|
|
|
|
|
使いそうな定数値を定義したヘッダファイルをTAが用意しました。
|
|
|
|
|
|
[define.vh](uploads/ed84d507e2f69ce5f41d8845b5df967e/define.vh)
|
|
|
|
|
|
本実験では、デコーダーとALUのテストベンチをTAが用意してありますが、そのテストベンチでもこのヘッダファイルで定義した定数値を参照しています。
|
|
|
特に理由がなければ、これに沿った設計をするとよいでしょう([CPU の各部品の検証](./validation)を参照してください)。
|
|
|
|
|
|
## ALUとは
|
|
|
|
|
|
ALUは、arithmetic logic unitの略で、二進数の簡単な算術演算(加算、減算、大小比較、一致比較)及び二進数の論理演算(ビット毎の論理和、ビット毎の論理積、ビット毎の排他的論理和)を行うモジュールです。場合によっては、二進数のシフト演算(論理左シフト、論理右シフト、算術右シフト)もできるものを指すこともあります。
|
|
|
|
|
|
本実験では、ALUはシフト演算もできるものを指すことにします。 |
|
|
\ No newline at end of file |