FPGA Design flow summary
|Zybo evaluation board - Source: Digilent|
Are you going to make an FPGA design? Are you asking yourself where to start, how to continue, and finish?
These are the basic steps of an FPGA design flow:
- Design Requirements: A High Level Description of the desired functionality.
- Architecture Specification: In response to the Requirements, a High Level Design is produced. Normally this level of the design is done by experienced designers and/or system architects, who define things like which FPGA device to use, interfaces to other components in the board, associated external devices like host CPU and memories, etc.
- Design Entry and Functional Verification: At this stage the model of the device functionality is defined using Hardware Description Languages like VHDL. The design functionality is verified (behavioral simulation).
- Synthesis and Timing verification: The Synthesis process is where the design is translated (mapped) to a HW implementation using the internal blocks of the FPGA and its interconnections. The FPGA internal blocks include LUTs, Flip Flops, memories, hard IPs, etc. Timing verification includes Static Timing Analysis and Gate Level Simulation
- Target verification: The design is 'programmed' or loaded onto the FPGA in an evaluation board or in the real target device. The design is verified using a plethora of debugging tools and instruments: Signal generators, scope, spectrum and logic analyzers, etc.
In real life these steps are not always linear and it is not uncommon for designers to go back and forth the several stages of the Design Flow. However, a good design team will have much less 'back-tracking'.
Signs of very bad design practice are, for example, functional bugs that are discovered only during timing verification, or worse, during target verification, or worst of all, at the customer premises.