09-19-2017 05:21 PM
I am trying to do something that should be really simple, but is proving to be quite difficult. Hopefully someone can help.
First, a few of my operating constraints that I can't change for this project:
I require the use of a BUFGMUX in my block design. Unfortunately, the Utility Buffer IP block in Xilinx does not include this type of primitive. So I created my own IP block, which was simply a VHDL file that instantiates a BUFGMUX. I added some custom IP packaging commands using the ipx:: TCL library, which allowed me to specify that I had clock inputs and clock outputs and to set the frequency of the output clock (otherwise it defaults to 100 MHz). I connected my new IP and the block design validates without errors or critical warnings.
However, when I go to actually build the design I am getting an error during the implementation stage because my downstream components that are clocked by the output of this BUFGMUX IP block have their own BUFG's on the input clocks and it is not valid to drive a non-muxed BUFG with another BUFG.
So the tool recognizes the fact that my IP contains a BUFG, but I think it doesn't do it before it has already added BUFGs to the other IP blocks in the system. However, when I use the Clocking Wizard IP and generate clocks with BUFG outputs, the tool does not add additional buffers to the downstream devices. Perhaps this is an issue of built-in vs. user IP blocks then, but it says there is a way to notify the rest of the block design that there are buffers attached to clock lines already.
09-20-2017 01:06 AM - edited 09-20-2017 01:07 AM
09-21-2017 01:17 PM
Thank you for your suggestion. I was able to add BUFFER_TYPE constraints to an OOC .xdc file for the affected clock ports for each of the custom IP blocks in my design that are being driven from the output of the BUFGMUX IP. So it is a viable workaround for my problem.
However, it was painful (I have dozens of IP blocks connected to this clock) and it also leads to a maintenance headache down the road whenever I add a new IP connected to this clock. I was hoping that there would be a way to tell the tool that the output of my BUFGMUX IP was already driven by a BUFG, so not to add more BUFGs in downstream IP. This is how the Clocking Wizard or the built-in Utility Buffer BUFG must work, so how can the same thing be done with my custom IP?
09-22-2017 12:08 AM
Just write BUFFER_TYPE to your RTL instead of you xdc, this way it is only once per IP (not per instance)