02-14-2011 09:02 PM - edited 02-14-2011 09:37 PM
After verifying that my board is indeed not broken, and neither is my FAE's I set out to find a way in which I could have my SP605 PCIe endpoint enumerate. After some experimentation I am now able to get the endpoint to reliably enumerate everytime, however in order to do this I have to turn the board on after the PC boots but before the OS loads. If I leave the board plugged in and turned on it won't leave reset because the GTP's PLL isn't locking so the device ends up not enumerating. But if I have the board turned off then power my computer on and then power the SP605 board before the operating system loads everything works just fine and the PCIe device is able to enumerate and communicate with its driver. This is the only way I have been able to get 2 SP605 boards to enumerate in 2 different motherboards. I am loading the image from PROM (x4 SPI), all 4 of the SysAce switches on SW1 are OFF, no CF card is present, and M1 is OFF, M0 is ON. Allowing the system to boot with the board turned on, then JTAGing the board (in effect reseting everything on the FPGA) still does not do the trick. It seems that the board has to be off when the computer boots.
I have tried rebooting the computer once I got the device to work however an entire SP605 board reset is needed to have it reenumerate. I have also tried having one of the GPIO buttons keep the core in reset while being pressed. Holding the core in reset until the system reaches POST (when I would otherwise turn the board on) does not seem to do the trick either.
I am using the unmodified example vhdl project that ships with version 2.2 of the core in ISE 12.4. All speed patches are up-to-date (as of 2/15).
02-15-2011 06:51 AM
It's hard to imagine how the endpoint would not start up the same after delayed power up
or delayed release of reset. It might be interesting to check if the ICS874001 is providing
the clock properly in the case of powering up before the PC boots.
02-16-2011 09:29 PM
02-17-2011 06:38 PM - edited 02-17-2011 07:34 PM
It seems that the board configures almost instantly, it's definitely less than a second but I'm not sure if it's less than 200ms. I am not able to reboot and still have the board reenumerate. I have to cycle power to the board to get it to re-enumerate.
Thinking that maybe the ATX connector loses power temporarily during the reboot process, I removed the ATX connector and powered the board with the charger. Not even in this case is it able to reenumarate without a power cycle.
I doubt it's the motherboard but just to make sure I'll test it out with an ML605.
Edit: Everything seems to work fine if I tie sys_reset_n_c high ( sys_reset_n_c <= '1' ; ) trn_lnk_up asserts after 2 or 3 seconds after the computer boots.
The problem now is I can't reset the core normally. Since I've tested this project (the sample Spartan 6 PCIe LogiCore v2.2 sample project) with 2 boards and 4 different computers, I'm don't think this is a board or core problem. Could the sample design be at fault?