FC2カウンター FPGAの部屋 Spartan3A Starter KitのDDR2 SDRAMコントローラの途中経過7(DQS0のみ使用)
FC2ブログ

FPGAやCPLDの話題やFPGA用のツールの話題などです。 マニアックです。 日記も書きます。

FPGAの部屋

FPGAの部屋の有用と思われるコンテンツのまとめサイトを作りました。Xilinx ISEの初心者の方には、FPGAリテラシーおよびチュートリアルのページをお勧めいたします。

Spartan3A Starter KitのDDR2 SDRAMコントローラの途中経過7(DQS0のみ使用)

”Spartan3A Starter KitのDDR2 SDRAMコントローラの途中経過6(DCMやBUFGの配置)”でDQやDQSの配置は終わったと思っていた。SD_LOOP_INの信号を使用して非同期FIFOにライトイネーブルを入れようと思うと、DQS0とDQS1の遅延の差が気になる。DQS0とDQS1の間には0.62nsの遅延差がある。遅延差があると、SD_LOOP_INは1つなので、どちらかにずれが出てきてしまいそうだ。と言うわけで、お間抜けで、せっかく確定したのではあるが、DQ8~DQ15のクロックをDQS1からDQS0に変更しようと思う。DQS1の入力は使用せずにライト時のクロック出力だけとする。

注:途中まで書いたのが消えてしまったのでもう一度書きますが、完全には文の一貫性が取れない場合があります。本当に悲しいです。ブログのオートセーブは新規投稿だけでした。

すべてのDQのクロックをDQS0に書き換えたところ、DQS0のクロック遅延が増えてしまった。3.597ns になってしまった。DQ0のセットアップ時間は1.592ns 。
Spa3A_DDR2_37_090403.png

これは、ddr2_cont_iob_inst/dqs_clk_node<0> が1.145ns から1.360ns になったためだ。Floorplan Editorで見てみると、下図のようになった。
Spa3A_DDR2_38_090403.png

BUFGの位置をなるべく近いほうがよいかと思って、いちばん上にして見たところ、その下よりも遅延が大きいようだ。やはり、位置では遅延は予測できないというのがよくわかった。
上のFloorplan Editor図を見るて、気がついたがddr2_cont_iob_inst/dqs_clk_node<0>のネットの遅延が違っている。よく見るとTiming Analyzerの遅延値はデータパスがMaximum値でクロックパスがMinimum値だった。これではDQ0のセットアップ時間は1.592nsは標準値ではさらに悪くなることが考えられる。これではだめなので、DQのIBUF_DELAY_VALUEを1にすることにした。IBUF_DELAY_VALUEを1にすると約1ns 程度遅延するので、少し遅延が大きすぎるきらいもあるので、BUFGまでネットの遅延が少し大きいBUFGを使用することにした。
いろいろやってみたが真ん中あたりのBUFGを使うとBUFGまでのネットの遅延が大きいようなので、上から4番目のBUFG (BUFGMUX) を使うことにした。これの状態でのDQ0のTiming Analyzerの解析結果は下図のようになった。
Spa3A_DDR2_39_090403.png

ddr2_cont_iob_inst/dqs_clk_node<0>ネットの遅延は1.436ns。
DQ0のセットアップ時間はクロックパス遅延3.675ns - データパス遅延2.962ns = 最小のセットアップ時間0.713ns となった。これより小さくなることはないので、これで大丈夫だろう。。。

さて次に、非同期FIFOのwr_en の設定を確認する。Timing Analyzerで確認したsd_loop_inのネットだが、本当にたくさんある。ちなみにsd_loop_outにリードのタイミング信号(CAS LATENCYだけ遅れた)を出力してDDR2 SDRAMのあたりまでいって戻ってきて、sd_loop_inに戻ってきた信号をリード・データの書き込みタイミングとして使おうという戦略だ。
Spa3A_DDR2_40_090403.png

これでは多すぎるので、とりあえずこのネットを減らすために、今まで、8ビット幅分散RAM使用非同期FIFO4個から、16ビット幅分散RAM使用非同期FIFO2個に変更した。パラメタライズド記述は望めないだろうから、なるべくロジックを減らそうとしてみた。これでインプリメントしてみたところ下図のFloorplan Editorに示すように、かなりロジックセルが減少した。ロジックセルは薄い紫で染められた部分。
Spa3A_DDR2_41_090403.png

以前の8ビット幅分散RAM使用非同期FIFO4個から比べるとだいぶロジックセルが減っている。下に以前のFloorplan Editorでみたロジックセルを示す。
Spa3A_DDR2_31_090330.png

これでよかったのだが、以前苦労してかけたIOパッド(IOB)から非同期FIFOまでのネットの遅延制約がインスタンスが変わってしまったので、エラーになってしまった。やり直し。。。面倒だ。。。面倒がっていても仕方がないので、Floorplannerでやり直した。
よし全部OK。
今度はSD_LOOP_INだが、セットアップ時間を1.5ns にした。これも制約をかけてクリアした。
Spa3A_DDR2_42_090403.png

次はこのIOBと非同期FIFOの部分だけでシミュレーションしてみることにする。
  1. 2009年04月04日 19:13 |
  2. その他のFPGAの話題
  3. | トラックバック:0
  4. | コメント:0

コメント

コメントの投稿


管理者にだけ表示を許可する

トラックバック URL
http://marsee101.blog.fc2.com/tb.php/1076-ab3d6c84
この記事にトラックバックする(FC2ブログユーザー)