FC2ブログ

[NEEK]DDRコントローラでREAD時ALTDDIO_IN使用

NEEK(Cyclone III)でDDRコントローラを自作する場合、WRITE時のDQ Rise/Fall出力と、
READ時のDQ Rise/Fall受けをどうするかを検討中。

MegaWizardで探すと、ALTDDIO_INとALTDDIO_OUTを使うべきと判断。

WRITEコマンドでは、DDRコントローラのクロックを使用するので、クロックは連続して動いてる。
問題はクロックにDDR SDRAMメモリから来るDQSを使うREAD時。

DDR SDRAMメモリからは、必要分のDQS信号しか送って来ない。
その上、ALTDDIO_INの動きを見ると、
  データH側= DQS Riseでラッチし、そのまま出力。
  データL側= DQS Fallで一時受け。それを次のDQS Riseで出力。
こうなってた。

これ、データHは良いのだが、データLは、一連のREAD動作の最後に来たデータ
(最後のDQS =Lの時のDQの事)は、次のDQS RiseでやっとALTDDIO_INから出力される。
しかし、DDR SDRAMメモリから次のDQS Riseは来ない。なぜなら必要分のDQSしか来ないから。
次のDQS Riseが来るのは、次の無関係なWRITE or READコマンドで動くDQS Riseの時。

これ使えないのでは?
と思ってたら、invert_input_clocksというパラメータに着目。(上記の動きはOFFの時)
これをONしたら、
  データH側= DQS Fallでラッチし、そのまま出力。
  データL側= DQS Riseで一時受け。それを次のDQS Fallで出力。
となった。
データHとLが逆になるが、これで最後のDQS Fallの時に、データHもデータLも
ALTDDIO_INから出力されるようになった。

DDR SDRAMメモリから来るDQSを使ってラッチする場合、ALTDDIO_INのinvert_input_clocks=ON
は必須だと理解したが、どうなんだろ?

XilinxのIDDRはすんなり使えたのだが、アルテラでははまってしまった。
スポンサーサイト



カレンダー
09 | 2014/10 | 11
- - - 1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31 -
累積訪問者
現在の訪問者
現在の閲覧者数:
最新記事
最新トラックバック
最新コメント
月別アーカイブ
カテゴリ
プロフィール

bobgosso

Author:bobgosso
FPGAのブログへようこそ!

検索フォーム
RSSリンクの表示
リンク
ブロとも申請フォーム

この人とブロともになる

QRコード
QRコード