2014年10月1日 星期三

Virtex6 DDR3 Setting

Referece: Virtex-6 FPGA Memory Interface Solutions User Guide UG406

之前都用ML605,所以板子相關設定都已經用好了
最近需要移植到比較小的virtex6,我先使用的型號是xc6vcx75t,

再這上面DDR3上面有一些小細節要注意一下

建立microblaze以後會出現這樣一個訊息



表示DDR3IP還需要經過一些設定
打開DDR3 IP 建立新的設定



DDR3中的一些東西還沒研究要怎麼設定,所以都先照預設值



建立好以後按design rule check出現下列錯誤訊息
ERROR:EDK:4070 - INSTANCE: clock_generator_0, PORT: PSCLK - invalid port in use when ISVALID="(C_CLKOUT15_VARIABLE_PHASE || C_CLKOUT14_VARIABLE_PHASE || C_CLKOUT13_VARIABLE_PHASE || C_CLKOUT12_VARIABLE_PHASE || C_CLKOUT11_VARIABLE_PHASE || C_CLKOUT10_VARIABLE_PHASE || C_CLKOUT9_VARIABLE_PHASE || C_CLKOUT8_VARIABLE_PHASE || C_CLKOUT7_VARIABLE_PHASE || C_CLKOUT6_VARIABLE_PHASE || C_CLKOUT5_VARIABLE_PHASE || C_CLKOUT4_VARIABLE_PHASE || C_CLKOUT3_VARIABLE_PHASE || C_CLKOUT2_VARIABLE_PHASE || C_CL
KOUT1_VARIABLE_PHASE || C_CLKOUT0_VARIABLE_PHASE)" evaluates to FALSE. Please remove the port from your design - D:\HDMI_RX_SYSACE\microblaze\microblaze.mhs line 136


ERROR:EDK:4070 - INSTANCE: clock_generator_0, PORT: PSEN - invalid port in use when ISVALID="(C_CLKOUT15_VARIABLE_PHASE || C_CLKOUT14_VARIABLE_PHASE || C_CLKOUT13_VARIABLE_PHASE || C_CLKOUT12_VARIABLE_PHASE || C_CLKOUT11_VARIABLE_PHASE || C_CLKOUT10_VARIABLE_PHASE || C_CLKOUT9_VARIABLE_PHASE || C_CLKOUT8_VARIABLE_PHASE || C_CLKOUT7_VARIABLE_PHASE || C_CLKOUT6_VARIABLE_PHASE || C_CLKOUT5_VARIABLE_PHASE || C_CLKOUT4_VARIABLE_PHASE || C_CLKOUT3_VARIABLE_PHASE || C_CLKOUT2_VARIABLE_PHASE || C_CLK
OUT1_VARIABLE_PHASE || C_CLKOUT0_VARIABLE_PHASE)" evaluates to FALSE. Please remove the port from your design - D:\HDMI_RX_SYSACE\microblaze\microblaze.mhs line 136


ERROR:EDK:4070 - INSTANCE: clock_generator_0, PORT: PSINCDEC - invalid port in use when ISVALID="(C_CLKOUT15_VARIABLE_PHASE || C_CLKOUT14_VARIABLE_PHASE || C_CLKOUT13_VARIABLE_PHASE || C_CLKOUT12_VARIABLE_PHASE || C_CLKOUT11_VARIABLE_PHASE || C_CLKOUT10_VARIABLE_PHASE || C_CLKOUT9_VARIABLE_PHASE || C_CLKOUT8_VARIABLE_PHASE || C_CLKOUT7_VARIABLE_PHASE || C_CLKOUT6_VARIABLE_PHASE || C_CLKOUT5_VARIABLE_PHASE || C_CLKOUT4_VARIABLE_PHASE || C_CLKOUT3_VARIABLE_PHASE || C_CLKOUT2_VARIABLE_PHASE || C
_CLKOUT1_VARIABLE_PHASE || C_CLKOUT0_VARIABLE_PHASE)" evaluates to FALSE. Please remove the port from your design - D:\HDMI_RX_SYSACE\microblaze\microblaze.mhs line 136


