Changes between Initial Version and Version 1 of Ex09 マルチサイクルプロセッサの全体設計(1)2017


Ignore:
Timestamp:
Jun 19, 2017 2:55:23 PM (9 years ago)
Author:
nakasato
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • Ex09 マルチサイクルプロセッサの全体設計(1)2017

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