2010年12月19日日曜日

高速版DDR2 SDRAM CONTROLLER

以前のDRAMCは133MHz駆動がやっとという状態だったが、これはSpartan3Aの限界ではなく自分の設計能力の問題だと思う。DRAMCのdebugも落ち着いてきた頃、dvi_encのTMDS serdesの部分は325MHzで動作できており、DRAMCもdvi_encの方式のようにすればもっと高速に動作するものが作れるのではないかという考えが、ふと、浮かんできた。そこで、260MHzで動作するDRAMCの作成に挑戦してみることにした。
深く考えてなくて、思いつきだけで進めているので最終的に失敗する可能性もあるのだが。。
今回作成する高速版のDRAMCは←のような構造にしようと考えている。(冒頭で260MHzと書いたがDCMのCLKINの上限が250MHzの為250MHzに変更している。ただし前段のDCMで50MHzを100MHzに逓倍し後段で100MHzを260MHzにという具合にして260MHzを生成する手段はあると思う。)


以前のDRAMCはCMD QUEUE, WDT QUEUEが境界でそこでclockの載替えを行っていたが今回はPHYの入り口で載替えを行う。tRPやtRFC等のtimingはBC, CPがbf_clk基準で生成・管理する。
133MHz版のDRAMCはBC, CPは133MHz domainに属していたので合成でtimingをmetさせるのに大変だったが、今回は62.5MHzとなるので前回よりはmetしやすくなるだろう。また、他にも利点がある。それはtRP, tRRD, tWTR、…といった時間制約が62.5MHzの1周期以下なので旧版の様にstate machineの遷移を抑止するflagやtimer counterが不要になるという点だ。そのため、BC、CPの構造が旧版に比べて単純化できた。
PHYも構造は単純だ。←はPHY_CPのRTLだ。AsyncFIFOが非emptyになったらreadしてdataをcmd F/Fに転送する。AsyncFIFOがemptyの場合はNOP_CMDをcmd F/Fに転送する。NOP_CMDはCS=L, CKE=L, RAS=H, CAS=H, WE=Hの状態だ。

PHYのdata pathの部分もCP程ではないにしてもやはり構造は単純だ。RTLだと行数が多いの構造図を示す。←はwrite系だ。
ODTはDQの2 clock前に出さなければならないため、pipelineを2段入れてDQ, DM, DQSの方を遅らせている。

















←はread系だ。



















単発のwriteのsimulation結果
今回、DDR2 SDRAMは8burstに設定する。

※. じつは、このaccessは下の連続writeの次のaccessでDRAMのpageは既にopen状態のため、ACTIVE commandは発行されていない。旧版もそうだが設計しているDRAMCはopen policyで作っており一度row pageをopen (activeにする)と、異なるrow addressへのaccess要求かrefresh要求または上位(multiport i/f)からのclose要求が発生するまではopen状態を維持する。上位からのclose要求とは最終data時にmulti port i/fがmp2dc_lstを1にしてCMD QUEUEに書き込んだ場合で、その場合はprecharge付きreadまたはwriteがDDR2 SDRAMに対して発行される。

←は連続writeのsimulation結果

0 件のコメント:

コメントを投稿

自作CPUで遊ぶ 25

まだ制御ソフトが完成していないので今まではスピンドルを移動するために一々簡単なプログラムを書いて移動させていたのだが、非常に面倒なのでCNCペンダント的なものを作ることにした。 右側の縦に2つ並んでいるスイッチ...