Continue to Site

Welcome to EDAboard.com

Welcome to our site! EDAboard.com is an international Electronics Discussion Forum focused on EDA software, circuits, schematics, books, theory, papers, asic, pld, 8051, DSP, Network, RF, Analog Design, PCB, Service Manuals... and a whole lot more! To participate you need to register. Registration is free. Click here to register now.

Pin to Clock routing warning after implementation

Status
Not open for further replies.

msdarvishi

Full Member level 4
Joined
Jul 30, 2013
Messages
230
Helped
1
Reputation
2
Reaction score
1
Trophy points
18
Activity points
2,349
Dear all,

I am using Vivado2017 targeting a Zedboard including a Zynq-7000 (clg484) FPGA.

I am trying to transmit a signal as a clock between two FPGA Zedboards via FMC connectors. At the Destination board, I take the signal from an N-pin of FMC, and the synthesizer with apply an IBUF for that. Then I instantiated a BUFG in order to consider that signal as a clock to be fed to the flip-flops of my design. The design completely synthesized with no warning or error and also the implementation succeed with no errors, but I receive the following warning in implementation.

Can anyone help me to pass this issue?


[DRC PLCK-12] Clock Placer Checks: Poor placement for routing between an IO pin and BUFG.
Resolution: Poor placement of an IO pin and a BUFG has resulted in the router using a non-dedicated path between the two. There are several things that could trigger this DRC, each of which can cause unpredictable clock insertion delays that result in poor timing. This DRC could be caused by any of the following: (a) a clock port was placed on a pin that is not a CCIO-pin (b)the BUFG has not been placed in the same half of the device or SLR as the CCIO-pin (c) a single ended clock has been placed on the N-Side of a differential pair CCIO-pin.
This is normally an ERROR but the CLOCK_DEDICATED_ROUTE constraint is set to FALSE allowing your design to continue. The use of this override is highly discouraged as it may lead to very poor timing results. It is recommended that this error condition be corrected in the design.

clksig_IBUF[10]_inst (IBUF.O) is locked to IOB_X1Y63
BUFG_inst11 (BUFG.I) is provisionally placed by clockplacer on BUFGCTRL_X0Y18


Kind replies are in advance appreciated.

Regards,
 

Hi,

The message describes the problem and also gives a hint to get around.

You have 2 options.
1> Downgrade the error to a warning by use of the CLOCK_DEDICATED_ROUTE constraint is set to FALSE in your xdc.
2> Choose another IO pin to feed in your clock.

It has also been repeatedly answered in the Xilinx forums. Please read the thread below and other related threads.
http://forums.xilinx.com/t5/Virtex-...DICATED-ROUTE-FALSE-in-some-cases/td-p/697472
 

is this an issue with the pin being poorly located -- eg, the clock pin not having dedicated routing to the global clock network -- or just using the wrong component? You might be able to use an IBUFG instead of the IBUF. The IBUFG/IBUFGDS are used to connect an input buffer that can be connected to a BUFG to a BUFG.
 

is this an issue with the pin being poorly located -- eg, the clock pin not having dedicated routing to the global clock network -- or just using the wrong component? You might be able to use an IBUFG instead of the IBUF. The IBUFG/IBUFGDS are used to connect an input buffer that can be connected to a BUFG to a BUFG.


Hello,

Thanks for your reply. Once I put an IBUFG and a BUFG in my VHDL, after synthesis, the IBUFG is changed to an IBUF and in implementation process, I get the following ERROR since there are an IBUF (not an IBUFG) and a BUFG in series:

[Place 30-574] Poor placement for routing between an IO pin and BUFG. If this sub optimal condition is acceptable for this design, you may use the CLOCK_DEDICATED_ROUTE constraint in the .xdc file to demote this message to a WARNING. However, the use of this override is highly discouraged. These examples can be used directly in the .xdc file to override this clock rule.
< set_property CLOCK_DEDICATED_ROUTE FALSE [get_nets clksig_ibufg] >

IBUFG_inst28 (IBUF.O) is locked to IOB_X1Y119
and BUFG_inst28 (BUFG.I) is provisionally placed by clockplacer on BUFGCTRL_X0Y31


but if I only use an IBUFG in my VHDL file, the synthesizer will change it to an IBUF, but after implementation finished completely, the following Warning appears rather than the Error message that I have mentioned above:


