lame.duck got me thinking of using JTAG both for booting the FPGA and for later communication. While I originally thought SPI would be the way to go, this is potentially less portable between different FPGA makers (can all of them boot of SPI, can they boot of a mixed chain?). I am now convinced that using a JTAG ring to talk to the FPGAs is all that is needed. Here are the advantages:
- Industry standard: every FPGA can be configured (and communicated to?) via it.
- Only four lines, no special requirements on routing (if you don't go too long)
- The chips can be software IDed: no need for an extra EEPROM that stores the hardware type
- Even a future ASIC has a good chance of being able to speak JTAG
There are two disadvantages:
- For the backplane based cards: you cannot leave slots unpopulated. If a slot is empty there needs to be a jumper or DIP switch that connects TDI to TDO for that slot.
- For mixing different FPGAs the JTAG signals may have different voltages that are not compatible between different chips. So each daughtercard should plan on having levelshifters from a specified motherboard voltage to the local, correct voltage.
Given what I said, there should be minimal specifications that apply to both solutions. Here a first suggestion:
- The (mother) board has one USB-B connector for host communication and one Molex 8981 connector for power supply.
- Only the 12V pins (+12V:1, GND:2+3) on the Molex are used (for simplicity).
- The USB connector attaches to a FT2232 chip that is connected to a JTAG chain via its MPSSE.
- The FT2232 operates bus powered (works without having +12V connected).
- The PWREN# port of the FT2232 controls the on-board power supplies that convert the +12V to lower voltages. They are only on if the USB device is enumerated.
- The presence of +12V (or the lower voltages?) can be read back on one of the GPIOs of the FT2232 (say: GPIOL0, H=voltage present, L=error).
- The FT2232 can control an LED via a GPIO (say: GPIOL3, L=off, H=on).
- Should we specify a vendor and device ID (needs a small EEPROM) or leave it at the default values for FTDI?
- The JTAG signal connects all FPGAs in one ring.
- All FPGAs have the same connected signals:
- JTAG signals: TCK, TDI, TDO, TMS
- Clock signal
- For discussion; open collector IRQ signal (wire-or). If present need to specity its connection to the FT2232.
- All other IOs are unconnected.
- There is no reset or configuration, as the JTAG interface handles that.
- For every type of FPGA (for every JTAG IDCODE) the following information is specified and does not change for different implemetations:
- Voltages and IO standards on the banks
- Location and frequency of the clock input
- If we decide to use it: location of the IRQ
This way, the software can talk to every bit of hardware! The initialisation code is identical for all devices. The commands for communication are device specific, but the software can detect what to do via the IDCODE. Firmware for one IDCODE is guaranteed to work independent of backplane or standalone board.
Comments?