トップ:http://galaxy.u-aizu.ac.jp/note/wiki/CAEX2016 = データパスの完成 = == 課題1 == これまでに作成・利用したモジュールを組み合わせて、データパスを完成させてください。 データパスとは、ブロック図で、全体制御部と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 }}} = 全体の完成 = == 課題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のウインドウが開きます。 [[Image(http://galaxy.u-aizu.ac.jp/g/data/8955add0bfbde43a3a3c811c70c02ccb.png)]] == マルチサイクルプロセッサのトップモジュールを選択 == [[Image(http://galaxy.u-aizu.ac.jp/g/data/e1e50afda8fa300a147053d161621c17.png)]] == 右クリックして「Send to New」から「Schematic Tracer」を選択 == [[Image(http://galaxy.u-aizu.ac.jp/g/data/e4af225341376dc74d0a7dfda80abaa7.png)]] === ブロック図のウインドウが開き、トップモジュールが表示される === [[Image(http://galaxy.u-aizu.ac.jp/g/data/12b78356bd1d1731da7fbaa1a74a547d.png)]] == モジュールをダブルクリックするとブロック図と配線が確認できます == [[Image(http://galaxy.u-aizu.ac.jp/g/data/9eedd1265793a4f18494dd7965a067c5.png)]] モジュール間の配線が間違っていないかをブロック図で把握して下さい。