Changes between Version 4 and Version 5 of Ex06課題2015


Ignore:
Timestamp:
May 18, 2015 10:31:10 AM (11 years ago)
Author:
nakasato
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • Ex06課題2015

    v4 v5  
    11トップ:http://galaxy.u-aizu.ac.jp/note/wiki/CAEX2015 
    22 
    3 = メモリとレジスタ =  
     3= レジスタファイルについて =  
     4 
     5MIPSプロセッサにおいて、プログラマから見える汎用レジスタには $0 から $31 までの32個があります。 
     6このうち $0 は値が常にゼロである仮想的なレジスタなので、実際のハードウェアでは31個のレジスタからなるレジスタファイルが使われます。 
     7各レジスタの入出力データのビット幅は32ビットです。 
     8 
     9レジスタファイルに対する書き込み口や読み出し口のことをポートと呼びます。 
     10今回利用するレジスタファイルは2つの読み出しポートと1つの書き込みポートを備えています。 
     11このことは、2つの異なるレジスタの読み出しと、さらに異なる1つのレジスタへの書き込みを、 
     121つのクロックサイクルの中で同時に行えるということを意味します。 
     13 
     14== レジスタファイルの記述例:Registers.v == 
     15{{{ 
     16module Registers(ReadRegster1, ReadRegster2, WriteData, RegWrite, WriteRegster, CK, CLR, ReadData1, ReadData2); 
     17 
     18input[4:0]      ReadRegster1, ReadRegster2, WriteRegster; 
     19input[31:0]     WriteData; 
     20input           RegWrite, CK, CLR; 
     21output[31:0]    ReadData1, ReadData2; 
     22 
     23reg[31:0]       regfile[1:31]; 
     24integer i; 
     25 
     26always  @(posedge CK) begin 
     27      if (CLR == 1'b1) 
     28            for( i = 1; i < 31; i = i + 1) 
     29                  regfile[i] <= 32'h00000000; 
     30      else if ( RegWrite == 1'b1 && WriteRegster != 5'b00000) 
     31                  regfile[WriteRegster] <= WriteData; 
     32      end 
     33  
     34 
     35assign #5 ReadData1 = (ReadRegster1 == 5'b00000) ? 32'h00000000 : regfile[ReadRegster1]; 
     36assign #5 ReadData2 = (ReadRegster2 == 5'b00000) ? 32'h00000000 : regfile[ReadRegster2]; 
     37 
     38endmodule 
     39}}} 
     40 
     41=== 入出力信号の説明 === 
     42* ReadRegster1 と ReadData1 は1つ目の読み出しポートのための信号です。ReadRegster1 にレジスタ番号を (0~31) を入力すると該当するレジスタの値が ReadData1 から出力されます(レジスタ番号が 0 のときは常に 0 が出力される)。 
     43* ReadRegster2 と ReadData2 は2つ目の読み出しポートのための信号です。動作は1つ目の読み出しポートと同じです。 
     44* WriteData, RegWrite, および WriteRegster は書き込みポートを形成します。WriteRegster にレジスタ番号を入力し、WriteDataには書き込むデータをセットして、RegWrite を 1 にすると、次のクロックの立ち上がりでデータが該当レジスタに書き込まれます。WriteEN が 0 のときは、クロックの立ち上がりがあってもデータは書き込まれません。また、レジスタ番号が 0 のときは、レジスタへの書き込みは行われません。 
     45* CK はクロック信号、CLR はクリア信号です。 CLR が 1 になると全てのレジスタが 0 に初期化されます。 
     46 
     47 
     48= メモリについて =  
     49 
     50 
    451 
    552