wiki:Ex09 マルチサイクルプロセッサの全体設計(1)2017

Version 2 (modified by nakasato, 9 years ago) (diff)

--

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

データパスの完成

課題1

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

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

データバスの出力は、ZeroFlag、OP1(制御部に接続する、命令の上位6ビット部分)とOP2(ALU制御部に接続する、命令の下位6ビット部分)

データパスのテンプレートは以下になります。なお、インスタンス化するモジュールをincludeすること。

Datapath module

   ...  
module Datapath(PCwriteCond, PCWrite, IorD, MemRead, MemWrite, MemtoReg,
                IRwrite, PCSource, ALUop, ALUSrcB, ALUSrcA, RegWrite, RegDST,
                PCload, ALUoperation,
                ZeroFlag, OP1, OP2,
                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;
   // 4 bit control                                                                                                      
   input [3:0] ALUoperation;

   ///////////////////////////////////////////////////                                                                                                                   
   output      ZeroFlag; // ALU zero flag                                                                               
   output [5:0] OP1, OP2;
...

endmodule

全体の完成

課題2

マルチサイクルプロセッサ全体を「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

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