4.3 設計モジュール
4.3.1 メモリコントローラ (SRAM,DRAM)
行列計算などにおいて、多くのデータを扱うにはメモリが必要である。昨年はSRAM をメモリコントローラとして、データの記憶が可能になった。そして、本研究ではそ のメモリコントローラにDRAMも追加し、さらに大容量のデータを記憶できるよう にした。つまり、SRAMおよびDRAMを使用するためのメモリコントローラを設計 した。
このコントローラのentityの構成を表4.2に、制御信号の構成を表4.3に、VHDLソー スを付録1に示す。
信号名 用途 対象 方向 型
CLK クロック 共通 in stdlogic
RESET リセット 共通 in stdlogic
ADRS アドレスバス 共通 out stdlogicvector(16downto0)
SRAMADRSBUF アドレスレジスタ SRAM in stdlogicvector(16downto0)
ROWADRSBUF 行アドレスレジスタ DRAM in stdlogicvector(11downto0)
COLADRSBUF 列アドレスレジスタ DRAM in stdlogicvector(11downto0)
DATA データバス 共通 inout stdlogicvector(31downto0)
WRDATA 書き込みデータ 共通 in stdlogicvector(31downto0)
RDDATA 読み込みデータ 共通 out stdlogicvector(31downto0)
SCS チップセレクト SRAM out stdlogicvector(3downto0)
SOE アウトプットイネーブル SRAM out stdlogic
SWE ライトイネーブル SRAM out stdlogic
DWE ライトイネーブル DRAM out stdlogic
DRAS 行アドレス指定 DRAM out stdlogicvector(3downto0)
DCAS ライトイネーブル DRAM out stdlogicvector(3downto0)
MEMSTATESEL 動作選択 共通 in stdlogicvector(2downto0)
WRCYCLE ライト終了 共通 out stdlogic
RDCYCLE リード終了 共通 out stdlogic
RFCYCLE リフレッシュ終了 DRAM out stdlogic
表4.2: entityの構成
信号名 用途 ステート数
SWRITECYCLE SRAM書き込みサイクル 3
SREADCYCLE SRAM読み込みサイクル 3
CONTREADCYCLE SRAM連続読み込みサイクル 1
DWRITECYCLE DRAM書き込みサイクル 6
DREADCYCLE DRAM読み込みサイクル 6
DREFCYCLE DRAMリフレッシュサイクル 6
DRDWRCYCLE キャッシュ書き込みサイクル 10
表4.3: 制御信号
このentityは昨年設計されたSRAMコントローラに、DRAMの入出力に関わる部
分を追加した。そして制御信号はDRAMに関するサイクルを4つ追加した。VHDL ソースはステートマシン、ステート制御、アドレス指定の3つのprocessから構成さ れている。そして、ステートマシンによりシステムクロックに同期して動作するよう になっている。
このコントローラのステートは表4.3より、以上のようなステート数で構成されて
いる。CONT READ CYCLEは1クロックごとにアドレスを与え、そのたびにDATA
をSRAMから読み込んでいる。そして、キャッシュ書き込みサイクルはDRAMの読 み込みサイクルとSRAMの書き込みサイクルを連続して行なっており、DRAMから 読み込んだデータはFPGAのレジスタに一時的に格納し、SRAMへ書き込まれる。
図4.5に各サイクルのタイミングを示す。
SCS
STOP ADDRESS
CLK
DATA SWE
S_WRITE1 S_WRITE2
SCS
STOP ADDRESS
CLK
DATA SOE
S_READ1 S_READ2
a. 書き込みサイクル(SRAM) b. 読み込みサイクル(SRAM)
SCS
CONT_READ SOE
DATA CLK
ADDRESS ADRS 1 ADRS 2
DATA 2 DATA 1
c. 連続読み込みサイクル(SRAM)
ADDRESS CLK
STOP DWE
DRAS
DCAS
DATA
ROW COLUMN
D_WRITE1 D_WRITE2 D_WRITE3 D_WRITE4 D_WRITE5
d. 書き込みサイクル(DRAM)
ADDRESS CLK
STOP DWE
DRAS
DCAS
DATA
ROW COLUMN
D_READ1 D_READ2 D_READ3 D_READ4 D_READ5
e. 読み込みサイクル(DRAM)
CLK
DRAS
DCAS
STOP REFRESH1 REFRESH2 REFRESH3 REFRESH4 REFRESH5
f. リフレッシュサイクル(DRAM) 図4.5: 各サイクルのタイミング(2)5 以下に各サイクルのステート毎の動作について説明する。
a. 書き込みサイクル(SRAM)
ステートS WRITE1でSCSを立ち下げてアドレスを指定し、ステートS WRITE2
でSWE を立ち下げて、SRAMにデータを書き込む。
b. 読み込みサイクル(SRAM)
ステートS READ1でSCSを立ち下げてアドレスを指定し、ステートS READ2
でSOEを立ち下げ、SRAMからデータを読み込む。
c. 連続読み込みサイクル(SRAM)
この場合はステートは1つCONT READのみ。アドレスを別の番地に変える ことでデータも連続的に読み込む。
d. 書き込みサイクル(DRAM)
ステートD WRITE1のクロックの立ち下がりで行アドレスを指定する。そして、
ステートD WRITE2のクロックの立ち上がりでRASを立ち下げて行アドレス
を指定する。このステートの立ち下がりでは列アドレスを指定し、書き込み許 可を与えるためにWEを立ち下げる。次のステートD WRITE3ではCASを 立ち下げる。て列アドレスを指定する。DRAMへデータを書き込んだ後は、ス
テートD WRITE4でR ASを立ち上げ、クロックの立ち下がりでWEを立ち
上げる。、そして、ステートD WRITE5でCAS を立ち上げる。
e. 読み込みサイクル(DRAM)
RAS およびCASのステート動作に関しては、上のD WRITEをD READに
5ファイル名: a:./g/write.eps,b:./g/read.eps,c:./g/contread.eps, d:./g/Dwrite.eps,e:./g/Dread.eps, f:./g/Drefresh.eps
置き換えれば良い。WEは立ち上げたままにする。データはステートD READ4 の時にDRAMからFPGAのレジスタへ読み込ませる。
f. リフレッシュサイクル
ステートREFRESH2でCASを立ち下げ、REFRESH3でR ASを立ち下げる。
これによりリフレッシュで行なわれる。各信号の立ち上げはCASがREFRESH4
で、R ASがREFRESH5のときに行なう。
また、リフレッシュサイクルについては、CASビフォアR ASリフレッシュを使用 している。そのため、ADDRESSには何もデータを入力する必要がなく、RASとCAS だけを動作させればよい。このリフレッシュサイクルを15.6s毎にDRAMに与える ように設計する。例えば、システムクロックが4MHzのときは64クロック毎に、2MHz のときは32クロック毎、10MHzのときは156クロック毎にリフレッシュできるよう にする。