ERROR:EDK:4070 - INSTANCE: clock_generator_0, PORT: PSDONE - invalid port in use when ISVALID="(C_CLKOUT15_VARIABLE_PHASE || C_CLKOUT14_VARIABLE_PHASE || C_CLKOUT13_VARIABLE_PHASE || C_CLKOUT12_VARIABLE_PHASE || C_CLKOUT11_VARIABLE_PHASE || C_CLKOUT10_VARIABLE_PHASE || C_CLKOUT9_VARIABLE_PHASE || C_CLKOUT8_VARIABLE_PHASE || C_CLKOUT7_VARIABLE_PHASE || C_CLKOUT6_VARIABLE_PHASE || C_CLKOUT5_VARIABLE_PHASE || C_CLKOUT4_VARIABLE_PHASE || C_CLKOUT3_VARIABLE_PHASE || C_CLKOUT2_VARIABLE_PHASE || C_C
LKOUT1_VARIABLE_PHASE || C_CLKOUT0_VARIABLE_PHASE)" evaluates to FALSE. Please remove the port from your design - D:\HDMI_RX_SYSACE\microblaze\microblaze.mhs line 136

後來去對照原本ml605clock generator跟後來的少了兩個clock還有PSCLK,PSEN,PSINCDEC,PSDONE




所以把clock generator的值改成跟ml605一樣,require groupmmcm0,記得在最後一個clockvariable phase改成true,這樣才會enable PSCLK,PSEN,PSINCDEC,PSDONE這四個pin



port也都接上




這樣就可以順利generate netlist!


比較奇怪的是,這邊的型號是xc6vcx75t,但是如果選高階的型號,clock generator會自動產生好,不用自己再調,所謂一分錢一分貨嗎 -.- 


------------------------------------ 以上根本就是因為腦殘-------------------------------------

後來因為DDR的頻率跟ml605設的不一樣,而且沒有辦法改
原來是因為每個系列有不同的DDR Frequency


發現我根本FPGA選錯了,我要用的是xc6vlx75t,400 Mhz,然後-1 speed
建立完microblaze以後發現很神奇的clock generator都不用自己調了
已經幫你建好跟ml605一樣的
ml605上有點我不太明白
因為在板子上的DDR3MT4JSSF6464XX,WIDTH64bits
但是在ml605上的micorblaze卻是預設MT41J64M16XX,WIDTH8 bits

但是在測試CF上沒有問題,可能我只是用DDR3heap,steak,不是大量的讀寫?????

我在xc6vlx75t上先測試使用MT4JSSF6464XX,DDR3Bank selection就先照預設




UG406P.55頁有提到UCF得設定規則,還有其它的timing constraint 需要設定
BUFIOBUFR

     1. DQS相關的pin必須放在同一個bank
  1. dataaddress必須要放在鄰近的區域
  2. system clock必須放在GC ,banks (24, 25, 34, and 35)
  3. dqsck必須放在differential pin

