FC2カウンター FPGAの部屋 Spartan-3A Starter KitでMIGを使用する6(MIGのインプリメント状況)
FC2ブログ

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

FPGAの部屋

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

Spartan-3A Starter KitでMIGを使用する6(MIGのインプリメント状況)

Spartan-3A Starter KitでMIGを使用する5(インプリメント)”でMIGをインプリメントしてみた。

MIGのインプリメント状況を見てみようと思った。PlanAheadの配置図を下に示す。
MIG_54_110516.png

cal_ctlというPblockが真ん中の上にある。他のスライスはIOに沿ってまばらに配置されているようだ。DCMもDCMを外したので、実装されていない。
FPGA Editorをクロスプローブ用に立ち上げて、見てみた。この時にうまくクロスプローブ出来なかった。やり方がおかしいのだろうか?
cntrl0_ddr2_dq[0]を見てみよう。
MIG_55_110516.png
(MIGのcntrl0_ddr2_dq[0]のIOB)

IOBの出力用FFは使用されている。DDRなので、IOBのDDRレジスタを使用する必要がある。IOのトライステート制御用のFFは片側だけ使用されている。これは4つ単位でデータを出力するので、そうなるのだと思う。入力FFはスルーされている。
下に、私の自作DDR2 SDRAMコントローラのIOBを示す。
MIG_56_110516.png
(自作DDR2 SDRAMコントローラのddr2_dq[0]のIOB)

IOのトライステート制御用のFFを2つ使用している。これは、ODDR2プリミティブをインスタンスしているからだ。(自作DDR2 SDRAMコントローラのVeilog HDLコードの一部)

    ODDR2 #(
        .DDR_ALIGNMENT("NONE"),
        .SRTYPE("ASYNC")
    ) ODDR2_TRI(
        .Q(tri_out),
        .C0(clk270),
        .C1(clk90),
        .CE(tri_ddr_ce_to_io),
        .D0(tri_ddr_d0_to_io),
        .D1(tri_ddr_d1_to_io),
        .R(1'b0),
        .S(reset)
    );
    
    ODDR2 #(
        .DDR_ALIGNMENT("NONE"),
        .SRTYPE("SYNC")
    ) ODDR2_DATA(
        .Q(to_io_pad),
        .C0(clk270),
        .C1(clk90),
        .CE(data_ddr_ce_to_io),
        .D0(data_ddr_d0_to_io),
        .D1(data_ddr_d1_to_io),
        .R(1'b0),
        .S(reset)
    );
    
    IOBUF IOBUF_DQ(
        .O(dq_data_from_io),
        .IO(io_pad),
        .I(to_io_pad),
        .T(tri_out)
    );



もう一度MIGの実装に戻る。
cntrl0_ddr2_dq[0]の出力(IOパッドの入力)は、fifo_0_data_out[0]とfifo_1_data_out[0]スライスに入力されている。2つのスライスを見てみるとSLICE MでデュアルポートのRAMとして設定されていた。どちらかがクロックの立ち上がりのデータをキャプチャして、どちらかは立ち下がりのデータをキャプチャするのだと思う。これは、自作DDR2 SDRAMコントローラと同じ構成のようだ。
MIG_57_110516.png
(MIGのcntrl0_ddr2_dq[0]と次段回路の接続状況)

FPGA Editorでこの配線の遅延値を測定してみた。

driver - comp.pin "cntrl0_ddr2_dq[0].I", site.pin "AA1.I"
0.464ns - comp.pin "main_00/top0/data_path0/data_read0/fifo_1_data_out[0].BY", site.pin "SLICE_X0Y3.BY"
0.464ns - comp.pin "main_00/top0/data_path0/data_read0/fifo_0_data_out[0].BY", site.pin "SLICE_X0Y2.BY"


0.464nsの低遅延配線を使用しているようだ。
自作DDR2 SDRAMコントローラでも、低遅延の配線を試行錯誤して見つけて使用している。下に接続状況を示す。なお、配線が多いので、他の配線は消してある
MIG_58_110516.png
(自作DDR2 SDRAMコントローラのddr_dq[0]と次段の接続状況)

ddr2_dq[0]からの出力は、MIGと同様にRAMに指定された2つのSLICE Mに接続されている。立ち下がりのデータキャプチャ用と立ち下がりのデータキャプチャ用だ。
FPGA Editorでこの配線の遅延値を測定した結果を下に示す。

driver - comp.pin "ddr2_dq<0>.I", site.pin "H1.I"
0.411ns - comp.pin "ddr2_sdram_cont_inst/read_write_io_inst/dout<16>.BY", site.pin "SLICE_X2Y63.BY"
0.411ns - comp.pin "ddr2_sdram_cont_inst/read_write_io_inst/dout<0>.BY", site.pin "SLICE_X2Y62.BY"


MIGも自作DDR2 SDRAMコントローラもDDR2 SDRAMのデータの受け方は同じ方法を取っているのがわかった。ただし、Readのタイミングをどのように判断しているかの解析はしていない。

MIGのインプリメントを見るのはこの辺で終了とする。次はシミュレーションしてみたい。

  1. 2011年05月16日 05:41 |
  2. MIG
  3. | トラックバック:0
  4. | コメント:0

コメント

コメントの投稿


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

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