Important

SymbiFlow is now F4PGA. See f4pga.org and f4pga.readthedocs.io.

Synthesis

Synthesis is the process of converting input Verilog file into a netlist, which describes the connections between different block available on the desired FPGA chip. However, it is worth to notice that these are only logical connections. So the synthesized model is only a draft of the final design, made with the use of available resources.

RTL Generation

the input Verilog file is often really complicated. Usually it is written in a way that it is hard to distinguish the digital circuit standing behind the implemented functionality. Designers often use a so-called Behavioral Level of abstraction, in their designs, which means that the whole description is mostly event-driven. In Verilog, support for behavioral models is made with use of always statements.

However, FPGA mostly consist of Look Up Tables (LUT) and flip-flops. Look Up Tables implement only the functionality of logic gates. Due to that, the synthesis process has to convert the complicated Behavioral model to a simpler description.

Firstly, the design is described in terms of registers and logical operations. This is the so-called Register-Transfer Level (RTL). Secondly, in order to simplify the design even more, some complex logic is rewritten in the way that the final result contain only logic gates and registers. This model is on Logical Gate level of abstraction.

The process of simplification is quite complicated, because of that it often demands additional simulations between mentioned steps to prove that the input design is equivalent to its simplified form.

Technology mapping

FPGAs from different architectures may have different architecture. For example, they may contain some complicated functional blocks (i.e. RAM, DSP blocks) and even some of the basic blocks like LUT tables and flip-flops may vary between chips. Because of that, there is a need to describe the final design in terms of platform-specific resources. This is the next step in the process of synthesis. The simplified description containing i.e. logic gates, flip-flops and a few more complicated blocks like RAM is taken and used “general” blocks are substituted with that physically located in the chosen FPGA. The vendor-specific definitions of these blocks are often located in a separate library.

Optimization

Optimization is the key factor that allows to better utilize resources of an FPGA. There are some universal situations in which the design can be optimized, for example by substituting a bunch of logic gates in terms of fewer, different gates. However, some operations can be performed only after certain steps i.e. after technology mapping. As a result, optimization is an integral part of most of the synthesis steps.