[DRC CKLD-2] Clock Net has IO Driver, not a Clock Buf, and/or non-Clock loads: Clock net clksig_bufg[0] is directly driven by an IO rather than a Clock Buffer or may be an IO driving a mix of Clock Buffer and non-Clock loads. This connectivity should be reviewed and corrected as appropriate. Driver(s): BUFG_inst0/O


An issue here: Does this warning message will hurt the design??

I am confused between two choices:

(1) If I put an IBUFG and then a BUFG in my HDL file, the synthesizer will change IBUFG to an IBUF and gives the Error message shown in my previous post;

(2) If I put only an IBUFG in my HDL file, the synthesizer will change IBUFG to an IBUF and gives the Warning message shown above

I do not know how to pass this issue?! :(
Thanks and Regards,
 

What specific package and pin for the Zynq part does this FMC connector pin go to. If it does not go to a clock capable pin you will receive the message you have been getting.

The only way to fix this would be to pick another FMC connector pin that does go to a clock capable input pin on the Zynq. Or alternatively ignore the warning, if you don't care about using an uncompensated clock. The timing path of the IBUFG-BUFG combination is known by the tools and it uses this information when it compensates for the clock input delay when using MMCMs. If you are using the clock directly you won't have that issue, but the pin to BUFG delay will possibly vary much more widely over PVT and you will need to account for that if it matters to external devices (setup/hold).
 

What specific package and pin for the Zynq part does this FMC connector pin go to. If it does not go to a clock capable pin you will receive the message you've been getting.

Dear ads-ee,

I am using Zynq-7000 (XC7Z020CLG484-3) and all the "N-pins" of FMC connector go to the individual clock pins of D flip-flops. The flip-flops.

Do you mean that this warning message is normal and can be ignored without any interference and problem?

Thanks,
 

That doesn't tell me which FMC pin goes to which pin of the Zynq part.
 

That doesn't tell me which FMC pin goes to which pin of the Zynq part.

I configured the connections in FMC pins on the Zynq board by using the following constranits in my XDC file:


# FMC Expansion Connector - Bank 34
# ----------------------------------------------------------------------------
set_property PACKAGE_PIN L19 [get_ports {FMC_CLK0_N}]; # "FMC-CLK0_N"
set_property PACKAGE_PIN L18 [get_ports {FMC_CLK0_P}]; # "FMC-CLK0_P"
set_property PACKAGE_PIN M20 [get_ports {FMC_LA00_CC_N}]; # "FMC-LA00_CC_N"
set_property PACKAGE_PIN M19 [get_ports {FMC_LA00_CC_P}]; # "FMC-LA00_CC_P"
set_property PACKAGE_PIN N20 [get_ports {FMC_LA01_CC_N}]; # "FMC-LA01_CC_N"
set_property PACKAGE_PIN N19 [get_ports {FMC_LA00_CC_P}]; # "FMC-LA01_CC_P"
set_property PACKAGE_PIN P18 [get_ports {FMC_LA02_N}]; # "FMC-LA02_N"
set_property PACKAGE_PIN P17 [get_ports {FMC_LA02_P}]; # "FMC-LA02_P"
set_property PACKAGE_PIN P22 [get_ports {FMC_LA03_N}]; # "FMC-LA03_N"
set_property PACKAGE_PIN N22 [get_ports {FMC_LA03_P}]; # "FMC-LA03_P"
set_property PACKAGE_PIN M22 [get_ports {FMC_LA04_N}]; # "FMC-LA04_N"
set_property PACKAGE_PIN M21 [get_ports {FMC_LA04_P}]; # "FMC-LA04_P"
set_property PACKAGE_PIN K18 [get_ports {FMC_LA05_N}]; # "FMC-LA05_N"
set_property PACKAGE_PIN J18 [get_ports {FMC_LA05_P}]; # "FMC-LA05_P"
set_property PACKAGE_PIN L22 [get_ports {FMC_LA06_N}]; # "FMC-LA06_N"
set_property PACKAGE_PIN L21 [get_ports {FMC_LA06_P}]; # "FMC-LA06_P"
set_property PACKAGE_PIN T17 [get_ports {FMC_LA07_N}]; # "FMC-LA07_N"
set_property PACKAGE_PIN T16 [get_ports {FMC_LA07_P}]; # "FMC-LA07_P"
set_property PACKAGE_PIN J22 [get_ports {FMC_LA08_N}]; # "FMC-LA08_N"
set_property PACKAGE_PIN J21 [get_ports {FMC_LA08_P}]; # "FMC-LA08_P"
set_property PACKAGE_PIN R21 [get_ports {FMC_LA09_N}]; # "FMC-LA09_N"
set_property PACKAGE_PIN R20 [get_ports {FMC_LA09_P}]; # "FMC-LA09_P"
set_property PACKAGE_PIN T19 [get_ports {FMC_LA10_N}]; # "FMC-LA10_N"
set_property PACKAGE_PIN R19 [get_ports {FMC_LA10_P}]; # "FMC-LA10_P"
set_property PACKAGE_PIN N18 [get_ports {FMC_LA11_N}]; # "FMC-LA11_N"
set_property PACKAGE_PIN N17 [get_ports {FMC_LA11_P}]; # "FMC-LA11_P"
set_property PACKAGE_PIN P21 [get_ports {FMC_LA12_N}]; # "FMC-LA12_N"
set_property PACKAGE_PIN P20 [get_ports {FMC_LA12_P}]; # "FMC-LA12_P"
set_property PACKAGE_PIN M17 [get_ports {FMC_LA13_N}]; # "FMC-LA13_N"
set_property PACKAGE_PIN L17 [get_ports {FMC_LA13_P}]; # "FMC-LA13_P"
set_property PACKAGE_PIN K20 [get_ports {FMC_LA14_N}]; # "FMC-LA14_N"
set_property PACKAGE_PIN K19 [get_ports {FMC_LA14_P}]; # "FMC-LA14_P"
set_property PACKAGE_PIN J17 [get_ports {FMC_LA15_N}]; # "FMC-LA15_N"
set_property PACKAGE_PIN J16 [get_ports {FMC_LA15_P}]; # "FMC-LA15_P"
set_property PACKAGE_PIN K21 [get_ports {FMC_LA16_N}]; # "FMC-LA16_N"
set_property PACKAGE_PIN J20 [get_ports {FMC_LA16_P}]; # "FMC-LA16_P"

# ----------------------------------------------------------------------------
# FMC Expansion Connector - Bank 35
# ----------------------------------------------------------------------------
set_property PACKAGE_PIN C19 [get_ports {FMC_CLK1_N}]; # "FMC-CLK1_N"
set_property PACKAGE_PIN D18 [get_ports {FMC_CLK1_P}]; # "FMC-CLK1_P"
set_property PACKAGE_PIN B20 [get_ports {FMC_LA17_CC_N}]; # "FMC-LA17_CC_N"
set_property PACKAGE_PIN B19 [get_ports {FMC_LA17_CC_P}]; # "FMC-LA17_CC_P"
set_property PACKAGE_PIN C20 [get_ports {FMC_LA18_CC_N}]; # "FMC-LA18_CC_N"
set_property PACKAGE_PIN D20 [get_ports {FMC_LA18_CC_P}]; # "FMC-LA18_CC_P"
set_property PACKAGE_PIN G16 [get_ports {FMC_LA19_N}]; # "FMC-LA19_N"
set_property PACKAGE_PIN G15 [get_ports {FMC_LA19_P}]; # "FMC-LA19_P"
set_property PACKAGE_PIN G21 [get_ports {FMC_LA20_N}]; # "FMC-LA20_N"
set_property PACKAGE_PIN G20 [get_ports {FMC_LA20_P}]; # "FMC-LA20_P"
set_property PACKAGE_PIN E20 [get_ports {FMC_LA21_N}]; # "FMC-LA21_N"
set_property PACKAGE_PIN E19 [get_ports {FMC_LA21_P}]; # "FMC-LA21_P"
set_property PACKAGE_PIN F19 [get_ports {FMC_LA22_N}]; # "FMC-LA22_N"
set_property PACKAGE_PIN G19 [get_ports {FMC_LA22_P}]; # "FMC-LA22_P"
set_property PACKAGE_PIN D15 [get_ports {FMC_LA23_N}]; # "FMC-LA23_N"
set_property PACKAGE_PIN E15 [get_ports {FMC_LA23_P}]; # "FMC-LA23_P"
set_property PACKAGE_PIN A19 [get_ports {FMC_LA24_N}]; # "FMC-LA24_N"
set_property PACKAGE_PIN A18 [get_ports {FMC_LA24_P}]; # "FMC-LA24_P"
set_property PACKAGE_PIN C22 [get_ports {FMC_LA25_N}]; # "FMC-LA25_N"
set_property PACKAGE_PIN D22 [get_ports {FMC_LA25_P}]; # "FMC-LA25_P"
set_property PACKAGE_PIN E18 [get_ports {FMC_LA26_N}]; # "FMC-LA26_N"
set_property PACKAGE_PIN F18 [get_ports {FMC_LA26_P}]; # "FMC-LA26_P"
set_property PACKAGE_PIN D21 [get_ports {FMC_LA27_N}]; # "FMC-LA27_N"
set_property PACKAGE_PIN E21 [get_ports {FMC_LA27_P}]; # "FMC-LA27_P"
set_property PACKAGE_PIN A17 [get_ports {FMC_LA28_N}]; # "FMC-LA28_N"
set_property PACKAGE_PIN A16 [get_ports {FMC_LA28_P}]; # "FMC-LA28_P"
set_property PACKAGE_PIN C18 [get_ports {FMC_LA29_N}]; # "FMC-LA29_N"
set_property PACKAGE_PIN C17 [get_ports {FMC_LA29_P}]; # "FMC-LA29_P"
set_property PACKAGE_PIN B15 [get_ports {FMC_LA30_N}]; # "FMC-LA30_N"
set_property PACKAGE_PIN C15 [get_ports {FMC_LA30_P}]; # "FMC-LA30_P"
set_property PACKAGE_PIN B17 [get_ports {FMC_LA31_N}]; # "FMC-LA31_N"
set_property PACKAGE_PIN B16 [get_ports {FMC_LA31_P}]; # "FMC-LA31_P"
set_property PACKAGE_PIN A22 [get_ports {FMC_LA32_N}]; # "FMC-LA32_N"
set_property PACKAGE_PIN A21 [get_ports {FMC_LA32_P}]; # "FMC-LA32_P"
set_property PACKAGE_PIN B22 [get_ports {FMC_LA33_N}]; # "FMC-LA33_N"
set_property PACKAGE_PIN B21 [get_ports {FMC_LA33_P}]; # "FMC-LA33_P"

I use ONLY the N pins, totally 34.
 

You have to use one of the following pins circled in red the ones with MRCC or SRCC for multi-region and single-region respectively. Most likely you will want to use one of the MRCC pins.

- - - Updated - - -

Oops here is the picture
Capture.PNG
 

You have to use one of the following pins circled in red the ones with MRCC or SRCC for multi-region and single-region respectively. Most likely you will want to use one of the MRCC pins.

Sorry I did not get what you mean! What are MRCC and SRCC and how to identify them??

- - - Updated - - -

You have to use one of the following pins circled in red the ones with MRCC or SRCC for multi-region and single-region respectively. Most likely you will want to use one of the MRCC pins.

- - - Updated - - -

Oops here is the picture
View attachment 142165

I need and have to use ALL N-pins of FMC which are totally 34. The red circule that you mentioned does not cover all N pins. How can I use all of them then?? Also, the schematic that I have for the Zynq FPGA used, does not have MRCC or SRCC pins...!
 

I configured the connections in FMC pins on the Zynq board by using the following constranits in my XDC file:

I use ONLY the N pins, totally 34.

Why are you using only the _N pins? For regular single ended signals you can use both _N and _P pins. For clocks thought they they typically should be on the _P pin as it is the "master" IO cell of a differential pair as it is the one with the direct connection to the BUFG. Using the _N pin as a single ended clock is the same as using any other generic pin and will generate the warnings you are seeing.
 

Why are you using only the _N pins? For regular single ended signals you can use both _N and _P pins. For clocks thought they they typically should be on the _P pin as it is the "master" IO cell of a differential pair as it is the one with the direct connection to the BUFG. Using the _N pin as a single ended clock is the same as using any other generic pin and will generate the warnings you are seeing.

Thank you for pointing out the nice comment for the difference between N and P pins of FMC. Indeed, ALL other P pins of FMC will be used by my colleague and I will use ALL of N pins. So, I have no ways except do this strategy. As you said, the warning is due to this reason that I am using ONLY N pins of FMC as a single ended clock to some flip-flops. Is it any way to solve these warnings based on your explanation??
 

Sorry I did not get what you mean! What are MRCC and SRCC and how to identify them??
They are part of the I/O names used by Xilinx for the Zynq.
They are also described in the following from the clocking resource users guide.
Capture.PNG

I need and have to use ALL N-pins of FMC which are totally 34. The red circule that you mentioned does not cover all N pins. How can I use all of them then?? Also, the schematic that I have for the Zynq FPGA used, does not have MRCC or SRCC pins...!
I was only circling the clock capable pins from a Zedboard schematic. If the schematic you have doesn't have what is on that schematic then you don't have a "real" Zedboard. I still don't get why you want to use only "slave" I/O of a differential pair...
 

Hello,

Thanks for your reply. Once I put an IBUFG and a BUFG in my VHDL, after synthesis, the IBUFG is changed to an IBUF and in implementation process, I get the following ERROR since there are an IBUF (not an IBUFG) and a BUFG in series:




but if I only use an IBUFG in my VHDL file, the synthesizer will change it to an IBUF, but after implementation finished completely, the following Warning appears rather than the Error message that I have mentioned above:





An issue here: Does this warning message will hurt the design??

I am confused between two choices:

(1) If I put an IBUFG and then a BUFG in my HDL file, the synthesizer will change IBUFG to an IBUF and gives the Error message shown in my previous post;

(2) If I put only an IBUFG in my HDL file, the synthesizer will change IBUFG to an IBUF and gives the Warning message shown above

I do not know how to pass this issue?! :(
Thanks and Regards,

Surprisingly, the IBUFG instantiation in VHDL is translated as IBUFG in Xilinx ISE 14.7 while it is translated to IBUF in Vivado 2017.1 ...!!!! It seems weird and I do not yet know why...
 

Thank you for pointing out the nice comment for the difference between N and P pins of FMC. Indeed, ALL other P pins of FMC will be used by my colleague and I will use ALL of N pins. So, I have no ways except do this strategy. As you said, the warning is due to this reason that I am using ONLY N pins of FMC as a single ended clock to some flip-flops. Is it any way to solve these warnings based on your explanation??

IMO this is a really idiotic way of deciding who gets what pins.

Just cut the bus in half based on the bank...you get the top half they get the bottom half. You each get a clock pin and the upper or lower half of the FMC pins.
 

IMO this is a really idiotic way of deciding who gets what pins.

Just cut the bus in half based on the bank...you get the top half they get the bottom half. You each get a clock pin and the upper or lower half of the FMC pins.


If this way is idiotic, then if we cut the FMC bus in half, so the number of pins than I can use will be less than 34 since each N-P pair of FMC connectors must carry different signals (P pin is signal0 and pin N is signal1) and these signals are not invert of each other. Doesn`t it matter, then??
 

If this way is idiotic, then if we cut the FMC bus in half, so the number of pins than I can use will be less than 34 since each N-P pair of FMC connectors must carry different signals (P pin is signal0 and pin N is signal1) and these signals are not invert of each other. Doesn`t it matter, then??

What, that makes absolutely no sense whatsoever!? The P and N only stand for differential signals, if you use them as all single ended, which must be what you are doing it won't matter. The P and N don't specify inverted signals unless you are using them as a differential standard, which you obviously can't be doing as you and your colleague are using half of the pair to begin with. Who came up with this silly way of dividing the pins up?

The biggest problem with using those differential pairs is they are likely run as 100 ohm differential pairs and will therefore have cross talk issues. At least if you control both P and N pairs you can perhaps be more selective about the signals that are next to each other.
 

What, that makes absolutely no sense whatsoever!? The P and N only stand for differential signals, if you use them as all single ended, which must be what you are doing it won't matter. The P and N don't specify inverted signals unless you are using them as a differential standard, which you obviously can't be doing as you and your colleague are using half of the pair to begin with. Who came up with this silly way of dividing the pins up?

The biggest problem with using those differential pairs is they are likely run as 100 ohm differential pairs and will therefore have cross talk issues. At least if you control both P and N pairs you can perhaps be more selective about the signals that are next to each other.

Thank you very much @ads-ee for this clarification. Ok, I will devide the FMC pins in half based on the banks. But I do not know how to initiate the following clock pins of FMC in my XDC file where I have ONLY 1 clock signal that is sys_clk. Can you give me a hint on that what to do with that?


# ----------------------------------------------------------------------------
# FMC Expansion Connector - Bank 35
# ----------------------------------------------------------------------------
set_property PACKAGE_PIN C19 [get_ports {FMC_CLK1_N}]; # "FMC-CLK1_N"
set_property PACKAGE_PIN D18 [get_ports {FMC_CLK1_P}]; # "FMC-CLK1_P"


If I use my sys_clk signal as FMC_CLK1_P, then what should I do with FMC_CLK1_N?
Thank you,
 

Use it as any other pin, it doesn't have to be a clock, but it's much more likely to have cross talk issues as it has an actual clock paired with it.
 

Status
Not open for further replies.

Part and Inventory Search

Welcome to EDABoard.com

Sponsor

Back
Top