-
Notifications
You must be signed in to change notification settings - Fork 86
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
Error building for Panologic platform ( Spartan 6 xc6slx150) #38
Comments
@skiphansen: i started testing ethernet on the Pano Logic G2: litex-hub/litex-boards@2f3817c |
@enjoy-digital Sure! You can find liteth with my kludge for the Pano here: https://github.com/skiphansen/liteeth (pano_fixes branch). My fork of litex-buildenv that uses my patched repository is here: https://github.com/skiphansen/litex-buildenv (pano_master branch) My top level Linux project is here: https://github.com/skiphansen/panog2_linux. Since I added a BUFG on eth_tx.clk my kludge seems to route and work every time, but I've done zero timing analysis. |
@skiphansen: thanks, i've been able to get it working. I mostly integrated your solution with 0feed17 and tested it with: Can you check this is also working in your design? |
@enjoy-digital Thanks, I'll test it today! |
@enjoy-digital I've verified that a straight litex-hub/litex-boards build works fine. I modified my code to give control of the Phy reset to liteeth and everything built w/o a problem, however it doesn't run. I don't get any serial output from the BIOS and the Ethernet PHY is never initialized (at least I don't get the usual link status LEDs). If I comment out "self.comb += pads.rst_n.eq(~reset)" in gmii.py and drive rst_n high elsewhere then Linux boots and the Ethernet works. I don't understand this behavior. As far as I know the Phy always generates a clock, just at a different frequency when the PHY is in reset. I was worried about the system clock changing frequencies when the PHY was reset causing serial port baud rate issues, but I didn't expect this. |
@enjoy-digital I hooked up my scope and I see a 25 Mhz clock coming out of the Phy. I have a theory of what the problem might be: The PLL that generates the system clock's can't lock to the 25 Mhz input clock so the system reset is never released. |
@skiphansen: in you code, are you setting |
@enjoy-digital No I am not, I'll give that a try and let you know. Thanks! |
When I added with_hw_init_reset = False I get an infinite reset loop (The complete BIOS login banner is over and over, looping after "ROM: 32KB"). If I define rst_n to as an LED pin rather than the actual PHY reset then everything works. This makes no sense to me. Here's my the code I tested:
|
@skiphansen: since we are using the clock from the PHY as a clock source for the system on the Pano Logic, the behaviour is probably caused by the CPU reseting the PHY while initializing ethernet. In my design i'm not sure i was using a CPU, so this could explain why it was working. Can you try commenting out the |
I get an undefined error if I comment out rst_n.
|
With 291b257 |
The BUFGMUX instance in gmii.py creates generates the following error when build for the Panologic-g2 platform base on a Spartan 6 xc6slx150. The error message is:
ERROR:Place:1108 - A clock IOB / BUFGMUX clock component pair have been found
that are not placed at an optimal clock IOB / BUFGMUX site pair. The clock
IOB component <eth_clocks_rx> is placed at site . The corresponding
BUFG component <eth_rx_clk_BUFG> is placed at site <BUFGMUX_X3Y5>. There is
only a select set of IOBs that can use the fast path to the Clocker buffer,
and they are not being used. You may want to analyze why this problem exists
and correct it. If this sub optimal condition is acceptable for this design,
you may use the CLOCK_DEDICATED_ROUTE constraint in the .ucf file to demote
this message to a WARNING and allow your design to continue. However, 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. A list of all the COMP.PINs used in this clock placement rule is
listed below. These examples can be used directly in the .ucf file to
override this clock rule.
< NET "eth_clocks_rx" CLOCK_DEDICATED_ROUTE = FALSE; >
After a LOT of study of Table 1-2: Shared Global Clocking Resources for Bank 2 and Bank 3" in ug382.pdf I've concluded (rightly for wrongly) that with eth_clocks_rx on GCLK_28 and eth_clocks_tx on GCLK_29 this is indeed unroutable.
I was able to get liteeth to work by replacing the BUFGMUX with simple combinational logic, but I'm not confident of my fix even thou "it seems to work".
My changes can be found here: https://github.com/skiphansen/liteeth/tree/pano_fixes.
The text was updated successfully, but these errors were encountered: