I would like to know if we can use a general purpose (available off-the-shelf at popular stores) USB to JTAG cable to program a Xilinx Spartan 3 FPGA or does it *have to be* a cable (and box) specifically meant for programming a Spartan 3 FPGA (as shown on the Xilinx website)?
I am hoping to hear from people who have actually used a general purpose USB to JTAG cable (as seen on Digikey/Mouser/.. etc.) and tell me that it works just fine.
I don't know the Xilinx cables as such, but there's no such thing as standard JTAG interfaces. So there's no generic JTAG framework for Windows/Linux/whatever that vendors write drivers for. In Altera land, either it's a hardware clone of Altera's USB Blaster, or it doesn't work. That implies you either need a Xilinx cable or a Xilinx-compatible one.
Some of these cables can be used by other software like OpenOCD, which has its own set of backends for them, but the vendor tools don't hook into this. So while there is a set of fairly comprehensive hardware drivers (JTAG is just bitbanging after all, so the driver is fairly trivial) they aren't used by the software that matters.
Thanks everyone for your replies. I think I recollect now - even though one may get basic programming done through a general purpose USB to JTAG cable in principal, the Xilinx tool chain may not work with such a general purpose USB to JTAG cable.
The tool chain would require some "pattern" memory to be present in the programmer box. That memory would be used for debug capture of internal nodes etc.
In conclusion - one needs a Xilinx FPGA programming specific USB to JTAG cable (and its programmer box).
I designed my own programmer several years ago. It used the JTAG port and I have used it to program both Altera and Xilinx FPGAs, as well as some microcontrollers, including the programmer itself. So it's possible that others have gone done this route this as well.
I used the vendor software to generate SVF. My SW then plays back the content of the SVF file (in a post-processed/compressed form) over the JTAG port. I haven't used it recently though as most of my new dev kits contains an embedded programmer.
What it could not do (like you're indicating) was to use Signaltap/Chipscope as there is no hook into the vendor SW or public documentation of the protocol used. At least not that I could find. However, there are 3rd pary embedded analyzers like Identify from Synopsys which might provide som kind of API documentation.
Digilent makes some vendor clones, even embedded ones (like the SMT2) which you will find on many development kits.
I wonder if there's some way to write a 'virtual programmer'. Tell the tools we have a basic parallel port programmer (for instance), and then trap when they bitbang it and pass the results over to a tool like OpenOCD that has backends for other real hardware. For example, when the programmer tries to open /dev/lp0 or LPT1: have some shim underneath that grabs the traffic - either a fake device driver, an LD_PRELOAD hack, or running the tools in a VM.