”
Spartan3A Starter KitのDDR2 SDRAMコントローラのバーストテストのデバック”でsd_loop_inを前に1クロック前に伸ばすという結論になった。sd_loop_inを前に1クロック前に伸ばすには、sd_loop_outを1クロック前に伸ばす必要がある。(結局、sd_loop_outのタイミングはそのままとしました)
その前に、そういえばsd_loop_outのケアを忘れていたことに気がついた。はたしてsd_loop_outはどのようにインプリメントされているの調べるということでFPGA Editorを立ち上げて調べてみた。
sd_loop_outのIOBをのぞいてみたところが下の図。

IOBのフリップフロップ(FF)を使用していない。これはまずい。最初にIOBのFFを使うようにVerilog ソースを変更し、もう一度データを取る必要がある。この状態ではsd_loop_outが遅れてREADの時の最初のデータを取れていない可能性がある。UCFも調べてみたらsd_loop_outの制約もなかった。早速、sd_loop_outの最終のフリップフロップ(FF)をIOBに入れることにした。具体的には下のようにVerilogファイルを変更した。(一部です)
(* IOB = "FORCE" *)output reg sd_loop_out; // DDR2の遅延をキャンセルするための出力パッド
always @ (posedge clk) begin
if (reset)
sd_loop_out = 1'b0;
else begin
sd_loop_out = read_timing_1b;
end
end
一番上の行は宣言文だが(* IOB ="FORCE" *)制約を付けている。今回、制約ガイドを見て初めて知ったのだが、こうするとsd_loop_outがIOBに入らないとエラーが出るそうだ。
これでインプリメントしたところに下に示すようにIOBにFFが入った。

これでコンフィグしてやってみたところ、ChipScopeでの波形もOKだった。波形は下。信号名が表示されていないが、前回と一緒で、その下にread_error信号が追加されている。

前回のシミュレーション波形と比べてみる。

シミュレーションと波形が一致した。
この前、シミュレーションでマージンがないという話をしたが、それはTiming Analyzerで
性的 静的に解析したタイミング情報を論理シミュレーションに反映していないためだった。実際はReadデータとDQSのクロックはFPGA内部では1.5nsの差がある。同位相できたReadデータとDQSクロックは、DQSクロックのほうが約1.5ns程度、FPGA内部で遅れるようにタイミングを組み上げている。よってsd_loop_outから出たReadのタイミング信号はsd_loop_inから入って、ReadのEnableとして使えば、Readのデータが読めるはずだ。そのためにsd_loop_inにはMAXDEALY制約とMAXSKEW制約をかけてある。
ずーとバーストテストをしながらSparatan3A Starter Kitを放置していたが、エラーは出ていないようだ。
ChipScopeで見ても、正常にテストを行っている。

1時間バーストテストを行ったが結局エラーは出なかった。これでSpartan3A Starter KitのDDR2-300 SDRAMコントローラは完成とする!!!
うれしいです!!!みなさん、拍手などでのご声援ありがとうございました。
思えばいろいろな苦労があった。自分で非同期FIFOも作ることになったし、Readデータを受ける初段に分散RAMを使用したので、フロアプランに苦労した。でも、だいぶ勉強になった気がする。
Spartan3A Starter KitのDDR2-300 SDRAMコントローラ、誰か欲しいでしょうか? Verilog ソースとUCFにノウハウが詰まっているので、Verilogをそのまま他の基板に移植しただけでは、まず動かないと思います。Spartan3A Starter Kitの下の写真のような等長配線があって初めて実現できたとも言えます。

インプリメント結果ですが、ChipScopeを入れると、少しですがタイミングエラーが出ていますが、動作には問題ないようです。

ChipScopeを入れないとタイミングエラーは出ません。どっちにしろタイミングはきついところみたいです。やりませんけど、IPとして配布する場合には相対配置制約をかけたほうがいいかもしれません。
- 2009年06月19日 04:52 |
- Spartan3A Starter Kit
-
| トラックバック:0
-
| コメント:2
こんばんわ。おめでとうごさいまーす!
と、ところで
>Timing Analyzerで「性的」に解析したタイミング情報・・・
わーお、どんな解析方法だろう^^)。
- 2009/06/20(土) 00:28:37 |
- URL |
- くり #mQop/nM.
- [ 編集 ]
くりさん、こんにちは。ありがとうございます。うれしいです。
どひゃー。静的を性的と間違っちゃいました。修正しました。
しかし、だれもDDR2 SDRAMコントローラのソースを欲しいと言ってくれないので、さびしいです。。。
- 2009/06/20(土) 04:54:46 |
- URL |
- marsee #f1oWVgn2
- [ 編集 ]