I finally had some time to solder together a project I designed a few months back. It’s a simple little fpga development board that I code named the Spartan Mini.
I had the yearning to create this little fella when I was trying to learn verilog towards the beginning of the year. At the time I had a Digilent Nexys 3 development board that I had purchased off ebay and I was going through this neat little book called FPGA Prototyping By Verilog Examples. It was an older book, so it didn’t teach System Verilog, but I really enjoyed the style of writing and it was very practical in that it provided plenty of homework examples that you could work through and put into practice what was taught. I started thinking that it’d be fun to try and make a small development board that I could use in other projects, and the rest is history.
I decided to use the Spartan 6 FPGA because it was the one I had used in the Nexys 3 board, as well as it had the option of a less intimidating TQFP footprint, vs the BGA package that seems to be more common with the newer designs. There was also a ton of documentation and support behind it which really helped me out. There were numerous examples of projects I found online that I pulled from. None of them had everything I wanted, but they helped me in verifying I was hooking everything up correctly. Some of those projects were the Papilio and the Numato Mimas board.
For the feature set, I wanted a board that had a dedicated power switch, and various powered options. The final design can either be powered via a micro USB, 3.7-6v wall wart, a li-ion battery via an optional JST-PH connector, as well as a VIN jumper. The board can either be programmed via the USB, as well as the JTAG connection. For the USB controller I’m using an FT2232, which provides both a JTAG and RS232 link to the FPGA. The board also has 8Mb of PSRAM (pseudo-static ram). I discovered PSRAM with the Nexys 3 board. The benefit of PSRAM is that the FPGA can interface with it like normal SRAM. Under the hood however, the chip uses DRAM, but takes care of the refresh circuitry automatically. Because of this, PSRAM has the ease of use of SRAM, but essentially at a lower cost similar to DRAM.
Other than that I have 8 programmable Leds, 2 buttons, and a slide switch connected to the physical board. I found with the Nexys board that I was constantly using the Leds on the board to display not only the status of registers, but it also makes it really easy to display a byte of data when debugging. To facilitate expansion and prototyping I added 5 PMOD (short for peripheral module) ports, which seem to be a growing standard with FPGA boards. The nice thing with these connectors is there’s already a slew of useful peripherals that companies have developed that can be plugged in directly to the board.
In a later revision of the board I thought it might be neat to have the option of adding a Kicad template that would allow easy creation of daughter boards or shields that would connect via the PMOD connection points. I started playing around with creating templates in Kicad and built a little expansion board template.
Using the template I created a simple little proto board type shield that I’m hoping will make prototyping designs easier.
I discovered that there’s just enough room to squeeze a skinny breadboard between the headers, to provide for some more prototyping options:
Here’s a link to the github repo.