Changes between Initial Version and Version 1 of Ex09課題2016


Ignore:
Timestamp:
Jun 16, 2016 2:59:46 PM (10 years ago)
Author:
nakasato
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • Ex09課題2016

    v1 v1  
     1= データパスの完成 = 
     2== 課題2 == 
     3これまでに作成・利用したモジュールを組み合わせて、データパスを完成させてください。 
     4データパスとは、ブロック図で、全体制御部とALU制御部を除いた部分のことです。 
     5 
     6データパスの入出力は、クロック信号CK、クリア信号CLR、制御部と接続される各信号(32ビットの命令および、!RegDstなどの信号)です。 
     7制御部との接続は、例えば、!RegWriteという入力ポートを宣言し、 
     8その入力がレジスタファイルの所定の入力につながるように (レジスタファイルをインスタンス宣言し、宣言のなかの入出力ポートにRegWriteをふくめておく)します。 
     9 
     10データパスのテンプレートは以下になります。 
     11=== Datapath module === 
     12{{{ 
     13   ...   
     14module Datapath(PCwriteCond, PCWrite, IorD, MemRead, MemWrite, MemtoReg, 
     15                IRwrite, PCSource, ALUop, ALUSrcB, ALUSrcA, RegWrite, RegDST, 
     16                PCload, ZeroFlag, 
     17                OP, CK, CLR); 
     18 
     19   input CK, CLR; 
     20   // 1 bit control                                                                                                       
     21   input       PCwriteCond, PCWrite, IorD, MemRead, MemWrite, MemtoReg, IRwrite; 
     22   input       ALUSrcA, RegWrite, RegDST, PCload; 
     23   // 2 bit control                                                                                                       
     24   input [1:0] PCSource, ALUop; 
     25   // 3 bit control                                                                                                       
     26   input [2:0] ALUSrcB; 
     27   //                                                                                                                    
     28   output      ZeroFlag; // ALU zero flag                                                                                
     29   output [5:0] OP; 
     30 
     31... 
     32 
     33endmodule 
     34}}} 
     35 
     36 
     37= 全体の完成 = 
     38== 課題3 == 
     39マルチサイクルプロセッサ全体を「MIPSmulticyle」とし、以下のテンプレートに従い、 
     40これまで設計したモジュールをインスタンス化し、プロセッサを完成させてください。 
     41 
     42テンプレートではCK, CLRとGenPCLに関する信号のみ接続しています。他の信号の接続は各自おこなうこと。 
     43 
     44{{{ 
     45module MIPSmulticycle(CK, CLR); 
     46   input CK, CLR; 
     47   wire  PCWriteCond, PCWrite, ZeroFlag, PCload; 
     48   // 必要な信号をさらに加える 
     49 
     50   // データパスのインスタンス化 
     51   Datapath MCDP (.CK(CK), .CLR(CLR), .ZeroFlag(ZeroFlag), 
     52                  .PCwriteCond(PCwriteCond), .PCWrite(PCWrite), .PCload(PCLoad)); 
     53 
     54   // Three control units                                                                                                
     55   ALUControl alucnt (); 
     56   ControlUnit cntunit (.CK(CK), .CLR(CLR)); 
     57   GenPCL genpcload (PCwriteCond, PCWrite, ZeroFlag, PCload); 
     58endmodule 
     59}}} 
     60 
     61「GenPCL」は、ブロック図左上のPCWriteCondとPCwriteとZeroFlagから、PCをロードする信号を生成するモジュールです。 
     62それ以外のものは、入出力の信号名のみ記述します。 
     63{{{ 
     64module GenPCL(PCWriteCond, PCWrite, ZeroFlag, PCload); 
     65   input PCWriteCond, PCWrite, ZeroFlag; 
     66   output PCload; 
     67 
     68   assign PCload = (PCWriteCond && ZeroFlag) || PCWrite; 
     69endmodule 
     70}}} 
     71 
     72 
     73== テストベンチの例 == 
     74MIPSmulticycleモジュールのテストベンチの例は以下のようになります。 
     75{{{ 
     76`timescale 1ns/1ps 
     77 
     78`include "MIPSmulticycle.v" 
     79 
     80module MIPStestbench; 
     81   reg ck,clear; 
     82 
     83   MIPSmulticycle mips(ck,clear); 
     84 
     85   initial 
     86     begin 
     87 
     88        $dumpfile("MIPStestbench.vcd"); 
     89        $dumpvars(0, mips); 
     90 
     91        // memory initialization 
     92 
     93        // 
     94 
     95        #0 
     96        ck    = 1'b1; 
     97        clear = 1'b1; 
     98 
     99        #110 
     100        clear = 1'b0; 
     101 
     102        #90 
     103 
     104        #1000 
     105          // execute 10 cycles 
     106 
     107        $finish; 
     108     end 
     109 
     110   always #50 CK <= ~CK; 
     111endmodule 
     112}}} 
     113 
     114== エラーチェック == 
     115テストベンチを利用して、文法エラーがないかを確認すること。 
     116{{{ 
     117ncverilog MIPStestbench.v 
     118}}} 
     119 
     120 
     121= ブロック図の確認方法 =  
     122ncverilogコマンドでテストベンチの文法ミスがなくなり、シミュレーションが可能になったら、以下のようにしてモジュールとその間の接続を確認できます。 
     123 
     124== PPEオプションで実行する == 
     125{{{ 
     126ncverilog +PPE MIPSmulticycle.v 
     127}}} 
     128しばらくするとSimvisionのウインドウが開きます。 
     129 
     130[[Image(http://galaxy.u-aizu.ac.jp/g/data/8955add0bfbde43a3a3c811c70c02ccb.png)]] 
     131 
     132== マルチサイクルプロセッサのトップモジュールを選択 == 
     133[[Image(http://galaxy.u-aizu.ac.jp/g/data/e1e50afda8fa300a147053d161621c17.png)]] 
     134 
     135== 右クリックして「Send to New」から「Schematic Tracer」を選択 == 
     136[[Image(http://galaxy.u-aizu.ac.jp/g/data/e4af225341376dc74d0a7dfda80abaa7.png)]] 
     137 
     138 
     139=== ブロック図のウインドウが開き、トップモジュールが表示される === 
     140[[Image(http://galaxy.u-aizu.ac.jp/g/data/12b78356bd1d1731da7fbaa1a74a547d.png)]] 
     141 
     142== モジュールをダブルクリックするとブロック図と配線が確認できます == 
     143[[Image(http://galaxy.u-aizu.ac.jp/g/data/9eedd1265793a4f18494dd7965a067c5.png)]] 
     144 
     145モジュール間の配線が間違っていないかをブロック図で把握して下さい。