Changes between Initial Version and Version 1 of Ex11課題2015


Ignore:
Timestamp:
Jun 30, 2015 11:57:11 AM (11 years ago)
Author:
nakasato
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • Ex11課題2015

    v1 v1  
     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 )の説明を参考に、 
     11Verilog HDLで16ビット乗算器を設計し、その動作をテストベンチにより検証しなさい。 
     12なお、この乗算器をALUに組み込むため、乗数・被乗数は32ビットとし、乗算はそれぞれの下位16ビット同士の計算を実現すればよい。 
     13この場合乗算の結果は最大で32ビットになるので、結果の出力も32ビットとすること。 
     14 
     15この問題では、加減算に「+/-」を使って構わないが、乗算に「*」を使ってはいけない。 
     16 
     17=== 乗算器テンプレート === 
     18{{{ 
     19module mul32(x, y, z); 
     20   input x, y; 
     21   output z; 
     22endmodule 
     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 
     42A:       .word 19 
     43B:       .word 75 
     44C:       .word 0 
     45 
     46         .text 
     47main:    lw   $8, A 
     48         lw   $9, B 
     49         mul  $10, $8, $9 
     50         sw   $10, C 
     51exit:    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」である。 
     65R形式命令であることに注意してOPCODEとFUNCTがどうなるかを考えること。 
     66 
     67== 課題3 == 
     68乗算を利用するプログラムの例として、Ex03「例題5:再帰手続きアルゴリズム」の動作をシミュレーションで確認しなさい。 
     69ただし、階乗はN = 9まで検証すればよい。