11-27-2009 05:38 AM - edited 11-27-2009 05:44 AM
I have been playing with the PIO design included with the ML555 board and have been tinkering with the application note to perform custom operations. In particular, I have been customising the operation of the PCI Express Endpoint block and exploring the capabilities of the component through its LocalLink interface. Consequently, I do like to reconfigure the FPGA frequently and would like to do so while the host system is running. For clarification, the ML555 board is inserted into a separate system from my development envrionment. I have a separate Platform Cable USB from my development machine to the ML555 board, which is in a separate testing machine.
I would like to reconfigure the FPGA while the operating system is executing but Windows and Linux don't seem to like it when I do. For example, Windows results in a blue screen of death, while Linux warns of non-maskable interrupts and kernel panics. I realise that this isn't a result of the board per se but I would appreciate any help that would allow me to reconfigure the device without rebooting the test machine. I suspect that it is a result of the reconfiguration of the PCIe Endpoint and would appreciate any pointers to documentation that explains what happens in the system when the device is reconfigured. Unfortunately, I haven't been able to find any documentation related to this.
12-01-2009 01:45 PM
12-01-2009 03:28 PM
My understanding is that PCIexpress doesn't really support hot-swap type devices and when you reconfigure the FPGA with the PCIe core it disappears from the system and causes havoc in the OS.
12-02-2009 02:17 AM - edited 12-02-2009 03:04 AM
I believe that PCI Express does support hot swap and hot plug devices. I am fairly certain that it is part of the PCI Express standard but it is an optional part of the standard. I stumbled upon the following article from Microsoft, which states that Windows Vista supports PCI Express hot plug as described in the PCI Express specification.
However, the document also says that an interrupt is generated on hot plug events. Consequently, I suspect that the drivers for the device that I am implementing on the ML555 do not have support for hot plug events. Ultimately, I think you are right in saying that the reconfiguration causes the PCIe to disappear from the system. This would then generate an interrupt, which would explain the non-maskable interrupts in Linux. Following the interrupt generation, the operating system would look for an interrupt handler which is not provided by the driver and cause the system to crash.
Overall, it would seem to be a driver issue. I realise that this question wasn't really about the board per se but I had hoped that someone else had come across this same issue. I have only been looking at PCI Express for a couple of weeks so I am not entirely confident that this is the correct explanation.