Changes between Initial Version and Version 1 of Ex11 マルチサイクルプロセッサの乗算器拡張2017


Ignore:
Timestamp:
Jul 11, 2017 10:43:40 AM (9 years ago)
Author:
nakasato
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • Ex11 マルチサイクルプロセッサの乗算器拡張2017

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