This website uses cookies. By using this site, you consent to the use of cookies. For more information, please take a look at our Privacy Policy.
Home > FPGA Technical Tutorials > Design Recipes for FPGAs Using Verilog and VHDL > Synthesis

TABLE OF CONTENTS

Xilinx FPGA FPGA Forum

Synthesis

FONT SIZE : AAA

The original intention of hardware description languages was to have a design specification language for digital circuits. The main goal of the work was to have a design representation that could be simulated to test whether the specification was fit for purpose. When VHDL was standardized as IEEE Standard 1076, the broader application of VHDL for not just simulation but as an integral part of the hardware design flow became possible. 

The original method of designing digital circuits was primarily through the development of schematic based designs, using gate libraries to effectively generate RTL netlists directly from the schematics. This is clearly a reasonable technique when the designs are relatively small, but it quickly becomes apparent that for designs of any size this approach is simply not realistic for modern FPGAs that require millions of gates. 

EDA companies realized fairly early on in the HDL development process that if there was a standard language that could represent a data flow and a control flow, then the potential existed for automatically generating the gate level HDL from a higher level description, and RTL was the obvious place to start. RTL (Register Transfer Logic) has the advantage of representing the data flow and control flow directly, and can be mapped easily onto standard gate level logic. The resulting synthesis software (such as the Design Compiler from Synopsys) quickly established an important role in the digital design flow for both ASIC and FPGA designs and has in fact proved to be the driving force in the explosion of productivity of digital designers. The modern high density designs would not be possible without RTL synthesis. 

For these reasons, modern day designers often simplify RTL synthesis to just “synthesis.” However, this is not the whole story. As designs have continued to become more complex, there has been an ever-increasing push to behavioral synthesis; however, there is not the same support from the EDA industry for behavioral synthesis software. 

HDL Supported in RTL Synthesis

While VHDL is standardized, synthesis is not, so the VHDL that can be synthesized is a subset of the complete VHDL language. Another common problem for designers is the fact that different synthesis software packages will give different output results for the same input VHDL, even to the extent that some will synthesize and some will not under certain conditions. 

This also applies in equal measure to Verilog models, where various constructs will be not be able to be synthesized. Some of these are now discussed in the remainder of this chapter. 

There are two types of unsupported elements in VHDL: 

• those that will cause a synthesis failure; 

• those that are just ignored. 

The failure elements are in many respects easier to manage as the synthesis software will provide an error message. It is the ignored elements that can be more insidious as they can obviously leave errors in the synthesized design that may not be picked up until the hardware is tested. 

Initial conditions 

VHDL supports the initial condition being set for signals and variables; however, this is not physically realized. In practice the initial conditions in the synthesized design are random and so in a practical design a reset condition should always be defined using an external reset pin. This is because, during synthesis, the initial conditions are ignored. 

Concurrent edges

It is common to use a clock edge as a trigger for a model, so a simple VHDL model may have a process to wait for the rising edge of a clock.

1 process (clk)

2 if rising_edge(clk) then

3 qout <= din;

4 end if;

5 end process;

Or in a similar way:

1 process (clk)

2 if clk’event and clk=’1’ then

3 qout <= din;

4 end if;

5 end process;

What is NOT valid is to have more than one rising edge as the trigger condition, as this would fail the synthesis.

1 process (clk, clk2)

2 if rising_edge(clk) and rising_edge(clk2) then

3 qout <= din;

4 end if;

5 end process;


  • XC4VLX15-10FFG668I

    Manufacturer:Xilinx

  • FPGA Virtex-4 LX Family 13824 Cells 90nm Technology 1.2V 668-Pin FCBGA
  • Product Categories: FPGAs

    Lifecycle:Active Active

    RoHS:

  • XC4VLX15-11FFG668C

    Manufacturer:Xilinx

  • FPGA Virtex-4 LX Family 13824 Cells 90nm Technology 1.2V 668-Pin FCBGA
  • Product Categories: Connecteurs

    Lifecycle:Active Active

    RoHS:

  • XC17256ELPC20C

    Manufacturer:Xilinx

  • PROM Serial 256K-bit 3.3V 20-Pin PLCC
  • Product Categories: Memory - Configuration Proms for FPGA&#039;s

    Lifecycle:Obsolete -

    RoHS: No RoHS

  • XC17256EPC20C

    Manufacturer:Xilinx

  • PROM Serial 256K-bit 5V 20-Pin PLCC
  • Product Categories: Memory - Configuration Proms for FPGA&#039;s

    Lifecycle:Obsolete -

    RoHS: No RoHS

  • XC4013E-4PG223C

    Manufacturer:Xilinx

  • FPGA XC4000E Family 13K Gates 1368 Cells 0.35um Technology 5V 223-Pin CPGA
  • Product Categories: Disjoncteur

    Lifecycle:Obsolete -

    RoHS: No RoHS

Need Help?

Support

If you have any questions about the product and related issues, Please contact us.