These rules are verified from the input UCF:
If a pin is allocated to more than one signal, the tool reports an error.
Further verification does not occur if the UCF does not adhere to the uniqueness property.
The pins related to one DQS set should be allocated in the same bank.
When the frequency of the configuration is more than 400 MHz, the IOB distance calculation is
verified.
The maximum distance of the DQ/DM and DQS should not be more than eight IOB pads.
Violation of this rule generates a warning.
The span of the DQS set should not be greater than 13 IOB pads. Violation of this rule is
treated as a warning.
If the DQS set is allocated at the center of the bank, the IOB pad distance is calculated with
respect to the clock tree instead of the DQS pair. The distance between the set pin and clock
tree should be no more than 13 IOBs.
Banks should be allocated for the address and data within the vicinity arena.
An error occurs if a bank is allocated outside the vicinity arena.
The system clock bank can be selected adjacent to the GC bank (24, 25, 34, and 35) or to the
bank adjacent to the capture clock bank.
The system clock bank can be selected adjacent to the capture clock bank only when the
frequency of this controller is not repeated in any of the other controllers. If the frequency of
this controller is repeated in any of the other controllers, the system clock group must be
allocated to any of the GC banks (24, 25, 34, and 35) but not to the bank where only CC pins
are available (this occurs when a bank adjacent to the capture clock bank is used).
The signal pairs sys_clk and clk_ref are allocated to the CC pair or GC pair pins (for a bank
adjacent to the capture clock bank) or to the GC pair pins (for GC banks).
The memory clock signals (CK and CK#) should be allocated to the differential pair pins (P-N
pair).
The DQS pair should be allocated to the differential pair pins.
The capture clock (BUFIO) and resynchronization clock (BUFR) constraints are verified as
follows:
The capture clock LOC constraint should be associated with its corresponding strobe set.
Otherwise, the tool reports an error and provides the valid pins to correct the constraints
and rerun the verification.
The resynchronization clock LOC constraint should be associated with the corresponding
column where its related strobes are allocated. If the resynchronization clock is not
associated with its corresponding strobe pins, the tool reports an error and provides the
valid pins to correct the constraints and rerun the verification.
In the DCI CASCADE syntax, the selected configuration should require the master bank.
The slave banks provided should be valid.
A valid mixed-mode clock manager (MMCM) constraint value should be provided, otherwise a
warning is generated. If the UCF satisfies the above rules, the updated design is generated. The
design:
Provides the latest HDL.
Updates the UCF with the latest clock constraints or any timing ignores (TIGs) provided by
keeping the same pinout.
Generates even the compatible UCFs if the project loaded contains the compatible FPGA
selection.

ddr3設定的另一頁有更詳細的解說,不過應該按照預設下去定pinout就會都遵守規則

The FPGA bank diagram of the Bank selection page is an architectural view of physical representation of the selected part. By default MIG will use the recommended selection. Possible Address/Control banks and Data banks are restricted according to the Virtex-6 rules for different frequencies. Choose the banks you would like to use for your memory interface. You do not get to select the actual pins. By default MIG will use any available pins for the memory interface in the selected banks.
Design Rules:
  • Design maximum frequency:
    • -1 FPGA speed grade devices: 400 MHz
    • -2 and -3 FPGA speed grade devices: 533 MHz
    • Only -2 FPGA speed grade CXT device is supported with only 303 MHz frequency support
    • Low power Virtex-6 devices are supported with only 303 MHz frequency support
  • For frequencies above 333 MHz, only the data widths up to 72 bits are allowed. For frequencies of 333 MHz and below, data widths up to 144 bits are allowed
  • Memory type, Memory parts and Data Widths are restricted based on the selected FPGA device, FPGA device speed grade and the design frequency

Bank Selection Rules :
  • Address/Control groups can be selected only in the inner column banks
  • First bank selected for Address/Control group will have CK[0] and CK#[0] pins
  • Bank consisting of CK[0] and CK#[0], will have MMCM utilized in that H-Row
  • For design frequencies above 400 MHz and higher, only Inner Column banks are allowed for Data group selection. For design frequencies of 400 MHz and below, both Inner and Outer Column banks are allowed for Data group selection
    • Either Inner or Outer Column banks are only allowed for selection
  • Inner and Outer column banks which reside one row above, one row below and on the same row of bank consisting of CK[0] and CK#[0] will be enabled for Data group pin selections
  • This restrictions is represented by a boundary box called vicinity box
  • System Clock group can be selected only in the banks consisting of GC pins or in the inner column banks which are in the same H-ROW of allocated MMCM
  • Design control and status pins viz., sys_rst, error,.. etc., are allocated in System Clock bank
  • System Clock group and rest of the design group pins (Address/Control group and Data groups) cannot co-exist in a same bank due to different voltage standards
  • A Master bank must be selected for each column if asked for
  • System Clock group bank cannot be selected as Master bank
