The purpose of this series is to provide an entry point to navigate the world of FPGA. Admittedly, there are a decent number of resources on the topic of FPGA already available online, but the goal of this series is to provide a roadmap for the reader to navigate the current FPGA landscape. This will include discussion of FPGA theory, when/why one might use FPGA, links to existing resources, and common mistakes and questions one might have when embarking on this learning process. However, we will also supply this discussion with technical discourse and example projects from the book Digital System Design with FPGA by Cem Ünsalan and Bora Tar’s.
The structure of the series will follow the main stages of an absolute beginner getting started with FPGA, and is applicable whether you are enrolled in class or studying on your own.
There are a lot of things to consider when getting started with any new hardware platform, and it can be very overwhelming figuring out where to begin. You will need to understand the hardware, how to interface with the hardware, how to make the hardware interface with the outside world, and what tools and knowledge to use to actually do any of this. To begin tackling this challenge, we will provide a brief background on what exactly an FPGA is, then define some terms that you will encounter in each stage of the development process.
The Modern FPGA Landscape
The first commercially viable field-programmable gate array was invented by Xilinx co-founders Ross Freeman and Bernard Vonderschmitt with their first board in 1985 – the XC2064. Since then, Altera (now Intel) and Xilinx continued to grow unchallenged from 1985 to the mid-1990s when competitors began to impose on the market. The 1990’s were a period of rapid FPGA growth both in circuit sophistication and volume of production, and by the end of the decade, FPGA was finding its way into consumer markets. For more on the timeline, check out this post.
Today the FPGA market is still dominated by these two major companies- In 2016, they controlled nearly 90 percent of the market. Users choice between the two is largely determined by familiarity with toolsets, however for the purposes of this series we will be using Xilinx [chips]and tools.
Today, FPGA’s have become affordable enough to gain prevalence in consumer markets. However, due to the complexity of the hardware and design process, it can be intimidating to learn without the direction and resources provided by a formal class. One good place to start when tackling this topic, is to get familiar with the vocabulary used to describe parts of the design process and the hardware itself.
You might have already encountered some terms and concepts that are often thrown around, such as “digital Logic, Vivado, bitstream” and so forth. There is a good amount of vocabulary that comes with learning FPGA, but to get us started we have taken some of the more common terms you might hear, and assembled them in our glossary below. (The majority of these definitions are taken from their respective Wikipedia pages or are linked to their original source).
Glossary of Terms
FPGA: A field-programmable gate array (FPGA) is an integrated circuit designed to be configured by a customer or a designer after manufacturing – hence “field-programmable“. The FPGA configuration is generally specified using a hardware description language (HDL), similar to that used for an application-specific integrated circuit (ASIC). They consist of a collection of logic cells called lookup tables (LUTs) surrounded by an interconnect fabric. The LUTs and fabric are programmable, providing a flexible system that can implement almost any digital algorithm.
Digital logic: Digital logic is the underlying logic system that drives electronic circuit board design. Digital logic is the manipulation of binary values through printed circuit board technology that uses circuits and logic gates to construct the implementation of computer operations. It is the fundamental concept underpinning all modern computer systems.
Digital System: The system you are trying to design. FPGA can be used as a generic platform to implement a digital system on. An FPGA is itself a digital electronic system composed of basic building blocks.
Design idea: The usage case or application you are designing your system for.
HDL: (Hardware Description Language). The two most popular HDLs are Verilog and VHDL
Verilog: Verilog, standardized as IEEE 1364, is a hardware description language (HDL) used to model electronic systems. It is most commonly used in the design and verification of digital circuits at the register-transfer level of abstraction. It is also used in the verification of analog circuits and mixed-signal circuits, as well as in the design of genetic circuits
VHDL: VHDL (VHSIC Hardware Description Language) is a hardware description language used in electronic design automation to describe digital and mixed-signal systems such as field-programmable gate arrays and integrated circuits. VHDL can also be used as a general purpose parallel programming language.
Vivado: Vivado Design Suite is a software suite produced by Xilinx for synthesis and analysis of HDL designs, superseding Xilinx ISE with additional features for system on a chip development and high-level synthesis. Vivado represents a ground-up rewrite and re-thinking of the entire design flow (compared to ISE), and has been described by reviewers as “well conceived, tightly integrated, blazing fast, scalable, maintainable, and intuitive”.
RTL: In digital circuit design, register-transfer level (RTL) is a design abstraction which models a synchronous digital circuit in terms of the flow of digital signals (data) between hardware registers, and the logical operations performed on those signals.
Bitstream: The file that configures the FPGA (has a .bit extension). The bitstream gets loaded into an FPGA when ready for execution. Obtained after place and route, final result of the place and route phase.
C/C++: C++ is a general-purpose object-oriented programming (OOP) language, developed by Bjarne Stroustrup, and is an extension of the C language. It is therefore possible to code C++ in a “C style” or “object-oriented style.
Assembly (Language): An assembly language, often abbreviated asm, is any low-level programming language, in which there is a very strong correspondence between the assembly program statements and the architecture’s machine code instructions.
Binary: Binary (or base-2) a numeric system that only uses two digits — 0 and 1. Computers operate in binary,meaning they store data and perform calculations using only zeros and ones.
Serial Terminal Application: An example of this is Tera Term, which is an open-source, free, software implemented, terminal emulator program. It emulates different types of computer terminals, from DEC VT100 to DEC VT382. It supports telnet, SSH 1 & 2 and serial port connections.
FPGA chip: Unlike microcontrollers where you only have control over the software, with FPGA you have control over the hardware as well. There is no processor to run software on, at least until you design one! You can configure an FPGA to be something as simple as an and gate, or something as complex as a multi-core processor. To create your design, you write some HDL (Hardware Description Language). You then synthesize your HDL into a bit file which you can use to configure the FPGA. SoC (System on Chip) is used to distinguish between Zynq and non-Zynq parts (Zynq is an SoC which includes a processor).
FPGA fabric: The internal structure of an FPGA. The various devices that the FPGA contains, the type of interconnect, the add-on features and so on. For example, a typical FPGA from Xilinx or Altera has a combinatorial logic block(CLB) which typically consists of a lookup table (LUT) which can be configured for 2 to 7 inputs, an adder and a D flip-flop. This forms the logic element in the FPGA. The FPGA also contains other blocks like phase locked loops (PLL), I/O buffers, block memory (BRAM), Digital Signal Processing (DSP) blocks and in some cases macro blocks which function as a PCIe controller, Gigabit Ethernet controller, Serializer/Deserializer (SERDES) and off late even large blocks like video codecs (h.264 and h.265 in Zynq Ultrascale+). All of these blocks are programmable and configurable via RTL but need not be designed as we’d do in the ASIC flow. (Except for the FPGA manufacturer of course).
LUT: A LUT, or lookup table is a fast way to realize a complex function in digital logic. The address is the function input, and the value at that address is the function output. The advantage is that computing the function only takes a single memory lookup regardless of the complexity of the function, so it is very fast.
Serial Connection: A serial port is a serial communication interface through which information transfers in or out one bit at a time (in contrast to a parallel port).
Peripherals: Fixed peripherals that are conventionally found on microcontrollers and microprocessors normally surround the hard-core processors. These peripherals include interfaces like serial ports, parallel ports, and Ethernet ports.
Peripherals can also refer to hardware added on a design. For example, attaching a PCAM to the FPGA for computer vision applications.
Hard-core vs. soft-core: A hard-core processor is a processor that’s actually physically implemented as a structure in the silicon. Basically, you can add a soft-core processor to a FPGA-based system after it’s already designed. However, adding a hard-core processor requires either a different FPGA, or an additional chip on the board.
FPGA firmware: Though the code deployed on the FPGA is sometimes referred to as its firmware, this is a slight misconception. Firmware is indeed embedded and dedicated code, but the code is executed. FPGA code is written in a description language, then is interpreted, synthesized, and ultimately produces hardware. So, I see it fit to refer to the FPGA, when it is configured, as hardware, and to the code itself as a description language.
IP core: An IP (intellectual property) core is a block of logic or data that is used in making a field programmable gate array ( FPGA ) or application-specific integrated circuit ( ASIC ) for a product. They are reusable/portable between many different designs.
FPGA clock: All logic executing within the fabric of an FPGA must be based upon one or more timeframe references more commonly called “clocks.” On the FPGA module, clocks are used to synchronize read/write operations, synchronize data transmission and capture, control the timing of data processing, and prepare data for storage. For example, it may take some multiple of 8 clock cycles to process and prepare a single 8-bit byte of data for storage in a memory device.
Synchronous: Typically describing a system that operates on a single clock.
FPGA architecture: FPGA architecture is how the chip is designed/structured, rather than the chip itself. The FPGA Architecture consists of three major components
- Programmable logic blocks: Logic blocks can be formed from thousands of transistors to millions of transistors. They implement the logic functions required by the design and consist of logic components such as transistor pairs, look-up tables (LUTs), and Carry and Control Logic (flip flops and multiplexers).
- Programmable I/O blocks: They connect logic blocks with external components via interfacing pins.
- Programmable interconnect resources: They are electrically programmable interconnections (pre-laid vertically and horizontally) that provide the routing path for the programmable logic blocks. Routing paths contain wire segments of varying lengths which can be interconnected via electrically programmable switches. The FPGA density depends of the number of segments in use for routing paths.
The precise architecture of an FPGA varies from manufacturer to manufacturer.
Get Started Now
To start, you should purchase any additional course materials you might use and of course a FPGA board. If you are uncertain about which board to buy, stay tuned for next week where we will provide a comprehensive buying guide based upon interests and cost range. We will then get under the hood a bit about how the hardware itself works, so you can make sure that you make the best choice in your purchase. In the meantime, make sure you download Vivado and set up your development environment. Keep in mind that Vivado has simulation tools, so feel free to play around with those while you wait for your hardware!