Changes between Initial Version and Version 1 of Ex12課題2016


Ignore:
Timestamp:
Jul 25, 2016 6:34:46 PM (10 years ago)
Author:
nakasato
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • Ex12課題2016

    v1 v1  
     1トップ:http://galaxy.u-aizu.ac.jp/note/wiki/CAEX2016 
     2 
     3= 概要 = 
     4用意されたパイプラインプロセッサを使用して、フォワーディング・ストールの動作を理解すること。 
     5 
     6== 準備 == 
     7この演習では、事前に設計してあるパイプラインプロセッサを用いる。 
     8このパイプラインプロセッサでは、演習で設計したマルチサイクルのプロセッサをベースに、 
     9パイプライン化を行い、ID ステージで正しく分岐ができるようにフォワーディング回路を追加してある。 
     10教科書と違い、フォワーディングをEX ステージ、MEM ステージ、データメモリからIDステージへ向けて行うことに注意すること。 
     11このような差異は実装するデバイスや設計思想の違いによって起こる。 
     12 
     13[[Image(http://galaxy.u-aizu.ac.jp/g/data/c7352a005df4bbd505ebd32c0a82acf2.png)]] 
     14 
     15以下のファイルをダウンロードしたうえで、各自のディレクトリに展開すること。 
     16 
     17 
     18 
     19[[Image(http://galaxy.u-aizu.ac.jp/g/data/8ff0a7950c1fa444b1adf64b42178a15.png)]] 
     20[[Image(http://galaxy.u-aizu.ac.jp/g/data/1063abf0d8f416198b6e389b78bb07b1.png)]] 
     21 
     22シミュレーションをおこなうには、Linux機にログインしてから、 
     23「MIPS_pipe/sim」ディレクトリに移動し、「make sim」でncverilogによるコンパイルと実行がされる。 
     24さらに自動的にsimvisionが起動されるので、以下の実行波形を確認すること。 
     25 
     26[[Image(http://galaxy.u-aizu.ac.jp/g/data/a743c67f74e886a607ce9eef3dfc8516.png)]] 
     27 
     28上記図中のA の信号線(id_stall)がアサートされているサイクルは、ストールが発生していることを示し 
     29ている。このときはIF ステージのPC の値が進まないことを確認せよ。 
     30 
     31また図中B の信号(fwd_から始まる信号)がアサートされているサイクルでは、 
     32対応するフォワーディングパスからデータが転送されていることを示している。 
     33 
     34=== 各信号線の意味 === 
     35 
     36[[Image(http://galaxy.u-aizu.ac.jp/g/data/28c14f0aa489ead86db610c58ac6b4c6.png)]] 
     37 
     38== 課題1 アセンブリプログラムのシミュレーション == 
     39=== 準備 === 
     40シミュレーションするプログラムごとに「sim」ディレクトリをコピーすること 
     41{{{ 
     42cd MIPS_pipe 
     43cp -r sim problem1 
     44}}} 
     45 
     46任意のプログラムのシミュレーションをおこなうには、「testfixture_sample.v」を編集して、メモリの初期化をする必要がある。 
     47 
     48以下の2つのプログラムについて、シミュレーションを行った後に波形を確認し、 
     49なぜフォワーディング及びストールが起こっているかを考察せよ。 
     50具体的に、どの命令でフォワーディングが起こっているか、またその理由は何かを答えなさい。 
     51 
     52これらのプログラムでは複数のnop 命令(プログラム中のor/ori)でテストする命令列を挟み込み、 
     53回答に関係のない依存が起こらないように記述してあることに注意すること。 
     54また、プログラムの変数の値を適宜変更し、意図通りに動作していることを確認せよ。 
     55 
     56解析を行う際には、命令と命令が格納されているアドレスおよびPC の値を注意深く追いかけること。 
     57特にパイプライン動作ではIF, ID, EX, MEM, WB ステージで動作している命令が異なるため、 
     58パイプラインの動作状況をよく確かめること。 
     59 
     60=== プログラム1 === 
     61{{{ 
     62      .data 
     63A:    .word 3 
     64B:    .word 4 
     65C:    .word 5 
     66D:    .word 6 
     67E:    .word 0 
     68F:    .word 0 
     69G:    .word 0 
     70      .text 
     71main: lw $t3, A 
     72      lw $t4, B 
     73      lw $t5, C 
     74      lw $t6, D 
     75      ori $s0, $0, 0 
     76      ori $s1, $0, 0 
     77      ori $s2, $0, 0 
     78      ori $s3, $0, 0 
     79      ori $s4, $0, 0 
     80      add $t2, $t3, $t4 
     81      add $t4, $t5, $t6 
     82      add $t5, $t3, $t4 
     83      ori $s5, $0, 0 
     84      ori $s6, $0, 0 
     85      ori $s7, $0, 0 
     86      sw $t2, E 
     87      sw $t4, F 
     88      sw $t5, G 
     89exit: j exit 
     90}}} 
     91 
     92=== プログラム2 === 
     93{{{ 
     94      .data 
     95A:    .word 4 
     96B:    .word 20480 
     97C:    .word 16 
     98D:    .word 32 
     99S:    .word 0 
     100      .text 
     101main: lw $t2, A 
     102      lw $t4, B 
     103      lw $t6, C 
     104      or $t1, $0, $0 
     105      or $t1, $0, $0 
     106      or $t1, $0, $0 
     107      or $t1, $0, $0 
     108      or $t1, $0, $0 
     109      add $t3, $t4, $t6 
     110      sub $t5, $t3, $t2 
     111      lw $t7, 0($t5) 
     112      add $t8, $t7, $t2 
     113      or $t1, $0, $0 
     114      or $t1, $0, $0 
     115      sw $t8, S 
     116exit: j exit 
     117}}} 
     118 
     119== 課題2 プログラムの高速化 == 
     120パイプラインプロセッサを高速に動作させるためには、 
     121実行する命令間の依存関係を考慮し、アセンブリプログラムを設計する必要がある。 
     122Ex03のソートプログラムを題材に、パイプラインストールが発生している部分に着目し、 
     123これを改変する事によってなるべく高速に動作するプログラムを作成しなさい。