How to design an FPGA from scratch
Editor's note: This is a brief excerpt from article on EE Times' Programmable Logic Designline. To read the full article, click here. Sven Andersson's tutorial "How to design an FPGA from scratch" was the top viewed programmable logic design article on EE Times in 2012.
. . . In order to learn anything, it's best to have some "real-world" project to work with. On this basis, we will design an embedded system, implementing some form of processor-controlled test equipment.
Thereafter, we will write a software device driver and an application program to run on our system. The first thing we will do is to put together a FPGA design checklist. A checklist is used to compensate for the weaknesses of human memory so as to help ensure consistency and completeness in carrying out a task.
FPGA design checklist
- Make sure you have plenty of time to spare.
- Find a decent computer.
- If you can afford it, add a big display.
- Decide which operating system to use.
- Consider using a virtual machine (VM).
- Select an FPGA vendor.
- Pick out a suitable development board.
- Select an embedded processor to use.
- Download the FPGA design software.
- Add the latest service packs.
- Choosing a logic simulator.
- Choosing a synthesis tool.
- Learn C programming.
- Read my tutorial (grin).
Editor's note: See full article for more detail about each step in the process or go directly to the tutorial.
Read my tutorial
For a full description of my embedded design project, read my tutorial, which you will find on my www.fpgafromscratch.com website. Also please note that this is an interactive experience--I welcome your comments, suggestions, and questions, which you can post on my site.
Yes, it is possible to learn how to design an embedded system using an FPGA. The biggest problem is finding the documentation and understanding the whole design flow. Hopefully my tutorial will help you in that respect. If you have some hardware and software experience it will be easier, but even for a newbie it is doable.
Contents of the tutorial
- Part 1 Introduction / let's get started
- Part 2 Defining a design project
- Part 3 Introducing the development environment
- Part 4 Running Xilinx's Integrated Software Environment (ISE)
- Part 5 Setting up the simulation environment
- Part 6 The simulation process using NCSIM
- Part 7 Running a simulation and degugging the design
- Part 8 Using a HDL Analysis and Lint tool (HAL)
- Part 9 Regression testing
- Part 10 Synthesis with timing constraints
- Part 11 The Field Programmable Gate Array (FPGA) description
- Part 12 Adding synthesis constraints
- Part 13 Installing the Embedded Development Kit (EDK) from Xilinx
- Part 14 Software upgrades
- Part 15 Building a system using Xilinx Platform Studio (XPS)
- Part 16 Create or import a user peripheral
- Part 17 Adding our design object and generating a system netlist
- Part 18 Putting together a system simulation environment
- Part 19 Generating a Verilog testbench
- Part 20 Running our first simulation and adding the DDR SDRAM
- Part 21 Debugging IP blocks
- Part 22 Using the XPS Sofware Development Kit (SDK)
- Part 23 Simulating MicroBlaze program execution
- Part 24 More system simulations
- Part 25 Implementing the hardware platform. Generating the bitstream.
- Part 26 Using iMPACT, the configuration tool
- Part 27 The pin assignment closure process
- Part 28 Power calculations using XPower
- Part 29 Hardware and software setup
- Part 30 Running demonstration software applications
- Part 31 Adding a 16x2 character LCD display
- Part 32 Writing the "Hello World" program
- Part 33 Simulating the LCD driver
- Part 34 The MicroBlaze program layout
- Part 35 Using Simgen to generate simulation HDL files
- Part 36 Finishing the LCD driver
- Part 37 Software debugging using Xilinx Microprocessor Debugger (XMD)
- Part 38 Writing a software device driver
But wait, because there's more to come, including (but not limited to):
– Finishing the device driver
– Writing an application program
– Debugging using ChipScope
– Adding an interrupt controller and timer
– Installing a Linux OS
So keep coming back to my tutorial to see what's going on – best regards – Sven
Sven Andersson graduated from the Royal Institute of Technology in Stockholm in 1974 with a Master of Engineering Science in Electrical Engineering. He then worked at Ericsson Telecom for more than 30 years, the last 15 years of which were as an ASIC designer. In October 2006, Sven left Ericsson to start his own consulting company ZooCad Consulting, where he now specializes in freelance ASIC and FPGA designs.