Welcome to my FPGA (Field Programmable Gate Array) beginner's series. The content here was originally posted on All Programmable Planet which, sadly, is no longer on line. Much of the content is as it was when I originally posted it, with updates when necessary to correct errors in the original articles or reflect more current information.
The series chronicles my journey from complete FPGA ignorance, through introduction, to basic working knowledge of Verilog and FPGA usage. The following first appeared May 22, 2012, in All Programmable Planet:
Hello, everybody. I don't know about you, but I'm new to the world of programmable logic. I have a fair amount of experience with microcontrollers -- mostly Microchip PIC processors, but I also have experience with AVR, ARM, and MSP430 processors. I use them on my motor controllers and robot projects, which is all well and good until I run out of power or flexibility. Some things just need more oomph than a little MCU has to offer.
The ARM Cortex-M0-based microcontroller that I've recently started using has six PWM (pulse width modulation) outputs. That will get me a long way on a simple robot -- two motors and four actuators of some sort -- but what if I want several articulating arms, each needing four or five servos? I could add another MCU for each arm, or I could dive into the world of fieldprogrammable gate arrays (FPGAs).
From what I understand, many FPGAs have soft processors available that could, within the same chip, have access to whatever custom set of peripherals I might want and be able to design out of the programmable logic cells.
To get me started on the path to "FPGA goodness," Xilinx generously provided me with one of its development boards: an Avnet Spartan-6 LX9 MicroBoard, which is based on the Spartan-6 XC6SLX9-2CSG324C FPGA.
Since I am a programmable logic rookie, I'll be starting from scratch. With the development board on the way, I need to start looking at programming software, which would be VHDL, Verilog, or both. I've heard of those two labels before, but I have no idea what they do or how. I understand the concept of regular programming languages like C, C++, Pascal, and ASM. But VHDL and Verilog are described as hardware description languages (HDLs). My brain says that hardware is hardware, and it doesn’t change. With an FPGA, it can change, but at this stage, this is very hard for me to understand.
I'm also going to need to dig into the deep recesses of my brain and refresh my basic digital logic skills. The last time I designed anything using more than two or three 7400-series chips was back in the late 1980s.
My objective with this series of columns is to explore the transition zone between microcontrollers and programmable logic. I’ve gone from eight-bit MCUs up to 32-bit in order to add capability to my robots. I'm expecting the jump to FPGAs to open up whole new worlds to my robot adventures.
For those of you who (like me) are new to this brave new world, I invite you to purchase one of the Spartan-6 LX9 MicroBoards ($89 at Avnet Express; part No. AES-S6MB-LX9-G) and learn alongside me. In addition to my columns, I'll be posting sample code as I experiment with the different features of the chip and board.
If you’re already experienced in this area, I'd like to know how you came to add FPGAs to your utility belt. Did you start as an FPGA person, or did you learn them later in your career? And what were some of the biggest pitfalls you encountered?