Changes between Version 11 and Version 12 of Ex04_CA_2020


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

--

Legend:

Unmodified
Added
Removed
Modified
  • Ex04_CA_2020

    v11 v12  
    3838 
    3939= 補足 =  
    40 補足1 [wiki:"Ex04_CA_S1_2020"] 
     40補足1: xc4000のライブラリを利用して出力がzになる場合の対処 [wiki:"Ex04_CA_S1_2020"] 
    4141 
    42 補足2 [wiki:"Ex04_CA_S2_2020"] 
     42補足2: レジスタファイルについて [wiki:"Ex04_CA_S2_2020"] 
    4343 
    44  
    45 = 補足1: xc4000のライブラリを利用して出力がzになる場合の対処 =  
    46 Run Directoryを作り直してください。そのためには、シミュレータのウィンドウに表示されているRun Directoryの末尾を、run1, run2などの存在しないものに変更し、Initialize Designボタンを2度押してください。その後出てくるダイアログには"No"を選んでください。 
    47  
    48 = 補足2: レジスタファイルについて補足 =  
    49 MIPSプロセッサにおいて、プログラマから見える汎用レジスタには $0 から $31 までの32個があります。 
    50 このうち $0 は値が常にゼロである仮想的なレジスタなので、実際のハードウェアでは31個のレジスタからなるレジスタファイルが使われます。 
    51 各レジスタの入出力データのビット幅は32ビットです。 
    52  
    53 レジスタファイルに対する書き込み口や読み出し口のことをポートと呼びます。 
    54 今回利用するレジスタファイルは2つの読み出しポートと1つの書き込みポートを備えています。 
    55 このことは、2つの異なるレジスタの読み出しと、さらに異なる1つのレジスタへの書き込みを、 
    56 1つのクロックサイクルの中で同時に行えるということを意味します。 
    57  
    58 [[Image(http://web-int.u-aizu.ac.jp/course/comparch/kadai2_1.gif)]] 
    59  
    60 === 入出力信号の説明 === 
    61 * ReadReg1 と ReadData1 は1つ目の読み出しポートのための信号です。ReadReg1 にレジスタ番号を (0~31) を入力すると該当するレジスタの値が ReadData1 から出力されます(レジスタ番号が 0 のときは常に 0 が出力される)。 
    62 * ReadReg2 と ReadData2 は2つ目の読み出しポートのための信号です。動作は1つ目の読み出しポートと同じです。 
    63 * !WriteData、!WriteEn、および!WriteRegは書き込みポートを構成します。WriteRegにレジスタ番号を入力し、WriteDataには書き込むデータをセットして、!WriteEn を 1 にすると、次のクロックの立ち上がりでデータが該当レジスタに書き込まれます。!WriteEN が 0 のときは、クロックの立ち上がりがあってもデータは書き込まれません。また、レジスタ番号が 0 のときは、レジスタへの書き込みは行われません。 
    64 * CK はクロック信号、CLR はクリア信号です。 CLR が 1 になると全てのレジスタが 0 に初期化されます。 
    65  
    66 = レジスタの利用のためのテストベンチ例 = 
    67 以下のテストベンチは、$a0レジスタに"0xffffffff"を書き込んでいる。(そのまま使うことはできない) 
    68 {{{ 
    69 `timescale 1ns/1ps 
    70 `include "Registers.v" 
    71  
    72 module  RegTest; 
    73    reg [4:0]  readreg1,  readreg2,  writereg; 
    74    reg [31:0] writedata; 
    75    reg        writeen; 
    76    reg        ck,clr; 
    77    wire [31:0] readdata1, readdata2; 
    78  
    79    initial 
    80      begin 
    81         #0 
    82         ck = 1'b1; 
    83         clr = 1'b1; 
    84  
    85         #110 
    86         clr = 1'b0; 
    87  
    88         #190 
    89         readreg1 = 5'b00100; 
    90  
    91         #100 
    92         writeen = 1'b1; 
    93         writereg  = 5'b00100; 
    94         writedata = 32'hffffffff; 
    95   
    96         #100 
    97         writeen = 1'b0; 
    98   
    99         #900 
    100  
    101         $finish; 
    102      end // initial begin 
    103  
    104    always #50 ck = ~ck; 
    105 endmodule 
    106 }}} 
    107  
    108