Monday, November 9, 2009

Find IDELAYCTRL locations

ADEPT can be used to easily find IDELAYCTRLs in each IO column in a clock region. For Virtex5, Virtex6 or Virtex-7/Kintex-7, an IO column in a clock region is the same as an IO bank.
  • Load the target device in ADEPT. The Pin table view is displayed.
  • Run View->Display IDELAYCTRL, which shows the IDELAYCTRL_XmYn in the center of each IO column in a clock region.
  • Run File->Read UCF to load pin locations. If any IO in an IO column of a clock region uses IDELAY or IODELAY in FIXED, VARIABLE, or VAR_LOADABLE mode, the IDELAYCTRL in that IO column/clock region needs to be used by manual instantiation or automatic replication in MAP.
  • Optionally if a NCD is read in from File->Read NCD, the tool will display IDELAY or IODELAY modes in the Notes column for IOs using IDELAYs or IODELAYs and the instance names for all used IDELAYCTRLs.
Below is a snapshot of the GUI after an NCD is read in.Click on it to see the full image.
  • The clock region XY is displayed in the first row of each clock region in the SLCR column.
  • The Notes column shows the modes of IDELAY or IODELAY for all applicable IOs.
  • IDELAYCTRL_XmYn is in the center of the clock region.
  • IO bank number is shown in the Bank column. In this particular case, each IO bank is one clock region tall.


  1. One problem of working with IDELAYCTRL is figuring out which ones to use. There are several rules of using IDELAYCTRL, which are not always easy to follow. Especially when a design contains cores, such as memory controller, Ethernet MAC, which already have instantiated IDELAYCTRL, and user logic. I found that the fastest way is to explicitly instantiating all IDELAYCTRL primitives in a chip, building a design, and then removing those that unused.


  2. Thanks for sharing the tip. With your approach you will still need to find out which IDELAYCTRL's are unused after the implementation is done. This is where ADEPT comes in handy:
    * Read in NCD
    * Find all IDELAYCTRL's in regions that have no IOs with IODELAY=FIXED or VARIABLE or VAR_LOADABLE