Numato Lab Elbert Review

Numato Lab very kindly sent me their Elbert Spartan-3A FPGA Development Board for review.

It's a very neat looking little board - a little wider and shorter than a credit card. It includes:

  • Spartan-3A XC3S50A-VQ100
  • Eight LEDs
  • Eight DIP switches
  • Four SPST switches
  • Four 0.1" sockets with four I/Os, 3.3V and ground
  • One 0.1" header with four differential I/O pairs and two general I/Os. Three pins are GCLKs
  • PIC18F14K50, which emulates a USB serial port and is used for programming the 1Mbit SPI Flash configuration PROM
  • Choice of USB or external power supply
  • 12 MHz system clock, generated by PIC's oscillator
  • PIC ICSP header
  • Three PIC analogue input pins on an unpopulated header

The user guide is available on the Web site. I noticed a couple of minor errors:

  • The manual refers to IO connectors IO1-IO5, but the example UCF and board silk screen uses IO0-IO4, and the connectors partially obscure the silkscreen.
  • The schematic diagram doesn't have searchable text.
  • The UCF file has a small typo - NET "DP1" is included twice. The second should be "DP2".
  • The UCF doesn't include a PERIOD constraint for CLK - just add the following lines:

When delivered, a LED flashing bitfile is configured, which is nice! Unfortunately the source code isn't supplied - it might be helpful for beginners who want to be able to examine the reference design rather than start entirely from scratch.

Programming takes about 42 seconds to complete. Because the USB controller isn't connected to the JTAG port, it's not possible to just reprogram the FPGA's SRAM directly. Also, the JTAG pins aren't accessible so there's no way to use JTAG-specific tools such as ChipScope Pro or the PicoBlaze loader.

Those using non-Windows systems are currently out of luck because the Elbert FPGA Configuration Tool is only available for Windows. However because it uses a serial port (using the Microchip CDC, which is supported natively under recent versions of Linux), it should be pretty straightforward to sniff the communications protocol and write a simple replacement, or even to reprogram the PIC for additional functionality.

Unfortunately the PIC isn't available for use as a serial port for FPGA applications. You might be able to achieve this by connecting some of the spare PIC I/Os to one of the FPGA ports, but the three ANx ports are not connected to the PIC's UART. A software UART implementation at 9600 baud might be possible though. Source for the PIC firmware is sadly not supplied, so you would need to rewrite the SPI programming tool if you wanted to put the PIC to use and still be able to reprogram the configuration PROM. It is possible to back up the existing firmware - I used a PICKit 3 to confirm that I could read back the contents of the PIC's program memory.

I ran in to a problem with programming the device because I didn't read the user manual closely enough. It's necessary to enable the 'create binary configuration file' option in the Generate Programming File process properties and then upload the .bin file. I had been uploading the .bit file, which caused some strange behaviour. A nice change would be to make the programming tool's file dialog filter only show *.bin files, and perhaps give an error if you select the wrong type of file rather than uploading erroneous data - but I won't make the same mistake now that I know!

One worrying qurk is that it seems to lose its configuration randomly. A couple of times I've programmed it and a few minutes later noticed that all the LEDs are half-on, which is what I was seeing when I'd uploaded a bad bit stream and left DP8 on (this pin seems to control all of the LEDs when the FPGA is unconfigured - presumably it's some sort of pin tri-state control). When the FPGA is working, power cycling it causes the correct configuration to be loaded, but when it loses the configuration, the flash seems to be messed up too. I programmed it and then sat the board somewhere where I could keep an eye on it, and started a stop watch. Predictably, I couldn't replicate the problem! It may have just been some weird interaction between my virtual machine arrangement and junk data being sent out the serial port.

Overall, it's a nice board! The twelve on-board switches and eight LEDs suit my debugging style well. I thought the DIP switch would be difficult to use, but they've selected a nice fingernail-friendly part. It's a little bit of a shame that the I/O ports aren't compatible with the Digilent Pmod devices or the Papilio Wing boards, which would make expansion very easy, though Numato Lab sell a small range of very inexpensive sensor and relay boards that should be compatible, with some minor wiring.

I'm a bit disappointed that it uses the elderly Spartan-3A rather than the smallest Spartan-6, which only costs a few dollars more but is significantly more capable. No mounting holes are provided, but there is plenty of space on the board's underside for self-adhesive rubber feet.

For $50 it's reasonably good value. Not as powerful as the Silicon on Inspiration boards, but easier for hobbyists to expand and with more on-board I/O. However if you're able to qualify for the academic discount, the Digilent Basys2 is cheaper (if you're a US student) and more capable, though physically larger.