2010年12月5日日曜日

DDR2 SDRAM CONTROLLERのDEBUG 3


非同期FIFOのMemoryは論理記述していて、XSTにDual PortのBlockRAMに推論させている。これは狙いどおりに推論されていて、Operation ModeもWrite Firstになっているのだが、Block RAMだとあの現象が出てしまうようだ。Block RAMではなく分散RAMを推論するように変えたところ期待通りの画が表示されるようになった。
うーん何か釈然としない。




まだ直したい箇所はあるけれども、
とりあえず、バンザーイ  \(^_^)/

5 件のコメント:

  1. おめでとうございます。

    Readの方式は以前書かれていたのDCM位相シフト方式ですか?動作周波数は何MHzですか?
    分散RAMとBRAMの違いは、出力データがそのクロック出るか、1クロック遅くなるかの違いだと思うのですが、その辺に原因がないでしょうか?

    返信削除
  2. marseeさん、こんにちは
    ありがとうございます。

    > Readの方式は以前書かれていたのDCM位相シフト方式ですか?動作周波数は何MHzですか?

    周波数は133MHzです。
    Readはその方式ですがPLLのフィードバックパスはLOOP_IN/OUTを使うとエラーになるのでLOOP_IN, LOOP_OUTを使わずFPGA内部で回すようにしました。その為、リードデータのキャプチャクロックに対するデータの位相(遅延)は、ライトデータの出力遅延(4.392ns)とリードデータの入力遅延(1.662ns)が加算された値+α(PWBの配線遅延やSDRAMの出力遅延)となるため、DCMの位相の設定値は0で動作出来てしまっています。

    > 分散RAMとBRAMの違いは、出力データがそのクロック出るか、1クロック遅くなるかの違いだと思うのですが、その辺に原因がないでしょうか?

    BRAMの仕様を勘違いしていたようです。
    事前にBRAM内部のアドレスレジスタに値をセットしておいて、そのアドレスにライトされた時点でデータがリード側に出力される(つまりリードレイテンシー0)ことを期待していたのですが、BRAMはリードとライトを別クロックで使う場合は、必ずリードレイテンシーは1になるようです。BRAMのライブラリ(XilinxCoreLibディレクトリのBLK_MEM_GEN_V4_1.v)を見るとC_COMMON_CLKを1にすると私が期待している動作になるみたいですが、coregenの生成画面ではそのオプションはBehavior simulation用(?)のようで、実機では違う動きになりそうな感じです。 まぁ、それに非同期FIFOのMemory部は36bitx32 = 1152bitなので、その為に16KbitのBRAMを消費するのも勿体ない気がしてきましたので分散RAMにしようと思います。

    返信削除
  3. 教えていただいてありがとうございました。
    100MHz以上でも位相シフトでReadデータがキャプチャできるんですね?アプリケーションノートを読んで無理だと思い込んでいました。

    もう1つ質問させてもらってもよいでしょうか?
    DCMの属性のCLKOUT_PHASE_SHIFTは、NONEですか?それともFIXED?、VARIABLE?でしょうか?お手数ですが、よろしくお願いします。

    返信削除
  4. 返信おそくなりました。すみません。

    Read側ですよね?
    VARIABLEにしています。

    返信削除
  5. 教えていただいて、ありがとうございました。
    やはり、それでもReadデータが位相シフトで受かるんですね。勉強になりました。

    返信削除

自作CPUで遊ぶ 22

今使用しているモータードライバはDM556Dというものだが、このドライバはMicro Stepが 800 [pulse/rev] 〜 40000 [pulse/rev]の範囲で設定できる。 Mi...