Getting Started With FPGAs

Welcome back to the Digilent Blog! If you’re new to Digilent, our community, or even FPGAs or coding in general then you’re in for a treat. I have recently started getting back into FPGAs and relearning how to program them. If you’re a long time user to FPGAs coding one can come more naturally. The learning process can be difficult for some people while easier for other. Here I hope to compile a list of resources that I found useful when learning how to program an FPGA.

The newest member of the Basys family!


One of the first things a good friend recommended is look up a cheat sheet for the language you are coding in. This was helpful because it outlined all the important basics that someone would need to know. You can even look at an FPGA cheat sheet to get a better understanding of the components of the device.

Piece of Verilog code
Piece of Verilog code.

The next thing I found helpful is reading. I’m more of a tactile learner myself so it was helpful for me to get a hard copy of a book or print out some PDFs. I found a book that simplifies Verilog and sums up a lot of key parts. It’s a massive help when getting started with Verilog. “Verilog By Example” by Blaine C. Readler is a good book to take a look at. The author also has a VHDL version of the book, which may also be helpful.

Learn banner 2

Once you kind of have a slight grasp on the language you want, it would be beneficial to do some simple projects to see how it works exactly. Digilent conveniently has a great learning site. At the learning site there are simple projects for you to try out to become more comfortable with programming your FPGA. One of the first ones I would suggest to try is blinking an LED.

Forum Update Screenshot

It has been apparent that the main source of help that I have found is through the internet. I also have a great set of colleagues that I can ask for help or explain how something would work. If you’re thinking that you don’t have an easily accessible network of peers to discuss your issues with then you may be mistake as there are tons of websites that have forums for you to pose questions to or even just read old problems so you know how to avoid them. Digilent also has their own forum with a team to answer those questions.

img-160205130355 (2)-page-001
A datapath for a GCD calculator

When you go to code a project my final words of advice are to draw it out. Draw out your data path. Draw out your Finite State Machine. I find this immensely helpful. It will allow me to trace through my diagrams and see where my data is going or where my machine will be in the state machine. If you aren’t a visual learner I would still recommend this because it can clear up your thoughts so that everything is clearer.

State diagram with the path in green dotted lines. The path is described below.
State diagram with the path in green dotted lines. The path is described below.

There are a bunch of resources out there for everyone. If you feel like learning a new language is really daunting or overwelming there’s a lot of people out there that are willing to help. As an old cartoon character used to say “Take chances. Make mistakes. Get Messy!” ~ Ms Frizzle (The Magic School Bus). The best way to learn is to try for yourself and experience what you you’re learning. I take that to heart.

I hope this post provided some insight to learning FPGAs and their coding languages. Don’t be afraid to ask questions or make mistakes. It’s the only way you’re going to learn. Anyway, have a great day everyone and enjoy your learning experience.

About Robert Prew

I am studying Electrical Engineer at the University of Idaho. I have always been interested in technology, video games, science and learning new things. I always believed in the saying “if you can't explain it simply you don't understand it well enough” by Albert Einstein. I have a thirst for self discovery and learning new things about myself. Bringing joy or making others feel happy gives me a great pleasure. You can usually get me interested in an activity that has a more hands on approach. I will always try and strive to be the best person I can be.

View all posts by Robert Prew →

8 Comments on “Getting Started With FPGAs”

  1. I am a recent fan of Digilent. I find this post of FPGA a very good starting point. As a student with I would like and recommend to have a fine measurement device like Analog Discovery 2 in combination to any digital development. It provides a great insight into the working of your device, doesn’t matter either it is FPGA, Microcontroller based design, or purely Analog.
    One important point I would like to raise is that I have right now downloaded the Waveforms software of Analog Discovery 2 in order to see in detail that what it offers. I found that in the section of power supply, there is no option available to get 3.3V out of Analog Dicovery 2 to power our circuitry, rather we can get 3V or 4V. Since we know that many of the devices now a days work on 3.3V (like microcontrollers etc.) therefore I would suggest that it should be a must have option in the power supply option 😉
    On best case, an adjustable power supply option would be great 😉

      1. Hi Larissa

        I am happy that you found this feedback useful. I have just posted my suggestion in the forum, under the new title “Power Supply by Analog Discovery 2 “.


  2. +1 for blinky! When working with hardware its always the first project to try – its simple to do (usually…) and gives visual feedback whether it works or not. And knowing how to blink a LED is important, since sometimes its the only debugging tool you got…

  3. I wish you had posted this sooner! Learning to program the FPGAs for my Engineering classes was a task. Thankfully I’ve mastered it now. This is really great for anyone learning to program them for the first time!

  4. If anyone has anymore websites or suggestions for people please post them! We want to make learning FPGAs an easier process. Thanks for all the feed back so far! Keep on learning.

Leave a Reply

Your email address will not be published. Required fields are marked *