AN 1016: Timing Closure Methodology Quick Reference Guide

ID 836192
Date 11/15/2024
Public
Document Table of Contents

2.1. Optimization Before Synthesis

The Quartus® Prime Compiler is the software component that synthesizes, places, and routes your design before generating device programming files. The Compiler is modular, allowing you to run only the stage of compilation that you need. Each Compiler stage performs a specific function in the full compilation process. The sequential modules of the Compiler include IP Generation, Analysis & Elaboration, Analysis & Synthesis, Fitter, Timing Analyzer, and Assembler.

Before running the Fitter, it is essential to identify the modules in your design that are most likely to encounter timing closure issues. These issues can arise due to multiple factors, such as complexity, clock-to-clock relationships, synchronous and asynchronous transfers, logic depth, clock skew, excessive fan-outs, or other properties. To address these potential problems effectively, start by optimizing the RTL code of these specific modules. This approach is more efficient than attempting to optimize the entire design, or by adjusting Compiler settings.

In optimizing RTL, follow these guidelines to simplify the specification of timing constraints and enhance overall performance:

  • Adhere to synchronous design techniques and a consistent coding style so that synthesis tools effectively interpret and optimize your design. Synchronous design techniques, such as ensuring a clock signal triggers all events, allow the Compiler to perform the best optimizations, resulting in accurate timing analysis results.
  • Use pipeline registers to break down large amounts of combinational logic between registers, improving speed and reducing critical path delays.
  • Avoid latch inferences and combinational loops that can cause metastability.
  • Use flipflops or RAM blocks for data storage to maintain a predictable timing behavior.
  • Ensure constructs have equivalent hardware implementations to avoid underutilizing available resources. For example, ensure that memory or DSP instantiation templates or primitives are mapped correctly to the available RAM or DSP blocks in the device.
  • Simplify cascaded conditional statements and small LUTs (Look-Up Tables) to reduce logic depth and improve timing.
  • Use Altera IP cores to represent logic in your design, wherever possible.

By following these guidelines, you can create RTL code that the Compiler can efficiently optimize, ensuring better performance and more accurate timing analysis. For more information about recommended design practices for FPGA designs, refer to Quartus Prime Pro Edition User Guide: Design Recommendations.