What Are FPGAs
What Are FPGAs
What Are FPGAs
FPGAs are programmable digital logic chips. What that means is that you can program them to do almost any digital function. Here's the general workflow when working with FPGAs:
y y y y
You use a computer to describe a "logic function" that you want. You might draw a schematic, or create a text file describing the function, doesn't matter. You compile the "logic function" on your computer, using a software provided by the FPGA vendor. That creates a binary file that can be downloaded into the FPGA. You connect a cable from your computer to the FPGA, and download the binary file to the FPGA. That's it! Your FPGA behaves according to your "logic function".
y y
You can download FPGAs as many time as you want - no limit - with different functionalities every time if you want. If you make a mistake in your design, just fix your "logic function", re-compile and re-download it. No PCB, solder or component to change. The designs can run much faster than if you were to design a board with discrete components, since everything runs within the FPGA, on its silicon die. FPGAs lose their functionality when the power goes away (like RAM in a computer that loses its content). You have to re-download them when power goes back up to restore the functionality.
y y y
Xilinx invented the FPGA and is the biggest name in the FPGA world. Altera is the second FPGA heavyweight, also a well-known name. Lattice, Actel, Quicklogic and SiliconBlue are smaller players.
Xilinx
Xilinx has traditionally been the density and technology leader. Xilinx general philosophy is to provide all the features possible, at the cost of extra complexity.
y y
Biggest and most flexible (feature-full) devices. Complex architecture, powerful devices.
Altera
Altera philosophy is to provide the features that most people want while keeping their devices eas y to use.
y y
FPGAs are "fine-grain" devices - that means that they contain a lot (up to 100000) of tiny blocks of logic with flip-flops. CPLDs are "coarse-grain" devices - they contain relatively few (a few 100's max) large blocks of logic with flip-flops. FPGAs are RAM based - they need to be "downloaded" (configured) at each power -up. CPLDs are EEPROM based - they are active at power-up (i.e. as long as they've been programmed at least once...). FPGAs have special routing resources to implement efficiently arithmetic functions (binary counters, adders, comparators...). CPLDs do not.
In general, FPGAs can contain large digital designs, while CPLDs can contain small designs only.
y y
FPGAs implement programmable logic elements running in a parallel fashion. Microcontrollers are based on a CPU architecture (executes a set of instructions in a sequential manner).
Microcontrollers have on-chip peripherals that also execute in parallel with their CPU. But they are still much less configurable than FPGAs.
The LUT is like a small RAM that can implement any logic function. It has typically a few inputs (4 in the drawing above), so for example an AND gate with 3 inputs, whose result is then OR-ed with another input would fit in one 4-inputs LUT.
Interconnect
Each logic-cell can be connected to other logic-cells through interconnect resources (wires/muxes placed around the logic-cells). Each cell can do little, but with lots of them connected together, complex logic functions can be created.
IO-cells
The interconnect wires also go to the boundary of the device where I/O cells are implemented and connected to the pins of the FPGAs.
chains allow creating arithmetic functions (like counters and adders) efficiently (low logic usage & high operating speed).
Older programmable technologies (PAL/CPLD) don't have carry chains and so are quickly limited when arithmetic operations are required.
Internal RAM
In addition to logic, all new FPGAs have dedicated blocks of static RAM distributed among and controlled by the logic elements.
y y
"single-port" RAMs: only one agent can read/write the RAM. "dual-port" or "quad-port" RAMs: 2 or 4 agents can read/write. Great to get data across clock domains (each agent can use a different clock).
To figure out how many agents are available, count the number of separate address buses going to the RAM. Each agent has a dedicated address bus. Each agent has also a read and a write data bus. Writing to the RAM is usually done synchronously. Reading is usually done synchronously but can sometimes be done asynchronously.
The big RAM blocks are blockrams, which are located in dedicated areas in the FPGA. Each FPGA has a limited number of these, and if you don't use them, you loose them (they cannot be used for anything but RAM). The small RAM blocks are either in smaller blockrams (Altera does that), or in "distributed RAM" (Xilinx does that). Distributed RAM allows using the FPGA logic-cells as tiny RAMs which provide a very flexible RAM distribution in an FPGA, but isn't efficient in term of area (a logic-cell can actually hold very little RAM). Altera prefers building different size blockrams around the device (more area efficient, but less flexible). Which one is better for you depends on your FPGA application.
FPGA pins
FPGAs tend to have lots of pins... So to make it a little simpler, let's put them them into two bins: "user pins" and "dedicated pins".
User pins
The user pins are called "IOs", or "I/Os", or "user I/Os", or "user IOs", or "IO pins", or ... you get the idea. IO stands for "input-output".
y y
You usually have total control over user IOs. They can be programmed to be inputs, outputs, or bi-directional (i.e. with tri-statable buffers). Each IO pin is connected to an "IO cell" inside the FPGA. The "IO cells" are powered by the VCCIO pins (IO power pins) - more details below.
Dedicated pins
The "dedicated pins" are hard-coded to a specific function. They fall into the three following subcategories.
y y y
Power pins. Configuration pins: used to "download" the FPGA. Dedicated inputs, or clock pins: these are able to drive large nets inside the FPGA, suitable for clocks or signals with large fan-outs.
The power pins fall into two categories: "core voltage" and "IO voltage".
The core voltage is named "VCC" for Xilinx and "VCCINT" for Altera. It is fixed (set by the model of FPGA that you are using). It is used to power the logic gates and flipflops inside the FPGA. The voltage was 5V for older FPGA generations, and is coming down as new generations come (3.3V, 2.5V, 1.8V, 1.5V, 1.2V and even lower for the latest devices). The IO voltage is named "VCCO" for Xilinx and "VCCIO" for Altera. It is used to power the I/O blocks (= pins) of the FPGA. That voltage should match what the other devices connected to the FPGA expect.
An FPGA has many VCCIO pins that may be all powered by the same voltage. But new generations of FPGAs have a concept of "user IO banks": the IOs are split into groups, each having its own VCCIO pins. That allows using the FPGA as a voltage translator device, useful for example if one part of your board works with 3.3V logic, and another with 2.5V.
Clock domains
An FPGA can use multiple clocks (using multiple global lines and dedicated input pins). Each clock forms a "clock domain" inside the FPGA.
y y
If there is some combinatorial logic in between "same clock domain" flipflops, the logic is said to be part of the clock domain too. If there is some combinatorial logic in between "different clock domains" flipflops, the logic is not owned by any clock domain. But in a typical FPGA design, there is no such logic; the only paths from different clock domains are synchronizers.
The complete list of Altera cables can be found here. o The most popular one is the USB-Blaster. o Altera parallel cable are the ByteBlasterMV and ByteBlaster II.
The complete list of Xilinx cables can be found here. o The most popular one is the Platform Cable USB (and its PDF). o Xilinx parallel cable is called Parallel cable III. See also the cables Hardware user guide and the Parallel Cables page.
About parallel cables: a parallel cable connects to your PC's parallel (printer) port. It buffers a few pins of the PC parallel interface, and connects to the target board using a flat cable or flying leads. The parallel cable is an active device and needs power. It is usually powered from the target FPGA board. FPGA vendors sometimes provide the schematic of the cable, which is valuable if you want to build a cable yourself.
FPGA configuration
An FPGA can be into 2 states: "configuration mode" or "user mode". When the FPGA wakes up after power-up, it is in configuration mode, sitting idle with all its outputs inactive. You need to configure it. Configuring an FPGA means downloading a stream of 0's and 1's into it through some special pins. Once the FPGA is configured, it goes into "user-mode" and becomes active, performing accordingly to your programmed "logic function". There are 3 classical ways to configure your FPGA:
y y y
You use a cable from your PC to the FPGA, and run a software on your PC to send data through the cable. You use a microcontroller on your board, with an adequate firmware to send data to the FPGA. You use a "boot-PROM" on your board, connected to the FPGA, that configures the FPGA automatically at power-up (FPGA vendors have such special boot-PROMs in their catalogs)
During development, the first method is the easiest and quickest. Once your FPGA design works, you probably don't need the PC anymore, so the other 2 methods come in use. Configuration works in a surprisingly identical way between Xilinx and Altera devices. The differences is mostly in the naming (pin names and modes of operation are na med differently), but the functionality provided is similar. Most FPGAs can be be configured in multiple ways, using either:
y y
FPGA configuration can quickly become a complex subject, so you might wan to skip this section, t especially if you intend to use an already-made FPGA development board. Development boards usually come with a special cable that you can use to configure the FPGA from your PC with no knowledge of the underlying interface. But if you want to learn a little more, read-on.
JTAG primary purpose is to allow a computer to take control of the state of all the device pins on a board. In turn, this allows all device-to-device combinations on the board to be tested. Standard JTAG commands can be used for this purpose. FPGAs are JTAG-aware and so all the FPGA IO pins can be controlled from the JTAG interface. FPGAs add the ability to be configured through JTAG (using proprietary JTAG commands).
Pin function
input to the configuration data bit FPGA input to the configuration clock, the configuration data bit is shifted in the FPGA FPGA at the clock rising-edge When asserted (i.e. when it goes low - this is an active low pin), input to the the FPGA is reset-ed and looses its configuration. If the FPGA was in user-mode, it stops operation immediately, and all IOs FPGA go back into tri-state mode. This pin indicates when the FPGA is ready to start the configuration process, soon after prog_b is de-asserted. It is output from useful in combination with prob_b because it takes a few milliseconds for the FPGA is get into a "clean state of mind", the FPGA once prog_b is de-asserted, after which pumping configuration data can actually start. output from When high, indicates that the FPGA is configured (in userthe FPGA mode).
prog_b
nConfig
init_b
nStatus
done
ConfDone
Note: the init_b and done pins are actually open-collector pins, so pull-up resistors are required on these. Also if multiple FPGAs are to be configured, these pins are usually connected together on all FPGAs, so that all the FPGAs switch into "user-mode" together. There is many more details, so for a complete description, check your FPGA datasheet.