Pin Allocation Rules :
  • Address/Control group:
    • Consists of A, BA, CK, CK#, CKE, CS#, RAS#, CAS#, WE#, ODT, RESET# memory signals
    • Only inner column banks are allowed for selection
    • Memory clock signals (CK[0] and CK#[0]) will be allocated to differential pair pins (P-N pair)
    • VRN/VRP pins will be utilized for pin allocation. In this case, DCI Cascading will be applied in order to support DCI Standard on Address/Control group signals
    • VREF pins are utilized for pin allocation if Data group is not allocated in Address/Control group bank
  • Data group:
    • Consists of DQ, DM, DQS and DQS# memory signals
    • DQS group consists of DQ and DM pins associated with its corresponding DQS and DQS# pins
    • DQS and DQS# pins will be allocated to P-N pair
    • Each DQS group in a bank is associated with a CC-P pin reserved for BUFIO
    • In a column of banks allocated with Data group pins, at least one bank will have a CC-P pin reserved for BUFR
    • VREF pins are not utilized for pin allocation
    • If VRN/VRP pins are utilized for pin allocation in a bank then to support DCI, DCI Cascading feature is applied. In this case, a Master bank has to be selected
  • System Clock group:
    • Consists of
      • Design Clocks: sys_clk_p, sys_clk_n (DIFFERENTIAL) or sys_clk (SINGLE-ENDED)
      • Reference Clocks: clk_ref_p, clk_ref_n (DIFFERENTIAL) or clk_ref (SINGLE-ENDED)
      • 'sys_rst', design reset pin
      • 'error' and 'phy_init_done' status pins
      • For DIMM designs, this group consists of sda and scl pins
      • For ECC enabled designs, this group consists of ECC error pin 'app_ecc_multiple_err'
    • 'error' pin is allocated only for example designs
    • Only Inner Column banks are allowed for selection
    • GC pins are allocated for Design Clocks and Reference Clocks, if the System Clock bank is any one of Banks 35 or 34 or 25 or 24
    • CC pins are allocated for Design Clocks and Reference Clocks, if the System Clock bank is in the Address/Control bank H-Row of allocated MMCM (even if the bank is any one of banks 35 or 34 or 25 or 24)
    • This group is associated with 2.5v IO Standard
  • Master bank:
  • Except System Clock bank, any bank in a given column of banks which are only within the vicinity can be selected as Master bank
  • A Master bank will always have VRN/VRP pins unused. Due to this in a given bank VRN/VRP pins will be reserved if it is selected as Master bank
  • All the Data group banks in the given column acts as Slave banks if a Master bank is selected in that column. The same is given in the generated UCF file
BUFR Allocation Rules:
    • In a column of banks, if there are Data groups pins allocated, then at least one bank must have CC-P pin reserved for BUFR
    • In a column of banks, if there is only one bank allocated with Data group pins, then the same bank will have a CC-P pin reserved for BUFR
      • The above rule is valid for x8 and x16 part designs
      • For x4 part designs, in order to accommodate more data width in a single bank, BUFR is always allocated in the bank below or above the selected Data group bank
    • In a column of banks, if there are two consecutive banks allocated with Data group pins, then the Data group bank (of Address/Control bank row) will have a CC-P pin reserved for BUFR
    • In a column of banks, if there are three consecutive banks allocated with Data group pins, then the middle bank allocated for Data group pins will have a CC-P pin reserved for BUFR
    • In a column of banks, if there are two banks allocated with Data group pins and when the intervening bank (Address/Control bank row) is left idle, then a CC-P pin is reserved in the same idle bank
    • If the Data group vicinity is only two rows of banks, then in a column of banks if one bank is allocated with Data group pins and the other bank is allocated with Non-Data group pins (Address/Control group or System Clock group), the Non-Data group bank will have a CC-P pin reserved for BUFR
    • If the Data group vicinity is three rows of banks, then in a column of banks if at least one bank is allocated with Data group pins and the middle bank (Address/Control bank row) is allocated with Non-Data group pins (Address/Control group or System Clock group), the Non-Data group bank will have a CC-P pin reserved for BUFR
  • For any group, priority order for pin allocation in banks is followed
  • In a given column of banks, preference of pin allocation in banks is in descending order. A top-down order of banks is followed
  • In a given bank, pins are allocated in top-down order
  • Priority order of columns: Inner Left Column, Inner Right Column, Outer Left Column, Outer Right Column
Notes:
It is not possible to fit an eight bit design with an eight bit part in single bank without using internal VREF option.
  • Address/Control group requires 26 pins
  • One additional pin is reserved for BUFR in Address/Control bank. See above BUFR Allocation Rules
  • The Available IOs(AIOs) will be 13 ( 40-27)
  • On selecting Data in Address/Control Bank, Available IO(AIO) count will change to 11,
  • Since 8-bit data requires total of 12 pins, it is not possible to use Address/Control bank for Data group allocation




第一次先選new design


完成以後再重新打開一次選fixed pin out,可以直接儲存pin location貼到ucf


之後BUFIOBUFR也可以如法炮製


BUFIOBUFRconstraint,有個小地方要改成不指定的路徑


INST "*/u_memc_ui_top/u_mem_intfc/phy_top0/u_phy_read/u_phy_rdclk_gen/gen_loop_col0.u_oserdes_rsync"
LOC = "OLOGIC_X2Y23";


UG406 P.109 – P.112中有提到Core Constraint
其中location constraint (OSERDES, IODELAY)上面已經有了
timing constraint才是頭大的地方阿!!!!!



這個constraintBUFR用來同步iserdes收到的資料輸入CLB logic, 必須是memory clock的兩倍現在我設定的memory clock 400 MHz 所以是 2.5 ns x2 5ns, 本來我是用5ns下去繞,但是timingslack是負的,後來看到plb裡面預設的constraint寫說這應該會太緊,使用者可以設成mmcm0,也就是10 ns,後來得到正的slack



這個應該是用來保持DQ,DQSrising,falling edge




NET "clk_p" TNM_NET = TNM_sys_clk;
TIMESPEC "TS_sys_clk" = PERIOD "TNM_sys_clk" 5 ns;


# Constrain BUFR clocks used to synchronize data from IOB to fabric logic
# Note that ISE cannot infer this from other PERIOD constraints because
# of the use of OSERDES blocks in the BUFR clock generation path
NET "*/u_memc_ui_top/u_mem_intfc/phy_top0/clk_rsync[?]" TNM_NET = TNM_clk_rsync;
TIMESPEC "TS_clk_rsync" = PERIOD "TNM_clk_rsync" 10 ns; # This is over-constraint for 200MHz, user can relax it to match mpmc_clk0

# Paths between DQ/DQS ISERDES.Q outputs and CLB flops clocked by falling
# edge of BUFR will by design only be used if DYNCLKDIVSEL is asserted for
# that particular flop. Mark this path as being a full-cycle, rather than
# a half cycle path for timing purposes. NOTE: This constraint forces full-
# cycle timing to be applied globally for all rising->falling edge paths
# in all resynchronizaton clock domains. If the user had modified the logic
# in the resync clock domain such that other rising->falling edge paths
# exist, then constraint below should be modified to utilize pattern
# matching to specific affect only the DQ/DQS ISERDES.Q outputs
TIMEGRP "TG_clk_rsync_rise" = RISING "TNM_clk_rsync";
TIMEGRP "TG_clk_rsync_fall" = FALLING "TNM_clk_rsync";
TIMESPEC "TS_clk_rsync_rise_to_fall" =
FROM "TG_clk_rsync_rise" TO "TG_clk_rsync_fall" "TS_sys_clk" * 2; # This is over-constraint for 200MHz, user can relax it to match mpmc_clk0

# Signal to select between controller and physical layer signals. Four divided by two clock
# cycles (4 memory clock cycles) are provided by design for the signal to settle down.
# Used only by the phy modules.
INST "*/u_memc_ui_top/u_mem_intfc/phy_top0/u_phy_init/u_ff_phy_init_data_sel" TNM = "TNM_PHY_INIT_SEL";
TIMESPEC "TS_MC_PHY_INIT_SEL" = FROM "TNM_PHY_INIT_SEL" TO FFS = "TS_sys_clk"*4;
# This is over-constraint, user can relax it to match 4 memory clock cycles


location constraint (OSERDES, IODELAY) 雖然可以自己產生,但是也要注意一下規則
CONFIG_PROHIBIT 用來避免其它邏輯使用相同的PIN
Resynchronization Clock Forwarding and Distribution Elements(BUFR)


一定要接在MRCC或是SRCCP side
DQ如果無法全接在同一個Bank也要接緊臨上下的

Capture Clock Forwarding and Distribution Elements ( BUFIO)


一定要接在MRCC或是SRCCP side
DQ,DQS,DM 一定要放在相同的Bank


ml605範例
##################################################################################################
##The following locations must be reserved and cannot be used for external I/O because ##
##the I/O elements associated with these sites (IODELAY, OSERDES, and associated routing) ##
##are used to generate and route the clocks necessary for read data capture and synchronization ##
##to the core clock domain. These pins should not be routed out on the user's PCB ##
##################################################################################################


##################################################################################################
##The logic of this pin is used internally to drive a BUFR in the column. This chosen pin must ##
##be a clock pin capable of spanning to all of the banks containing data bytes in the particular##
##column. That is, all byte groups must be within +/- 1 bank of this pin. This pin cannot be ##
##used for other functions and should not be connected externally. If a different pin is chosen,##
##he corresponding LOC constraint must also be changed. ##
##################################################################################################


###############################################################################################
## Note: ML605 optional to comment out these lines. If design has more I/O than just MIG 3.3
## example design, leave CONFIG PROHIBIT definitions in design to permit reservation of
## these I/O pins for MIG use.
###############################################################################################
## CONFIG PROHIBIT = F19,G18;


######################################################################################
## Place RSYNC OSERDES and IODELAY: (locations for ML605) ##
######################################################################################


# CLK_RSYNC[0]: Site M12
INST "*/u_phy_rdclk_gen/gen_loop_col0.u_oserdes_rsync" LOC = "OLOGIC_X2Y139";
INST "*/u_phy_rdclk_gen/gen_loop_col0.u_odelay_rsync" LOC = "IODELAY_X2Y139";
INST "*/u_phy_rdclk_gen/gen_loop_col0.u_bufr_rsync" LOC = "BUFR_X2Y6";


# CLK_RSYNC[1]: Site C29
INST "*/u_phy_rdclk_gen/gen_loop_col1.u_oserdes_rsync" LOC = "OLOGIC_X1Y139";
INST "*/u_phy_rdclk_gen/gen_loop_col1.u_odelay_rsync" LOC = "IODELAY_X1Y139";
INST "*/u_phy_rdclk_gen/gen_loop_col1.u_bufr_rsync" LOC = "BUFR_X1Y6";


##################################################################################################
##The logic of this pin is used internally to drive a BUFIO for the byte group. Any clock ##
##capable pin in the same bank as the data byte group (DQS, DQ, DM if used) can be used for ##
##this pin. This pin cannot be used for other functions and should not be connected externally. ##
##If a different pin is chosen, the corresponding LOC constraint must also be changed. ##
##################################################################################################


## CONFIG PROHIBIT = B20,C28,C29,F21,F25,H19,L13,M12;


######################################################################################
##Place CPT OSERDES and IODELAY: ##
######################################################################################


# DQS[0]: Site C13
INST "*/u_phy_rdclk_gen/gen_ck_cpt[0].u_oserdes_cpt" LOC = "OLOGIC_X2Y137";
INST "*/u_phy_rdclk_gen/gen_ck_cpt[0].u_odelay_cpt" LOC = "IODELAY_X2Y137";


# DQS[1]: Site L13
INST "*/u_phy_rdclk_gen/gen_ck_cpt[1].u_oserdes_cpt" LOC = "OLOGIC_X2Y141";
INST "*/u_phy_rdclk_gen/gen_ck_cpt[1].u_odelay_cpt" LOC = "IODELAY_X2Y141";


# DQS[2]: Site K14
INST "*/u_phy_rdclk_gen/gen_ck_cpt[2].u_oserdes_cpt" LOC = "OLOGIC_X2Y143";
INST "*/u_phy_rdclk_gen/gen_ck_cpt[2].u_odelay_cpt" LOC = "IODELAY_X2Y143";


# DQS[3]: Site F21
INST "*/u_phy_rdclk_gen/gen_ck_cpt[3].u_oserdes_cpt" LOC = "OLOGIC_X1Y179";
INST "*/u_phy_rdclk_gen/gen_ck_cpt[3].u_odelay_cpt" LOC = "IODELAY_X1Y179";


# DQS[4]: Site B20
INST "*/u_phy_rdclk_gen/gen_ck_cpt[4].u_oserdes_cpt" LOC = "OLOGIC_X1Y181";
INST "*/u_phy_rdclk_gen/gen_ck_cpt[4].u_odelay_cpt" LOC = "IODELAY_X1Y181";


# DQS[5]: Site F25
INST "*/u_phy_rdclk_gen/gen_ck_cpt[5].u_oserdes_cpt" LOC = "OLOGIC_X1Y137";
INST "*/u_phy_rdclk_gen/gen_ck_cpt[5].u_odelay_cpt" LOC = "IODELAY_X1Y137";


# DQS[6]: Site C28
INST "*/u_phy_rdclk_gen/gen_ck_cpt[6].u_oserdes_cpt" LOC = "OLOGIC_X1Y141";
INST "*/u_phy_rdclk_gen/gen_ck_cpt[6].u_odelay_cpt" LOC = "IODELAY_X1Y141";


# DQS[7]: Site D24
INST "*/u_phy_rdclk_gen/gen_ck_cpt[7].u_oserdes_cpt" LOC = "OLOGIC_X1Y143";
INST "*/u_phy_rdclk_gen/gen_ck_cpt[7].u_odelay_cpt" LOC = "IODELAY_X1Y143";


在範例裡面學到原來ucf也可以這樣寫阿
這樣就不用在每個pin後面定義iostandard! 現在才知道有這招!!!!
################################################################################
# I/O STANDARDS
################################################################################


NET "ddr3_dq[*]" IOSTANDARD = SSTL15_T_DCI;
NET "ddr3_addr[*]" IOSTANDARD = SSTL15;
NET "ddr3_ba[*]" IOSTANDARD = SSTL15;
NET "ddr3_ras_n" IOSTANDARD = SSTL15;
NET "ddr3_cas_n" IOSTANDARD = SSTL15;
NET "ddr3_we_n" IOSTANDARD = SSTL15;
NET "ddr3_reset_n" IOSTANDARD = SSTL15;
NET "ddr3_cs_n[*]" IOSTANDARD = SSTL15;
NET "ddr3_odt[*]" IOSTANDARD = SSTL15;
NET "ddr3_cke[*]" IOSTANDARD = SSTL15;
NET "ddr3_dm[*]" IOSTANDARD = SSTL15;


## ML605 200 MHz LVDS oscillator - single input clock design (2.5V bank)
NET "sys_clk_p" IOSTANDARD = LVDS_25;
NET "sys_clk_n" IOSTANDARD = LVDS_25;


## ML605 CPU_RESET switch (1.5V bank)
NET "sys_rst" IOSTANDARD = SSTL15;


NET "ddr3_dqs_p[*]" IOSTANDARD = DIFF_SSTL15_T_DCI;
NET "ddr3_dqs_n[*]" IOSTANDARD = DIFF_SSTL15_T_DCI;
NET "ddr3_ck_p[*]" IOSTANDARD = DIFF_SSTL15_T_DCI;
NET "ddr3_ck_n[*]" IOSTANDARD = DIFF_SSTL15_T_DCI;


後記,64 bitsDDR我怎麼都繞不進去,Timing constraint改了又改還是negativ slack
後來決定還是用8 bits好了,至少slack不會是負的阿!!!


果然下constraint能力還是太弱了!!!!



沒有留言:

張貼留言