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


Ignore:
Timestamp:
Jul 22, 2015 8:21:46 AM (11 years ago)
Author:
nakasato
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • Ex12課題2015

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