FC2カウンター FPGAの部屋 Spartan3A Starter KitのDDR2 SDRAMコントローラの途中経過1
fc2ブログ

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

FPGAの部屋

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

Spartan3A Starter KitのDDR2 SDRAMコントローラの途中経過1

Spartan3A Starter KitのDDR2 SDRAMコントローラを作っていますが、いろいろ問題がでてきた。前回は”Spartan3A Starter KitのDDR2 SDRAMコントローラの構想2”で書いたが、DQSのクロックがデータの来るときのみクロッキングして、その他はトライステート状態になっているため、DQのIOB内のFFを使うとデータが足りなくなる話をした。
今回はDQSの入力をクロックとしてBUFGに送っているのだが、その際に最適なIO(つまりクロック専用入力)を使っていないということでエラーになってしまった。
Spa3A_DDR2_1_090324.png

ソースはこんな感じ。

    generate // DQSクロック用BUFG
    genvar k;
        for (k=DDR2_DQS_DM_WIDTH-1; k>=0; k=k-1) begin: DQS_CLK_BUFG_INST
            BUFG BUFG_inst(
                .O(dqs_clk_bufg[k]),
                .I(dqs_clk_node[k])
            );
        end
    endgenerate
    assign dqs_clk = dqs_clk_bufg;


このエラーはXilinxのアンサーの”31290 - LogiCORE Endpoint PIPE v1.7 for PCI Express - ISE 10.1 SP2/SP3 で MAP 中にサンプル デザインで「ERROR:Place:1018」というエラー メッセージが表示される ”に書かれている。ISE10.1からエラーになったようだ。回避方法としては、ISEのエラーにも書かれているが、下のように制約を書けば良いようだ。

NET "ddr2_dqs<0>" CLOCK_DEDICATED_ROUTE = FALSE;
NET "ddr2_dqs<1>" CLOCK_DEDICATED_ROUTE = FALSE;


とりあえず上の制約を加えてもう一度インプリメントしてみたところ、インプリメントが通った。多分、DQSからのクロックがBUFGに行くまでに相当遅延しているかもしれないが、とりあえずタイミング解析をしてみることにする。

以前にISE8.1の時にODDR2を使ってIOBのDDRレジスタを書いたことがあった。その時は"INTERNAL_ERROR"が出て終了してしまったが、ISE10.1では大丈夫だった。下は今回のソース。

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


下がFPGA Editorで見たDQ9。どちらのODDR2もDDRレジスタにマップされている。
Spa3A_DDR2_2_090324.png

  1. 2009年03月24日 05:42 |
  2. Spartan3A Starter Kit
  3. | トラックバック:0
  4. | コメント:0

コメント

コメントの投稿


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

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