| | 1 | トップ:http://galaxy.u-aizu.ac.jp/note/wiki/CAEX2015 |
| | 2 | |
| | 3 | = 概要 = |
| | 4 | これまで設計してきたJR命令とJAL命令の拡張済みのマルチサイクルプロセッサ、32ビット乗算器が含まれていません。 |
| | 5 | そのため、アセンブリコードの演習では、乗算を加算とシフトの組合せで実現する必要がありました。 |
| | 6 | |
| | 7 | この課題では、以下の説明に従ってALUに乗算器を追加し、乗算命令を実行できるマルチサイクルプロセッサを設計します。 |
| | 8 | |
| | 9 | == 課題1 == |
| | 10 | 第5回の講義ノート( http://web-int.u-aizu.ac.jp/~miyazaki/comparch-14/lecture/comparch-5-alu2.pdf )の説明を参考に、 |
| | 11 | Verilog HDLで16ビット乗算器を設計し、その動作をテストベンチにより検証しなさい。 |
| | 12 | なお、この乗算器をALUに組み込むため、乗数・被乗数は32ビットとし、乗算はそれぞれの下位16ビット同士の計算を実現すればよい。 |
| | 13 | この場合乗算の結果は最大で32ビットになるので、結果の出力も32ビットとすること。 |
| | 14 | |
| | 15 | この問題では、加減算に「+/-」を使って構わないが、乗算に「*」を使ってはいけない。 |
| | 16 | |
| | 17 | === 乗算器テンプレート === |
| | 18 | {{{ |
| | 19 | module mul32(x, y, z); |
| | 20 | input x, y; |
| | 21 | output z; |
| | 22 | endmodule |
| | 23 | }}} |
| | 24 | |
| | 25 | === ヒント === |
| | 26 | 最も単純な実現方法は講義ノートに書いてある方法になる。 |
| | 27 | 具体的には、「z = x*y」を16ビットで計算する場合、部分積は16個になる。 |
| | 28 | つまり、答える得るためには16個の部分積を足し合わせればよい。 |
| | 29 | それぞれの部分積は、yのそれぞれのビットが真か偽かに応じて"x"または"0"になる。 |
| | 30 | ただし、桁を正しく合わせる必要があることに注意すること。 |
| | 31 | |
| | 32 | 余裕がある場合にはBoothのアルゴリズムについても検討すること。レポートでこの課題をおこなった場合、ボーナス点を与える。 |
| | 33 | |
| | 34 | == 課題2 == |
| | 35 | 作成した乗算器をALUに組み込み、乗算命令をサポートしたマルチサイクルプロセッサを設計しなさい。 |
| | 36 | |
| | 37 | そのためには、ALUモジュール、ALU制御モジュールを拡張することが必要である。 |
| | 38 | |
| | 39 | === テストプログラム === |
| | 40 | {{{ |
| | 41 | .data |
| | 42 | A: .word 19 |
| | 43 | B: .word 75 |
| | 44 | C: .word 0 |
| | 45 | |
| | 46 | .text |
| | 47 | main: lw $8, A |
| | 48 | lw $9, B |
| | 49 | mul $10, $8, $9 |
| | 50 | sw $10, C |
| | 51 | exit: j exit |
| | 52 | }}} |
| | 53 | |
| | 54 | このコードをxspimでアセンブルすると |
| | 55 | |
| | 56 | {{{ |
| | 57 | [0x00001000] 0x8c085000 lw $8, 20480($0) [A] ; 7: lw $8, A |
| | 58 | [0x00001004] 0x8c095004 lw $9, 20484($0) [B] ; 8: lw $9, B |
| | 59 | [0x00001008] 0x71095002 mul $10, $8, $9 ; 9: mul $10, $8, $9 |
| | 60 | [0x0000100c] 0xac0a5008 sw $10, 20488($0) [C] ; 10: sw $10, C |
| | 61 | [0x00001010] 0x08000404 j 0x00001010 [exit] ; 11: j exit |
| | 62 | }}} |
| | 63 | |
| | 64 | となる。乗算命令に対応する機械語は「0x71095002」である。 |
| | 65 | R形式命令であることに注意してOPCODEとFUNCTがどうなるかを考えること。 |
| | 66 | |
| | 67 | == 課題3 == |
| | 68 | 乗算を利用するプログラムの例として、Ex03「例題5:再帰手続きアルゴリズム」の動作をシミュレーションで確認しなさい。 |
| | 69 | ただし、階乗はN = 9まで検証すればよい。 |