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


Ignore:
Timestamp:
May 24, 2015 12:31:05 PM (11 years ago)
Author:
nakasato
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • Ex07課題2015

    v1 v1  
     1トップ:http://galaxy.u-aizu.ac.jp/note/wiki/CAEX2015 
     2 
     3= マルチサイクルプロセッサの設計 =  
     4 
     5これまでの演習で設計してきたモジュールを組み合わせて、MIPS ISA互換のマルチサイクルプロセッサを設計します。 
     6 
     7設計するプロセッサのブロック図全体図は以下のようになります。 
     8 
     9= ブロック図 = 
     10[[Image(http://galaxy.u-aizu.ac.jp/comparch2014/datapath.png)]] 
     11 
     12詳細を見るためのPDF version -> http://galaxy.u-aizu.ac.jp/comparch/dp_ctl.pdf 
     13 
     14= 設計の指針 = 
     15 * ブロック図を参照して、どのようなモジュールが必要かをリストアップする。 
     16 * それぞれのモジュールを設計する。 
     17 * モジュール間接続について考える。この時にモジュールごとに入力と出力の種類やbit幅を考慮する。 
     18 * "Datapath.v"を作成し、そこからモジュールのインスタンス化および接続をおこなう。 
     19 
     20== モジュールのリストアップ ==  
     21プロセッサを完成させるには、ブロック図を参照して、必要なモジュールをリストアップします。 
     22これまでの演習で利用してきた、あるいは設計してきたモジュールは: 
     23 
     24 * ALU (演習第4週) 
     25 * ALU control (演習第5週) 
     26 * Memory(メモリ)/Registers(レジスタファイル) (演習第6週) 
     27 
     28です。その他に必要なモジュールを列挙すると以下になります。 
     29 
     30 1. PCレジスタ 
     31 1. Aレジスタ 
     32 1. Bレジスタ 
     33 1. ALUOutレジスタ 
     34 1. Instruction register 
     35 1. Memory data register 
     36 1. 2 to 1 マルチプレクサ x 4 
     37 1. 3 to 1 マルチプレクサ x 1 
     38 1. 5 to 1 マルチプレクサ x 1 
     39 1. Sign extendモジュール 
     40 1. Zero extendモジュール 
     41 1. "Shift left 2"モジュール x 2 
     42 1. 制御部 
     43 
     44== 各モジュールの設計 == 
     45=== レジスタ === 
     46レジスタは全て32bitです。例えばAレジスタのHDL記述は以下のようになります。 
     47{{{ 
     48module RegA(i, CK, CLR, o); 
     49   input CK, CLR; 
     50   input [31:0] i; 
     51   output [31:0] o; 
     52   reg [31:0] o; 
     53 
     54   always @(posedge CK) begin 
     55      if (CLR == 1'b1) 
     56        o <= 32'h00000000; 
     57      else 
     58        o <= i; 
     59   end 
     60endmodule 
     61}}} 
     62 
     63CLRが真の時にレジスタは0x0にクリアされます。 
     64 
     65レジスタのうちPCレジスタ、Instruction registerは、制御信号で書き込みが制御されます。 
     66 
     67例えば、PCレジスタはPCloadが真の時のみにレジスタの内容をアップデートします。記述例は以下のようになります。 
     68{{{ 
     69module RegPC(i, PCload, CK, CLR, o); 
     70   input CK, CLR, PCload; 
     71   input [31:0] i; 
     72   output [31:0] o; 
     73   reg [31:0] o; 
     74 
     75   always @(posedge CK) begin 
     76      if (CLR == 1'b1) 
     77        o <= 32'h00000000; 
     78      else if (PCload == 1'b1) 
     79        o <= i; 
     80   end 
     81endmodule 
     82}}} 
     83 
     84=== Instruction register === 
     85ブロック図を見るとわかるように、このレジスタはメモリモジュールから出力を保持する32bitレジスタですが、 
     86出力は4種の信号線に分かれます。このレジスタが命令を保持するレジスタであるからです。 
     87 
     88例えば今実行中の命令がR形式命令の場合、21-25ビットの部分はレジスタのアドレスを表すので、 
     89その信号はレジスタファイルの読み出しアドレス(Read register 1)に接続されています。 
     90同様に、26-31ビットの部分は制御部のOpに接続されます。 
     91 
     92よって、この命令レジスタは以下の入出力となるように設計してください。 
     93 
     94{{{ 
     95module RegInst(i, IRWrite, CK, CLR, o0_15, o16_20, o21_25, o26_31); 
     96   input CK, CLR, IRWrite; 
     97   input [31:0] i; 
     98   output [15:0] o0_15; 
     99   output [4:0] o16_20, o21_25; 
     100   output [5:0] o26_31; 
     101endmodule 
     102}}} 
     103 
     104 
     105=== マルチプレクサ === 
     106マルチプレクサは、制御信号に応じて、複数の入力から出力を選択します。 
     107 
     108例えば、2入力から信号sに応じて、片方を選択する2 to 1マルチプレクサの記述は以下になります。 
     109{{{ 
     110// 32bit : 2 to 1 multiplexer                                                                                                    
     111module mux2(i0, i1, s, o); 
     112   input  [31:0] i0, i1; 
     113   input s; 
     114   output [31:0] o; 
     115   reg    [31:0] o;  // always分で代入する場合にはreg宣言も必要 
     116 
     117   always @(i0 or i1 or s) begin 
     118      if (s == 1'b1) 
     119        o <= i1; 
     120      else 
     121        o <= i0; 
     122   end 
     123endmodule                    
     124}}} 
     125 
     1263入力以上のマルチプレクサはcase文で記述します。参考書の67ページを参照すること。 
     127センシティビティリスト(「@()」の部分)に全ての入力信号を列挙する必要があることに注意すること。 
     128 
     129=== Sign extendモジュール === 
     130このモジュールは入力が16bitで出力が32bitになります。 
     131 
     132=== Zero extendモジュール === 
     133このモジュールも、入力が16bitで出力が32bitになります。 
     134 
     135=== "Shift left 2"モジュール === 
     136このモジュールは2回利用されていて、どちらも入力を左に2 bitシフトしたものが出力です。 
     137 
     138ただし、Sign extendモジュールに接続されているものは入出力とも32bitですが、 
     139命令の0-25ビットが入力されているものは、入力が26bitで出力が28bitです。 
     140この28bitの出力信号は、PCレジスタの28-31ビットと合わせて32bit信号になり、 
     141一番右にあるマルチプレクサの入力になります。 
     142 
     143=== 制御部 === 
     144制御部は図の上部中心にあるオレンジ色の部分で、この部分については別途説明します。 
     145 
     146= 課題1 データパスの理解 = 
     147以下のPDFで示された黄色い箱の番号(1 - 8)のデータパスの信号幅を答えなさい。 
     148 
     149http://galaxy.u-aizu.ac.jp/comparch2014/dp_bit_width.pdf 
     150 
     151= 課題2 モジュールの設計 = 
     152制御部を除いて、リストアップされた必要なモジュールを設計してください。 
     153そのうち、5 to 1マルチプレクサ、Sign extend、Zero extend、Shift left 2の各モジュールは、 
     154テストベンチを書いて正しい動作をするかを確認してください。 
     155 
     156= 状態遷移図の理解 = 
     157制御部を設計するためには、このマルチサイクルプロセッサの状態遷移を理解する必要があります。 
     158状態遷移図は、このファイル http://galaxy.u-aizu.ac.jp/comparch/dp_ctl.pdf の2ページ目にあります。 
     159講義ノート http://web-int.u-aizu.ac.jp/~miyazaki/comparch-14/lecture/comparch-9-multicycle.pdf も参照してください。 
     160なお、ここで設計する状態遷移図は、講義ノートのものにイミディエイト命令が追加されていて、 
     161全部の状態数は13個(0から12)になります。 
     162アセンブラプログラム演習で用いたJALとJR命令は後の演習で追加するので、今は扱いません。 
     163 
     164この状態遷移図は、各状態の○の中に記述された信号が変化することを示します。 
     165例えば状態0の命令フェッチでは、!MemRead信号(1bit)が"1'b1"になり(アサート)、ALUSrcA(1bit)は"1'b0"になります(ネゲート)。 
     166他の信号の意味も同様です。全ての信号の幅と意味については、上記講義ノートの11ページを参考にしてください。 
     167 
     168== 命令実行時のデータパスの変化 == 
     169[[Image(http://galaxy.u-aizu.ac.jp/comparch2014/ori.png)]] 
     170 
     171この図で赤いで示された数字は、ORI命令を実行した時に、どのデータパスが利用されるかを示します。 
     172ORI命令では、状態は0→1→12→11→0と遷移します。 
     173 
     174例えば、状態1(命令デコード)の時には、ALUSrcAとALUSrcBとALUOpが変化します。 
     175講義ノートの14ページにあるように、この時におこなわれる操作は、 
     176レジスタファイルからレジスタA/Bへのデータ読み出しと、分岐アドレスの計算です。 
     177よって、赤い数字1のついたデータパスが利用されます。 
     178 
     179ただし、実行されるが使用されないパス(例えば状態0において、メモリからMemory Data registerへのデータ転送) 
     180および制御部からの信号には番号をつけていません。 
     181ALUの入力は多くの状態で使用されるので番号を省略しています。 
     182ただし、状態1においてPCからマルチプレクサ、ALUを経由してALUOutおよび命令レジスタから符号拡張、2bitシフト、 
     183ALUを経由してALUOutまでのパスには1をつけています。 
     184 
     185=  制御部の設計(1) = 
     186制御部モジュールのテンプレートは以下のようになります。 
     187 
     188{{{ 
     189module ControlUnit(PCWriteCond, PCWrite, IorD, MemRead, MemWrite, MemtoReg, 
     190                   IRWrite, PCSource, ALUOp, ALUSrcB, ALUSrcA, 
     191                   RegWrite, RegDST, Op, CK, CLR); 
     192 
     193   // clock 
     194   input CK; 
     195   input CLR; 
     196 
     197   // opcode (6 bit) 
     198   input [5:0]  Op; 
     199 
     200   // 1 bit control signal 
     201   output PCWriteCond; 
     202   output PCWrite; 
     203   output IorD; 
     204   output MemRead; 
     205   output MemWrite; 
     206   output MemtoReg; 
     207   output IRWrite; 
     208   output RegWrite; 
     209   output RegDST; 
     210   output ALUSrcA; 
     211 
     212   // 2 bit control signal 
     213   output [1:0] PCSource; 
     214   output [1:0] ALUOp; 
     215   output [2:0] ALUSrcB; 
     216 
     217   // register declaration 
     218   reg          PCWriteCond; 
     219   reg          PCWrite; 
     220   reg          IorD; 
     221   reg          MemRead; 
     222   reg          MemWrite; 
     223   reg          MemtoReg; 
     224   reg          IRWrite; 
     225   reg [1:0]    PCSource; 
     226   reg [1:0]    ALUOp; 
     227   reg [2:0]    ALUSrcB; 
     228   reg          ALUSrcA; 
     229   reg          RegWrite; 
     230   reg          RegDST; 
     231 
     232   // state register 
     233   reg [3:0]    state; 
     234 
     235 
     236endmodule // ControlUnit 
     237}}} 
     238 
     239入力信号はOpとCK(クロック信号)とCLR(リセット信号)で、その他は出力になります。 
     240Op信号はMIPS命令コードの25-31ビットの部分です。各命令コードごとのOp信号を以下のテーブルに示します。 
     241 
     242== 命令コード == 
     243|| 命令の種類  || opcode(10進数) || 
     244|| R形式       || 0  || 
     245|| Load Word   || 35 || 
     246|| Store Word  || 43 || 
     247|| Branch on EQ|| 4  || 
     248|| ADD imm     || 8  || 
     249|| SLT imm     || 10 || 
     250|| AND imm     || 12 || 
     251|| ORI imm     || 13 || 
     252 
     253注意:R形式命令では、命令コードの0-5ビットの部分で演算の種類を指定します。 
     254 
     255== 例題 == 
     256状態遷移図から、R形式命令の実行には4サイクル必要になります。 
     257このことを、以下のファイルを使ってシミュレーションを行い確かめなさい。 
     258 
     259状態遷移のみの制御回路 http://galaxy.u-aizu.ac.jp/comparch2014/V/ControlUnit_1.v 
     260 
     261テストベンチファイル http://galaxy.u-aizu.ac.jp/comparch2014/V/CUbench_1.v 
     262 
     263=== 実行例 === 
     264それぞれのファイルをダウンロードまたは保存して、以下のコマンドを実行。 
     265{{{ 
     266ncverilog CUbench_1.v 
     267}}} 
     268 
     269この状態遷移の回路では、always文の部分はCLKが上向きに変化する時に状態が遷移します。 
     270また、CLR信号が真になったら状態0になります(リセット)。 
     271そのため状態遷移を行う時にはCLR信号を適切に変化させる必要があります。 
     272 
     273=== 実行波形 === 
     274[[Image(http://galaxy.u-aizu.ac.jp/comparch2014/image/CUbench1.png)]] 
     275 
     276== 課題3 == 
     277LW命令とADDI命令の場合に、例題を参考にテストベンチファイルを作成して、 
     278シミュレーションを行い、実行波形を確認してください。 
     279それぞれの場合、実行までに何サイクル必要かを考えること。