[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はすんなり使えたのだが、アルテラでははまってしまった。
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はすんなり使えたのだが、アルテラでははまってしまった。
スポンサーサイト