Changes between Initial Version and Version 1 of Ex04_CA_S2_2020


Ignore:
Timestamp:
May 11, 2020 5:05:33 PM (6 years ago)
Author:
nakasato
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • Ex04_CA_S2_2020

    v1 v1  
     1= 補足2: レジスタファイルについて補足 =  
     2MIPSプロセッサにおいて、プログラマから見える汎用レジスタには $0 から $31 までの32個があります。 
     3このうち $0 は値が常にゼロである仮想的なレジスタなので、実際のハードウェアでは31個のレジスタからなるレジスタファイルが使われます。 
     4各レジスタの入出力データのビット幅は32ビットです。 
     5 
     6レジスタファイルに対する書き込み口や読み出し口のことをポートと呼びます。 
     7今回利用するレジスタファイルは2つの読み出しポートと1つの書き込みポートを備えています。 
     8このことは、2つの異なるレジスタの読み出しと、さらに異なる1つのレジスタへの書き込みを、 
     91つのクロックサイクルの中で同時に行えるということを意味します。 
     10 
     11[[Image(http://web-int.u-aizu.ac.jp/course/comparch/kadai2_1.gif)]] 
     12 
     13=== 入出力信号の説明 === 
     14* ReadReg1 と ReadData1 は1つ目の読み出しポートのための信号です。ReadReg1 にレジスタ番号を (0~31) を入力すると該当するレジスタの値が ReadData1 から出力されます(レジスタ番号が 0 のときは常に 0 が出力される)。 
     15* ReadReg2 と ReadData2 は2つ目の読み出しポートのための信号です。動作は1つ目の読み出しポートと同じです。 
     16* !WriteData、!WriteEn、および!WriteRegは書き込みポートを構成します。WriteRegにレジスタ番号を入力し、WriteDataには書き込むデータをセットして、!WriteEn を 1 にすると、次のクロックの立ち上がりでデータが該当レジスタに書き込まれます。!WriteEN が 0 のときは、クロックの立ち上がりがあってもデータは書き込まれません。また、レジスタ番号が 0 のときは、レジスタへの書き込みは行われません。 
     17* CK はクロック信号、CLR はクリア信号です。 CLR が 1 になると全てのレジスタが 0 に初期化されます。 
     18 
     19= レジスタの利用のためのテストベンチ例 = 
     20以下のテストベンチは、$a0レジスタに"0xffffffff"を書き込んでいる。(そのまま使うことはできない) 
     21{{{ 
     22`timescale 1ns/1ps 
     23`include "Registers.v" 
     24 
     25module  RegTest; 
     26   reg [4:0]  readreg1,  readreg2,  writereg; 
     27   reg [31:0] writedata; 
     28   reg        writeen; 
     29   reg        ck,clr; 
     30   wire [31:0] readdata1, readdata2; 
     31 
     32   initial 
     33     begin 
     34        #0 
     35        ck = 1'b1; 
     36        clr = 1'b1; 
     37 
     38        #110 
     39        clr = 1'b0; 
     40 
     41        #190 
     42        readreg1 = 5'b00100; 
     43 
     44        #100 
     45        writeen = 1'b1; 
     46        writereg  = 5'b00100; 
     47        writedata = 32'hffffffff; 
     48  
     49        #100 
     50        writeen = 1'b0; 
     51  
     52        #900 
     53 
     54        $finish; 
     55     end // initial begin 
     56 
     57   always #50 ck = ~ck; 
     58endmodule 
     59}}} 
     60 
     61