Hi folks, I am starting to implement a simple PCI core using Spartan-II. I have already implemented the basic read and write transfer before I find this IDSEL signal which is used by PCI configuration transfers. My PCI board just needs to read and write data from/to a fixed address. There is no need for burst or back-to-back, nor plug-and-play. Do I need to implement the PCI configuration? How about plug-and-play?
If you're talking about some sort of embedded system where you know exactly what all the PCI devices in the system are and where they are in memory, I suppose you can "get away" with not bothering to implement configuration reads/writes. However, if this is supposed to be a standard plug-in PCI card for a PC, Mac, etc., you absolutely need to implement configuration reads/writes -- without them, the BIOS and OS will have no idea where you card is, so there's a chance some other card will overlay you card's address space and cause the system to malfunction, freeze, etc.
Assuming you're getting paid for your engineering time, from what you're describing, I have a suspicion you'd be better off using some "off the shelf" PCI interface IC such as those from PLX or Cypress... or at least drop in Xilinx's (or someone else's) PCI core -- it'll quickly pay for itself!
Thank you Joel! It sounds like there is no short-cut for me on this. Yes, I would have chosen another route had I not already spent so much time and effort on this one. I will stick with this plan and see what happen. Thanks!
PCI specification requires the implementation of Configuration registers, and once the Configuration registers are properly implemented, then your device will be Plug & Play compatible. In your case, the implementation of Command and Status Register (Configuration register 04H), and assuming that you need only one address map, Base Address Register 0 (Configuration register 10H) will make your device Plug & Play compatible. I don't recommend hardcoding decode address. I think it is asking for trouble. If that seems too much trouble, you may want to consider purchasing a personal use version of BDS XPCI PCI IP core. BDS XPCI PCI IP core is a Xilinx (TM) LogiCORE (TM) PCI compatible PCI IP core. BDS XPCI32 PCI IP core is available for as little as $100 for non-commercial, non-profit, personal use, and the same 64-bit version BDS XPCI64 PCI IP core (Includes BDS XPCI32 PCI IP core) goes for $200. This version is ideal for HDL learners, FPGA beginners, FPGA hobbyists, computer hardware enthusiasts, or student graduation projects. BDS XPCI PCI IP core comes with a PCI testbench which allows the user to simulate the design extensively on an HDL simulator like ModelSim before firing up the FPGA. With this PCI IP core, almost anyone can make their own PCI device for as little as $400. ($275 Insight Electronics Spartan-II 200 PCI Development Kit + $100 BDS XPCI32 PCI IP core.) Insight Electronics Spartan-II 200 PCI Development Kit is fully supported by this PCI IP core, and Avnet Xilinx Spartan-3 Evaluation Kit support will be added in the future. (The PCI IP core works fine with Spartan-3.) For commercial users who want to modify BDS XPCI PCI IP core or want to convert a design that uses Xilinx LogiCORE PCI to an ASIC (FPGA to ASIC conversion), BDS XPCI PCI IP core is also available in Verilog HDL RTL. For more information, visit Brace Design Solutions website at
Mike Zhang wrote:
Brace Design Solutions
Xilinx (TM) LogiCORE (TM) PCI compatible BDS XPCI PCI IP core available
Thank you Kevin! Yes, $100 dollars for the core is very cheap. But I would still like to try it myself since I have already done so much. Plus, I recently found a pretty cheap PCB manufaturer, so that can short-curcuit the evaulation boards. Cheers!