Changes between Version 2 and Version 3 of Ex09課題2016


Ignore:
Timestamp:
Jun 16, 2016 3:02:26 PM (10 years ago)
Author:
nakasato
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • Ex09課題2016

    v2 v3  
    146146 
    147147モジュール間の配線が間違っていないかをブロック図で把握して下さい。 
     148 
     149トップ:http://galaxy.u-aizu.ac.jp/note/wiki/CAEX2015 
     150 
     151= 課題3 マルチサイクルプロセッサの動作確認 = 
     152個々の命令をひとつひとつ実行することで、マルチサイクルプロセッサをデバッグします。 
     153 
     154テストベンチの例は以下のようになります。 
     155{{{ 
     156`timescale 1ns/1ps 
     157 
     158`include "MIPSmulticycle.v" 
     159 
     160module MIPStestbench; 
     161   reg ck,clear; 
     162 
     163   MIPSmulticycle mips(ck,clear); 
     164 
     165   initial 
     166     begin 
     167 
     168        $dumpfile("MIPStestbench.vcd"); 
     169        $dumpvars(0, mips); 
     170 
     171        // memory initialization 
     172 
     173        #0 
     174        ck    = 1'b1; 
     175        clear = 1'b1; 
     176 
     177        #110 
     178        clear = 1'b0; 
     179 
     180        #90 
     181 
     182        #1000 
     183          // execute 10 cycles 
     184 
     185        $finish; 
     186     end 
     187 
     188   always #50 CK <= ~CK; 
     189endmodule 
     190}}} 
     191 
     192 
     193「memory initialization」の部分には、xspimで生成したメモリの初期化ファイルを組合せます。 
     194 
     195== テスト用アセンブリコード == 
     196http://galaxy.u-aizu.ac.jp/note/raw-attachment/wiki/Ex09%E8%AA%B2%E9%A1%8C2015/test_instructions.s 
     197 
     198 1. xspimでプログラムをロードし「dump」ボタンを押す。"testfixture.include"というファイルが生成されます。 
     199 1. これから実行するプログラムの実行サイクルを見積ります。各命令は3 - 4サイクル必要ですので、多めにとって5サイクルで換算してください。ループがある場合には、繰り返し回数を考慮してください。 
     200 1. テストベンチのテンプレートに"testfixture.include"を挿入してください。 
     201 
     202最初から全てのプログラムをテストするのではなく、簡単な命令から動作を確認すること。 
     203 
     204== デバッグの方法 == 
     205=== CLRとPCを確認する === 
     206CLR(リセット信号)が0になってからPCの値が0, 4, 8と増えていくはずです。 
     207プログラムの最後はジャンプ命令のため、プログラムが終了するとPCの値は0xa0と0x9cを繰り返すはずです。 
     208まずは、PCの値が正しく変化しているかを確認してください。 
     209 
     210=== 命令の動作を制御部から調べる === 
     211制御部分のstate信号を値を確認してください。 
     212これは状態遷移図にもとづいて変化するはずなので、命令ごとに状態遷移図と比べてください。 
     213 
     214=== 命令実行の詳細確認 === 
     215stateが0の時に、PCの出力が正しい命令のアドレスを指しているかを確認してください。 
     216さらに、命令メモリの出力が正しい命令コードになっているかを確認してください。 
     217 
     218次に、stateが1の時に命令レジスタの出力が正しいかを確認すること。 
     219 
     220==== 算術命令の場合の例 ==== 
     221stateは1から6に遷移します。この時に二つのレジスタにそれぞれ正しい値ロードされているかを確認すること。 
     222また、ALUSrcA, B, ALUOpの値を、状態遷移図で定義された値と比べて確認してください。 
     223次にALUの計算結果が正しいかを調べること。 
     224 
     225state 6からはstate 7に遷移します。ここで!RegDst, !RegWrite, !MemtoRegが正しいかを確認してください。 
     226レジスタファイルに書き込まれたかどうかを確認するには、次のクロックでstateが0に遷移したところで、 
     227該当するレジスタファイルの部分を調べてください。 
     228 
     229==== 他の命令 ==== 
     230算術命令と同様の方針で、stateの変化毎に制御信号が正しいか、レジスタの値が正しく読み書きできているかを確認すること。 
     231 
     232== __動作確認のチェック__ == 
     233今週と次週の演習時間内に、TAの動作チェックをうけてください。 
     234この動作確認は第3回レポートの点数に含みます。配点は12点(25点満点中)とします。 
     235 
     236TAからOKがでたら、課題4をおこなうこと。 
     237 
     238= 課題4 プログラムの実行 = 
     239全ての命令の実行が正しくなったら、 
     240第2回の演習で作成した乗算のプログラムが正しく動作することを確認しなさい。 
     241なお、xpsim用にADDU命令とした部分は、ADD命令に置き換える必要があるので、注意すること。 
     242