wiki:Ex08課題2015

トップ:http://galaxy.u-aizu.ac.jp/note/wiki/CAEX2015

制御部の設計(2)

各状態における出力信号を定義すると、以下のファイルのようになります。 ただし、このファイルでは、状態0と1の場合のみ記述してあります。

未完成の制御回路 http://galaxy.u-aizu.ac.jp/note/raw-attachment/wiki/Ex08%E8%AA%B2%E9%A1%8C2015/ControlUnit_2.v

課題1

全ての状態の場合の出力信号を定義して、主制御ユニット(ファイル名は"ControlUnit.v")を完成させること。

制御回路の動作確認

テストベンチファイルの例 http://galaxy.u-aizu.ac.jp/note/raw-attachment/wiki/Ex08%E8%AA%B2%E9%A1%8C2015/CUbench.v

このテストベンチファイルを実行し、各命令(LW, SW, RTYPE命令, BEQ, JMP, ADDI, SLTI, ANDI, ORI)ごとに、 状態番号stateごとに正しい信号が出力されていることを確認してください。

例えばLW命令の場合は、state=0では:

state= 0: MemRead=1,ALUSrcA=0,IorD=0,IRWrite=1,ALUSrcB=001,ALUOp=00,PCWrite=1,PCSource=00

と出力されます。これを状態遷移図を比べて、正しいかどうかを確認してください。

http://galaxy.u-aizu.ac.jp/comparch2014/image/comparch_ex8.png

他の命令と他のstateについても同様に確認すること。

注意:状態遷移図には各状態で変化する信号のみが書いてあります。例えばMemReadはstate = 0の時は真であるべきですが、それ以外の状態では偽になっている必要があります。そのためstate = 1ではMemReadは偽になっています。他のstateの時も同様です。

動作確認

RTYPE命令とJMP命令の場合の波形を表示して、TAに動作確認を受けること。

データパスの完成

課題2

これまでに作成・利用したモジュールを組み合わせて、データパスを完成させてください。 データパスとは、ブロック図で、全体制御部とALU制御部を除いた部分のことです。

データパスの入出力は、クロック信号CK、クリア信号CLR、制御部と接続される各信号(32ビットの命令および、!RegDstなどの信号)です。 制御部との接続は、例えば、!RegWriteという入力ポートを宣言し、 その入力がレジスタファイルの所定の入力につながるように (レジスタファイルをインスタンス宣言し、宣言のなかの入出力ポートにRegWriteをふくめておく)します。

データパスのテンプレートは以下になります。

Datapath module

   ...  
module Datapath(PCwriteCond, PCWrite, IorD, MemRead, MemWrite, MemtoReg,
                IRwrite, PCSource, ALUop, ALUSrcB, ALUSrcA, RegWrite, RegDST,
                PCload, ZeroFlag,
                OP, CK, CLR);

   input CK, CLR;
   // 1 bit control                                                                                                      
   input       PCwriteCond, PCWrite, IorD, MemRead, MemWrite, MemtoReg, IRwrite;
   input       ALUSrcA, RegWrite, RegDST, PCload;
   // 2 bit control                                                                                                      
   input [1:0] PCSource, ALUop;
   // 3 bit control                                                                                                      
   input [2:0] ALUSrcB;
   //                                                                                                                   
   output      ZeroFlag; // ALU zero flag                                                                               
   output [5:0] OP;

...

endmodule

全体の完成

課題3

マルチサイクルプロセッサ全体を「MIPSmulticyle」とし、以下のテンプレートに従い、 これまで設計したモジュールをインスタンス化し、プロセッサを完成させてください。

テンプレートではCK, CLRとGenPCLに関する信号のみ接続しています。他の信号の接続は各自おこなうこと。

module MIPSmulticycle(CK, CLR);
   input CK, CLR;
   wire  PCWriteCond, PCWrite, ZeroFlag, PCload;
   // 必要な信号をさらに加える

   // データパスのインスタンス化
   Datapath MCDP (.CK(CK), .CLR(CLR), .ZeroFlag(ZeroFlag),
                  .PCwriteCond(PCwriteCond), .PCWrite(PCWrite), .PCload(PCLoad));

   // Three control units                                                                                               
   ALUControl alucnt ();
   ControlUnit cntunit (.CK(CK), .CLR(CLR));
   GenPCL genpcload (PCwriteCond, PCWrite, ZeroFlag, PCload);
endmodule

「GenPCL」は、ブロック図左上のPCWriteCondとPCwriteとZeroFlagから、PCをロードする信号を生成するモジュールです。 それ以外のものは、入出力の信号名のみ記述します。

module GenPCL(PCWriteCond, PCWrite, ZeroFlag, PCload);
   input PCWriteCond, PCWrite, ZeroFlag;
   output PCload;

   assign PCload = (PCWriteCond && ZeroFlag) || PCWrite;
endmodule

テストベンチの例

MIPSmulticycleモジュールのテストベンチの例は以下のようになります。

`timescale 1ns/1ps

`include "MIPSmulticycle.v"

module MIPStestbench;
   reg ck,clear;

   MIPSmulticycle mips(ck,clear);

   initial
     begin

        $dumpfile("MIPStestbench.vcd");
        $dumpvars(0, mips);

	// memory initialization

        //

        #0
	ck    = 1'b1;
	clear = 1'b1;

        #110
        clear = 1'b0;

      	#90

        #1000
	  // execute 10 cycles

        $finish;
     end

   always #50 CK <= ~CK;
endmodule

エラーチェック

テストベンチを利用して、文法エラーがないかを確認すること。

ncverilog MIPStestbench.v

ブロック図の確認方法

ncverilogコマンドでテストベンチの文法ミスがなくなり、シミュレーションが可能になったら、以下のようにしてモジュールとその間の接続を確認できます。

PPEオプションで実行する

ncverilog +PPE MIPSmulticycle.v

しばらくするとSimvisionのウインドウが開きます。

http://galaxy.u-aizu.ac.jp/g/data/8955add0bfbde43a3a3c811c70c02ccb.png

マルチサイクルプロセッサのトップモジュールを選択

http://galaxy.u-aizu.ac.jp/g/data/e1e50afda8fa300a147053d161621c17.png

右クリックして「Send to New」から「Schematic Tracer」を選択

http://galaxy.u-aizu.ac.jp/g/data/e4af225341376dc74d0a7dfda80abaa7.png

ブロック図のウインドウが開き、トップモジュールが表示される

http://galaxy.u-aizu.ac.jp/g/data/12b78356bd1d1731da7fbaa1a74a547d.png

モジュールをダブルクリックするとブロック図と配線が確認できます

http://galaxy.u-aizu.ac.jp/g/data/9eedd1265793a4f18494dd7965a067c5.png

モジュール間の配線が間違っていないかをブロック図で把握して下さい。

Last modified 11 years ago Last modified on Jun 8, 2015 5:26:26 PM

Attachments (2)

Download all attachments as: .zip