トップ: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のウインドウが開きます。
マルチサイクルプロセッサのトップモジュールを選択
右クリックして「Send to New」から「Schematic Tracer」を選択
ブロック図のウインドウが開き、トップモジュールが表示される
モジュールをダブルクリックするとブロック図と配線が確認できます
モジュール間の配線が間違っていないかをブロック図で把握して下さい。





