| | 1 | トップ:http://galaxy.u-aizu.ac.jp/note/wiki/CAEX2015 |
| | 2 | |
| | 3 | = 準備 = |
| | 4 | 今週から、MIPSプロセッサを設計します。 |
| | 5 | そのために、VerilogHDLを用いた記述方法、シミュレータ、波形ビューアなどの各種CADツールの使いかたを習得します。 |
| | 6 | |
| | 7 | == シミュレーションのためのログイン == |
| | 8 | {{{ |
| | 9 | ssh -X hdw1dc |
| | 10 | }}} |
| | 11 | |
| | 12 | simvisionのウインドウが開かない場合には、 |
| | 13 | |
| | 14 | {{{ |
| | 15 | /bin/ssh -X hdw1dc |
| | 16 | }}} |
| | 17 | でログインすること。 |
| | 18 | |
| | 19 | hostnameは各自の目の前の計算機にすること。 |
| | 20 | |
| | 21 | |
| | 22 | = ALUモジュールの設計と検証 = |
| | 23 | 算術論理演算ユニット(arithmetic logic unit, ALU)は、加算や減算などの算術演算や、 |
| | 24 | ANDやORなどの論理演算を行うプロセッサの中枢部分です。 |
| | 25 | 今週はMIPSプロセッサで使われる32ビットのALUを作成し、 |
| | 26 | さらにシミュレーションによって動作検証をします。 |
| | 27 | |
| | 28 | 今回設計するALUの入出力信号は次の図の通りです。 |
| | 29 | AとBは入力でどちらも32ビット幅です。 |
| | 30 | ALU制御入力(ALUoperation)は4ビット幅の入力で、演算の種類を指定します。 |
| | 31 | 演算結果(ALUresult)も32ビットで出力されます。 |
| | 32 | ゼロ判定出力(Zero)は演算結果が32ビットとも0であるときに1となる信号です。 |
| | 33 | |
| | 34 | [[Image(http://galaxy.u-aizu.ac.jp/comparch2014/alu.gif)]] |
| | 35 | |
| | 36 | このALUでは下に示す6種類の演算をサポートします。第4版上巻p.290参照。 |
| | 37 | |
| | 38 | || ALU制御入力 || 機能 || |
| | 39 | || 0b0000 || AND || |
| | 40 | || 0b0001 || OR || |
| | 41 | || 0b0010 || 加算 || |
| | 42 | || 0b0110 || 減算 || |
| | 43 | || 0b0111 || Set on less than || |
| | 44 | || 0b1100 || NOR || |
| | 45 | |
| | 46 | ANDは2つの入力の各ビットの論理積、ORは論理和を実行することを意味します。 |
| | 47 | Set on less than は比較命令で利用される演算で、2つの入力の大小関係によって 0 または 1 を次の表のように出力します。 |
| | 48 | |
| | 49 | || || ALUの出力 || |
| | 50 | || A < B || 0x00000001 || |
| | 51 | || A ≧ B || 0x00000000 || |
| | 52 | |
| | 53 | 今回作成するプロセッサでは、加算、減算実行時にはオーバフローは想定しません。 |
| | 54 | オーバフローが発生した場合でも、下位のbitは正しい値が出力されるように設計します。 |
| | 55 | |
| | 56 | == ALUモジュールの作成 == |
| | 57 | |
| | 58 | |
| | 59 | |
| | 60 | |