-
Notifications
You must be signed in to change notification settings - Fork 28
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Opening the elaborated design fails with error on SHARED_QPLL value #27
Comments
Removing the lines:
from the file |
After I fixed the previous problem I encountered another one. If I add a SatCat5 SGMII PHY which includes the shared components it fails with the following errors:
Removing the line 96 |
Unfortunately, we've only tested this core on Vivado 2019.1. Xilinx frequently changes the port definitions on their auto-generated IP-cores from version to version, in ways that make it difficult to use in this fashion. The error message above looks like exactly that situation. (Aside: We need to distribute the I would recommend trying the "sgmii_raw" variant. Feature-wise, it's nearly a drop-in replacement for "sgmii_gtx", but the lower-level cores tend to have a more stable API. |
Removing the But I ran into issues with the multiple ports because of the reuse of the IP (I ran the create_port script for every GTH location and I have a IP block for every location now) . I will share the error messages later on. One generall question here: is it even a feasible apporach to use the block design for this? I then tried to use the "sgmii_raw" variant. I also needed to change the name of some ports in the vhdl because the Thank you already for your help and also for this great open-source project :) |
Unfortunately, the way that AMD/Xilinx defines these IP cores puts us between a rock and a hard place. For a user that's using all four lanes of a quad, our ideal use case is:
The alternative would be to put all four SGMII ports in one IP-core, which seems to be the vendor preference. But to do that, we would need component definitions for every pairwise combination of device and port count. (e.g.., 7series with 1 port, ultrascale with 1 port, 7 series with 2 ports, ultrascale with 2 ports, 7 series with 3 ports...) That is not sustainable, doubly so if the port list varies by Vivado version. What we chose was a compromise using separate IP-cores, but it seems that we're relying on an unstable API. I'm not sure that a quick fix exists. All I can recommend is using Vivado 2019.1. |
Yes, I see the problem with the changing API. I think this is not related to the Vivado version, as the document I linked last time mentions differences between product families in the same generation. e.g. Zynq Ultrascale+ vs. Kintex or Artix Ultrascale+. This is a problem for the I also saw problems with the lower level Nevertheless, these problems are ones which would requiere a lot of work to really fix but are easy to change by hand for a specific chip. My main problem is that I am not able to get multiple instances of "port_sgmii_*" to work in one block design and I think the issue is somewhere in the creation process of the IP core package. For both types I ran into issues with the location constrains: Additionally for the raw variant I think the variant without the shared parts is missing for the ultrascale version, which results in this error: The IBUFDS_GTE4 is generated three times in this design because I added the I may be able to solve the issue with the IBUFDS_GTE4 and also push a pull request with the changes but I am lost with the location constrains. |
We do have a workaround for the location constraints, but it's a bit ugly. Option A is to ignore the warnings. Unfortunately, the Xilinx IP sets the LOC constraint on each GTHE4_CHANNEL instance, and there's no way to disable this behavior. Since that defaults to X0Y0 for every instance of the core, this results in a warning. However, Vivado will usually override this based on the pin-location constraint for the transceiver signals. (There's only one channel attached to each physical pin, after all.) In such cases, the warnings are a false alarm, and place-and-route figures things out correctly to generate a functional design. Option B is to create separate variants of the IP-core for each channel, so the LOC constraints are set correctly from the beginning. Unfortunately, I haven't found a way to do this with the user-configurable parameters; AFAICT it has to be set when you create the IP-core. To allow this, there's a TCL variable
Then, you'll need to create one instance of each core variant in your block design. I'm not sure what's going on with the IBUFDS_GTE4 error. Best guess: We've had problems in the past where the block-diagram tools automatically insert IBUF or similar primitives that aren't appropriate for clock signals. We've got an |
Actually I already used your Option B and still got this critical warnings. Thats what I meant with "I ran the create_port script for every GTH location and I have a IP block for every location now" in an earlier comment. But maybe this is all running fine then and I have another problem. At least I was able to build a bitstream with multiple sgmii_gtx ports and the n-port ethernet switch. I also tried to debug the Does this message mean error with "MII_TX"? I just found this in the switch_aux and io_error_reporting but I was not sure in which direction the offset is going with the messages. |
It seems that you are a step ahead of me in debugging the SGMII ports. ;) The In any case, bit 5 is equivalent to
To be clear, all of those alarms are sourced from the AMD/Xilinx IP-core, which suggests a configuration, clocking, or signal-integrity problem of some kind before it hits the SatCat5 logic. I'd start with the troubleshooting steps recommended in the PG047 user's guide. |
Expected Behavior
It should be possible to open the elaborated design with port_sgmii_gtx_X0Yx included in the block design.
Current Behavior
Opening the block design fails with the following error messages:
Possible Solution
I think the problem is somewhere in
create_port_sgmii_gtx.tcl
and the SHARED_QPLL variable or maybe in theport_sgmii_gtx.vhd
and the usage of this variable. But I was not able to find a fix yet, maybe you can help me :)Steps to Reproduce (for bugs)
Context
Maybe this is again a issue with the newer Vivado version?
Your Environment
The text was updated successfully, but these errors were encountered: