Changes between Initial Version and Version 1 of Ex08課題2015


Ignore:
Timestamp:
Jun 8, 2015 5:19:30 PM (11 years ago)
Author:
nakasato
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • Ex08課題2015

    v1 v1  
     1トップ:http://galaxy.u-aizu.ac.jp/note/wiki/CAEX2015 
     2 
     3=  制御部の設計(2) = 
     4各状態における出力信号を定義すると、以下のファイルのようになります。 
     5ただし、このファイルでは、状態0と1の場合のみ記述してあります。 
     6 
     7未完成の制御回路 http://galaxy.u-aizu.ac.jp/comparch2014/V/ControlUnit_2.v 
     8 
     9== 課題1 == 
     10全ての状態の場合の出力信号を定義して、主制御ユニット(ファイル名は"!ControlUnit.v")を完成させること。 
     11 
     12=== 制御回路の動作確認 === 
     13テストベンチファイルの例 http://galaxy.u-aizu.ac.jp/comparch2014/V/CUbench.v 
     14 
     15このテストベンチファイルを実行し、各命令(LW, SW, RTYPE命令, BEQ, JMP, ADDI, SLTI, ANDI, ORI)ごとに、 
     16状態番号stateごとに正しい信号が出力されていることを確認してください。 
     17 
     18例えばLW命令の場合は、state=0では: 
     19{{{ 
     20state= 0: MemRead=1,ALUSrcA=0,IorD=0,IRWrite=1,ALUSrcB=001,ALUOp=00,PCWrite=1,PCSource=00 
     21}}} 
     22と出力されます。これを状態遷移図を比べて、正しいかどうかを確認してください。 
     23 
     24[[Image(http://galaxy.u-aizu.ac.jp/comparch2014/image/comparch_ex8.png)]] 
     25 
     26他の命令と他のstateについても同様に確認すること。 
     27 
     28注意:状態遷移図には各状態で変化する信号のみが書いてあります。例えば!MemReadはstate = 0の時は真であるべきですが、それ以外の状態では偽になっている必要があります。そのためstate = 1では!MemReadは偽になっています。他のstateの時も同様です。 
     29 
     30= データパスの完成 = 
     31== 課題2 == 
     32これまでに作成・利用したモジュールを組み合わせて、データパスを完成させてください。 
     33データパスとは、ブロック図で、全体制御部とALU制御部を除いた部分のことです。 
     34 
     35データパスの入出力は、クロック信号CK、クリア信号CLR、制御部と接続される各信号(32ビットの命令および、!RegDstなどの信号)です。 
     36制御部との接続は、例えば、!RegWriteという入力ポートを宣言し、 
     37その入力がレジスタファイルの所定の入力につながるように (レジスタファイルをインスタンス宣言し、宣言のなかの入出力ポートにRegWriteをふくめておく)します。 
     38 
     39データパスのテンプレートは以下になります。 
     40=== Datapath module === 
     41{{{ 
     42   ...   
     43module Datapath(PCwriteCond, PCWrite, IorD, MemRead, MemWrite, MemtoReg, 
     44                IRwrite, PCSource, ALUop, ALUSrcB, ALUSrcA, RegWrite, RegDST, 
     45                PCload, ZeroFlag, 
     46                OP, CK, CLR); 
     47 
     48   input CK, CLR; 
     49   // 1 bit control                                                                                                       
     50   input       PCwriteCond, PCWrite, IorD, MemRead, MemWrite, MemtoReg, IRwrite; 
     51   input       ALUSrcA, RegWrite, RegDST, PCload; 
     52   // 2 bit control                                                                                                       
     53   input [1:0] PCSource, ALUop; 
     54   // 3 bit control                                                                                                       
     55   input [2:0] ALUSrcB; 
     56   //                                                                                                                    
     57   output      ZeroFlag; // ALU zero flag                                                                                
     58   output [5:0] OP; 
     59 
     60... 
     61 
     62endmodule 
     63}}} 
     64 
     65 
     66= 全体の完成 = 
     67== 課題3 == 
     68マルチサイクルプロセッサ全体を「MIPSmulticyle」とし、以下のテンプレートに従い、 
     69これまで設計したモジュールをインスタンス化し、プロセッサを完成させてください。 
     70 
     71テンプレートではCK, CLRとGenPCLに関する信号のみ接続しています。他の信号の接続は各自おこなうこと。 
     72 
     73{{{ 
     74module MIPSmulticycle(CK, CLR); 
     75   input CK, CLR; 
     76   wire  PCWriteCond, PCWrite, ZeroFlag, PCload; 
     77   // 必要な信号をさらに加える 
     78 
     79   // データパスのインスタンス化 
     80   Datapath MCDP (.CK(CK), .CLR(CLR), .ZeroFlag(ZeroFlag), 
     81                  .PCwriteCond(PCwriteCond), .PCWrite(PCWrite), .PCload(PCLoad)); 
     82 
     83   // Three control units                                                                                                
     84   ALUControl alucnt (); 
     85   ControlUnit cntunit (.CK(CK), .CLR(CLR)); 
     86   GenPCL genpcload (PCwriteCond, PCWrite, ZeroFlag, PCload); 
     87endmodule 
     88}}} 
     89 
     90「GenPCL」は、ブロック図左上のPCWriteCondとPCwriteとZeroFlagから、PCをロードする信号を生成するモジュールです。 
     91それ以外のものは、入出力の信号名のみ記述します。 
     92{{{ 
     93module GenPCL(PCWriteCond, PCWrite, ZeroFlag, PCload); 
     94   input PCWriteCond, PCWrite, ZeroFlag; 
     95   output PCload; 
     96 
     97   assign PCload = (PCWriteCond && ZeroFlag) || PCWrite; 
     98endmodule 
     99}}} 
     100 
     101 
     102== テストベンチの例 == 
     103MIPSmulticycleモジュールのテストベンチの例は以下のようになります。 
     104{{{ 
     105`timescale 1ns/1ps 
     106 
     107`include "MIPSmulticycle.v" 
     108 
     109module MIPStestbench; 
     110   reg ck,clear; 
     111 
     112   MIPSmulticycle mips(ck,clear); 
     113 
     114   initial 
     115     begin 
     116 
     117        $dumpfile("MIPStestbench.vcd"); 
     118        $dumpvars(0, mips); 
     119 
     120        // memory initialization 
     121 
     122        // 
     123 
     124        #0 
     125        ck    = 1'b1; 
     126        clear = 1'b1; 
     127 
     128        #110 
     129        clear = 1'b0; 
     130 
     131        #90 
     132 
     133        #1000 
     134          // execute 10 cycles 
     135 
     136        $finish; 
     137     end 
     138 
     139   always #50 CK <= ~CK; 
     140endmodule 
     141}}} 
     142 
     143== エラーチェック == 
     144テストベンチを利用して、文法エラーがないかを確認すること。 
     145{{{ 
     146ncverilog MIPStestbench.v 
     147}}} 
     148 
     149プログラムの実行確認については次回におこないます。