Changes between Version 6 and Version 7 of Ex06課題2015


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

--

Legend:

Unmodified
Added
Removed
Modified
  • Ex06課題2015

    v6 v7  
    4242* ReadRegster1 と ReadData1 は1つ目の読み出しポートのための信号です。ReadRegster1 にレジスタ番号を (0~31) を入力すると該当するレジスタの値が ReadData1 から出力されます(レジスタ番号が 0 のときは常に 0 が出力される)。 
    4343* ReadRegster2 と ReadData2 は2つ目の読み出しポートのための信号です。動作は1つ目の読み出しポートと同じです。 
    44 * WriteData、RegWrite、およびWriteRegsterは書き込みポートを形成します。WriteRegster にレジスタ番号を入力し、WriteDataには書き込むデータをセットして、RegWrite を 1 にすると、次のクロックの立ち上がりでデータが該当レジスタに書き込まれます。WriteEN が 0 のときは、クロックの立ち上がりがあってもデータは書き込まれません。また、レジスタ番号が 0 のときは、レジスタへの書き込みは行われません。 
     44* WriteData、RegWrite、およびWriteRegsterは書き込みポートを形成します。WriteRegsterにレジスタ番号を入力し、WriteDataには書き込むデータをセットして、RegWrite を 1 にすると、次のクロックの立ち上がりでデータが該当レジスタに書き込まれます。WriteEN が 0 のときは、クロックの立ち上がりがあってもデータは書き込まれません。また、レジスタ番号が 0 のときは、レジスタへの書き込みは行われません。 
    4545* CK はクロック信号、CLR はクリア信号です。 CLR が 1 になると全てのレジスタが 0 に初期化されます。 
    4646 
    4747 
    4848= メモリについて =  
    49  
    50  
    51  
     49メモリ(Memory.v)は、データを格納しておくために利用し、読み出しおよび書き込みの両方ができるメモリです。 
     50 
     51{{{ 
     52module Memory(Address, WriteData, ReadData, MemWrite, MemRead, CK); 
     53 
     54input[31:0]     Address, WriteData; 
     55input           MemWrite, MemRead, CK; 
     56output[31:0]    ReadData; 
     57 
     58always @(posedge CK) 
     59 begin  
     60   if (( MemWrite == 1'b1 ) && (32'h00000000 <= Address) && ( Address <= 32'h0000ffff) ) 
     61     begin 
     62       Mem.cell[Address] = WriteData; 
     63     end 
     64 end 
     65 
     66assign #5 ReadData = (MemRead == 1'b1) && (32'h00000000 <= Address) && ( Address <= 32'h0000ffff) ? Mem.cell[Address] : 32'bx; 
     67 
     68endmodule 
     69 
     70 
     71module Mem (); 
     72  reg [31:0]  cell [0:65535]; 
     73endmodule 
     74}}} 
     75 
     76=== メモリMemoryの入出力信号の説明 ===  
     77* 制御入力Memwriteが1のときデータの書き込みが、MemReadが1のときデータの読み込みが行われます。 
     78* データを書き込むときは、Memwriteを1にすると、次のクロックの立ち上がりで、アドレスAddressにデータWriteDataが書き込まれます。アドレスは32'h00000000から32'h0000ffffが 有効です。これ以外の範囲の場合は書き込みは行われません。 
     79* データを読み出すときは、MemReadを1にすると、ReadDataにそのアドレスに格納されたデータが出力されます。有効なアドレスは、書き込みの場合と同じです。 
     80 
     81== メモリ初期化について == 
     82メモリの初期設定はテストベンチ記述で行います。 
     83今後の演習ではメモリの初期化は、xspimが出力するテストベンチ用のVerilogHDL記述を利用します。  
     84 
     85xspimのdumpコマンドを用いて出力されるVerilogHDL記述は以下のような形式になっています。 
     86{{{ 
     87// text segment         
     88Mem.cell['h00000000] = 32'h08000400; // j 0x1000       
     89Mem.cell['h00001000] = 32'h********;      以下プログラムに対するコードが続く  
     90     ...      
     91         
     92// data segment         
     93Mem.cell['h00005000] = 32'h********;        以下データに対するコードが続く  
     94     ...     
     95}}}  
     96 
     97この記述をテストベンチにコピーして、プログラムおよびデータ領域の初期化を行います。 
     98{{{ 
     99Mem.cell['h00000000] = 32'h08000400; 
     100}}} 
     101という記述で、テストベンチからモジュールMemのレジスタcellに 直接アクセスしています。 
    52102 
    53103= 課題1 レジスタの利用方法 =