論理回路デザイン
ArchiTek home page
全体像

DDR Dataパス(sdcTerm)について

Xilinx ucfファイルについて

  • ucfファイルは、XilinxのFPGAを設計する際に端子番号、属性情報やマッピングでの配置指定、内部信号のタイミング制約を定義するものです[2]

  • 端子配置および属性はVirtex-6 FPGA ML605評価キットに準じています。またタイミング制約は今回基準入力クロックの周期、dutyのみとします。サンプルコードを以下に示します。
    ##################################################################################
    # I/O STANDARDS
    ##################################################################################
    NET  "ddr_dq[*]"                               IOSTANDARD = SSTL15;
    NET  "ddr_addr[*]"                             IOSTANDARD = SSTL15;
    NET  "ddr_ba[*]"                               IOSTANDARD = SSTL15;
    NET  "ddr_ras_n"                               IOSTANDARD = SSTL15;
    NET  "ddr_cas_n"                               IOSTANDARD = SSTL15;
    NET  "ddr_we_n"                                IOSTANDARD = SSTL15;
    NET  "ddr_reset_n"                             IOSTANDARD = LVCMOS15;
    NET  "ddr_cke"                                 IOSTANDARD = SSTL15;
    NET  "ddr_odt"                                 IOSTANDARD = SSTL15;
    NET  "ddr_cs_n"                                IOSTANDARD = SSTL15;
    NET  "ddr_dqm[*]"                              IOSTANDARD = SSTL15;
    NET  "clk"                                     IOSTANDARD = LVDS_25 |DIFF_TERM = "TRUE";
    NET  "clk_n"                                   IOSTANDARD = LVDS_25 |DIFF_TERM = "TRUE";
    NET  "resetin"                                 IOSTANDARD = SSTL15 |TIG;
    NET  "ddr_dqs_p[*]"                            IOSTANDARD = DIFF_SSTL15;
    NET  "ddr_dqs_n[*]"                            IOSTANDARD = DIFF_SSTL15;
    NET  "ddr_clk_p"                               IOSTANDARD = SSTL15;
    NET  "ddr_clk_n"                               IOSTANDARD = SSTL15;
    NET  "led_init"                                IOSTANDARD = LVCMOS25;
    NET  "led_exec[*]"                             IOSTANDARD = LVCMOS25;
    NET  "led_err"                                 IOSTANDARD = LVCMOS25;

    ##################################################################################
    # DCI_CASCADING
    # Syntax : CONFIG DCI_CASCADE = "   ..";
    ##################################################################################
    CONFIG DCI_CASCADE = "26 25";
    CONFIG DCI_CASCADE = "36 35";

    ##################################################################################
    # Location Constraints
    ##################################################################################
    NET  "ddr_dq[0]"                               LOC = "J11" ;          #Bank 35
    NET  "ddr_dq[1]"                               LOC = "E13" ;          #Bank 35
    NET  "ddr_dq[2]"                               LOC = "F13" ;          #Bank 35
    NET  "ddr_dq[3]"                               LOC = "K11" ;          #Bank 35
    NET  "ddr_dq[4]"                               LOC = "L11" ;          #Bank 35
    NET  "ddr_dq[5]"                               LOC = "K13" ;          #Bank 35
    NET  "ddr_dq[6]"                               LOC = "K12" ;          #Bank 35
    NET  "ddr_dq[7]"                               LOC = "D11" ;          #Bank 35
    NET  "ddr_dq[8]"                               LOC = "M13" ;          #Bank 35
    NET  "ddr_dq[9]"                               LOC = "J14" ;          #Bank 35
    NET  "ddr_dq[10]"                              LOC = "B13" ;          #Bank 35
    NET  "ddr_dq[11]"                              LOC = "B12" ;          #Bank 35
    NET  "ddr_dq[12]"                              LOC = "G10" ;          #Bank 35
    NET  "ddr_dq[13]"                              LOC = "M11" ;          #Bank 35
    NET  "ddr_dq[14]"                              LOC = "C12" ;          #Bank 35
    NET  "ddr_dq[15]"                              LOC = "A11" ;          #Bank 35
    NET  "ddr_addr[15]"                            LOC = "C15" ;          #Bank 36
    NET  "ddr_addr[14]"                            LOC = "D15" ;          #Bank 36
    NET  "ddr_addr[13]"                            LOC = "J15" ;          #Bank 36
    NET  "ddr_addr[12]"                            LOC = "H15" ;          #Bank 36
    NET  "ddr_addr[11]"                            LOC = "M15" ;          #Bank 36
    NET  "ddr_addr[10]"                            LOC = "M16" ;          #Bank 36
    NET  "ddr_addr[9]"                             LOC = "F15" ;          #Bank 36
    NET  "ddr_addr[8]"                             LOC = "G15" ;          #Bank 36
    NET  "ddr_addr[7]"                             LOC = "B15" ;          #Bank 36
    NET  "ddr_addr[6]"                             LOC = "A15" ;          #Bank 36
    NET  "ddr_addr[5]"                             LOC = "J17" ;          #Bank 36
    NET  "ddr_addr[4]"                             LOC = "D16" ;          #Bank 36
    NET  "ddr_addr[3]"                             LOC = "E16" ;          #Bank 36
    NET  "ddr_addr[2]"                             LOC = "B16" ;          #Bank 36
    NET  "ddr_addr[1]"                             LOC = "A16" ;          #Bank 36
    NET  "ddr_addr[0]"                             LOC = "L14" ;          #Bank 36
    NET  "ddr_ba[2]"                               LOC = "L15" ;          #Bank 36
    NET  "ddr_ba[1]"                               LOC = "J19" ;          #Bank 36
    NET  "ddr_ba[0]"                               LOC = "K19" ;          #Bank 36
    NET  "ddr_ras_n"                               LOC = "L19" ;          #Bank 36
    NET  "ddr_cas_n"                               LOC = "C17" ;          #Bank 36
    NET  "ddr_we_n"                                LOC = "B17" ;          #Bank 36
    NET  "ddr_reset_n"                             LOC = "E18" ;          #Bank 36
    NET  "ddr_cke"                                 LOC = "M18" ;          #Bank 36
    NET  "ddr_odt"                                 LOC = "F18" ;          #Bank 36
    NET  "ddr_cs_n"                                LOC = "K18" ;          #Bank 36
    NET  "ddr_dqm[0]"                              LOC = "E11" ;          #Bank 35
    NET  "ddr_dqm[1]"                              LOC = "B11" ;          #Bank 35
    NET  "clk"                                     LOC = "J9" ;           #Bank 34
    NET  "clk_n"                                   LOC = "H9" ;           #Bank 34
    NET  "resetin"                                 LOC = "H10" ;          #Bank 35
    NET  "ddr_dqs_p[0]"                            LOC = "D12" ;          #Bank 35
    NET  "ddr_dqs_n[0]"                            LOC = "E12" ;          #Bank 35
    NET  "ddr_dqs_p[1]"                            LOC = "H12" ;          #Bank 35
    NET  "ddr_dqs_n[1]"                            LOC = "J12" ;          #Bank 35
    NET  "ddr_clk_p"                               LOC = "G18" ;          #Bank 36
    NET  "ddr_clk_n"                               LOC = "H18" ;          #Bank 36
    NET  "led_init"                                LOC = "AC22" ;         #Bank 24
    NET  "led_exec[0]"                             LOC = "AC24" ;         #Bank 24
    NET  "led_exec[1]"                             LOC = "AE22" ;         #Bank 24
    NET  "led_exec[2]"                             LOC = "AE23" ;         #Bank 24
    NET  "led_exec[3]"                             LOC = "AB23" ;         #Bank 24
    NET  "led_exec[4]"                             LOC = "AG23" ;         #Bank 24
    NET  "led_exec[5]"                             LOC = "AE24" ;         #Bank 24
    NET  "led_err"                                 LOC = "AD24" ;         #Bank 24
    #Created by Constraints Editor (xc6vlx240t-ff1156-1) - 2013/02/12
    NET "clk" TNM_NET = clk;
    TIMESPEC TS_clk = PERIOD "clk" 5 ns HIGH 50%;
    NET "clk_n" TNM_NET = clk_n;
    TIMESPEC TS_clk_n = PERIOD "clk_n" 5 ns HIGH 50%;
    ##################################################################################
    # End ucf File
    ##################################################################################
        

回路デザイン > 設計例 [DDR制御(実装)] > 実装にあたって    次のページ(コーディング1)   このページのTOP ▲

[1]
DDRが出力するDQSは、DDR内部でDLL(Delay Lock Loop)を使用して入力されているDDR_CLKと同期合わせをしています。しかしながら実機の場合は基板の特性や配線長(オンボードかDIMM接続か)で内部の基準クロックと必ずしも同位相とは言えません。メーカーが提供するDDR用の専用IPコアはその辺が考慮されていますが、今回は検証の中でマニュアルで調整していきます。
[2]
Altera社のFPGA設計ではxxx.qsfファイル、xxx.sdcファイルに相当します。