The PCB was designed using the Schematic capture and PCB layout tools from expresspcb.com
The FPGA code was synthesized and simulated with the Xilinx ISE and Modelsim packages, available from Xilinx.
The code for the PCI interface was taken from another hobbyist Ben Jackson at http://www.ben.com/minipci/.
Application and driver code were written in C using MS Visual C 4 under Windows and gcc under Linux.
The driver code is based off of information and examples from Linux Device Drivers.
I used PCI&PCI-X Hardware and Software by Solari and Willse. as a reference for the PCI bus, but hesitate to recommend it as it is more of a technical reference than a howto, the mechanical drawings don't quite match modern cards and the binding fell apart the first day I used it.
I did all my development on a single PC: the PCB design, FPGA code, and serial port control under Windows, and then ported the serial port control to Linux and developed the PCI driver under Linux. Having two PCs; either Windows and Linux or both Linux would have saved a lot of rebooting when debugging the PCI interface.