Quartus® Prime Pro Edition User Guide: Timing Analyzer

ID 683243
Date 11/26/2024
Public
Document Table of Contents

2.3.5.2. Using Entity-Bound SDC Files

Throughout the design flow, most timing constraints specified in a Synopsys Design Constraints (SDC) file have a global scope across your project. However, if you want to associate a distinct set of constraints with a specific design entity, you can use the SDC_ENTITY_FILE assignment to assign SDC files to particular entity modules within your project.

Entity-bound SDC files significantly enhance the precision of timing constraints by allowing you to target constraints exclusively to specific entities where they are required. This approach bypasses the inadvertent ramifications of global constraints, which could encompass more targets than intended. As a result, you gain greater control over the precise locations within your design where these constraints take effect.

In addition to enhanced constraint precision, entity-bound SDC files also provide portability of the constraints. When you export a partition that contains entity-bound SDC constraints, you can optionally include these constraints in the exported file using the Include entity-bound SDC files for the selected partition option in the Export Design Partition dialog box. Alternatively, you can specify this with the-include_sdc_entity_in_partition argument via a Tcl command.

To associate a specific SDC file with an entity using the entity-bound SDC file approach within the Quartus® Prime Pro Edition software, follow these steps:

  1. Generate a new SDC file and include it in your project by clicking Project > Add/Remove files in project.
  2. Navigate to the files list and select the newly created SDC file.
  3. Click the Properties button.
  4. In the Type drop-down list, select Synopsys Design Constraints File with entity binding.
    Figure 70. Entity Binding
  5. In the Entity drop-down list, identify the entity you intend to bind to the SDC file.
  6. Click OK to save the changes.

Alternatively, you can define the association between a specific SDC file and an entity by using the following assignment in the .qsf file:

QSF Assignment Syntax:

set_global_assignment -entity <entity_name> -name SDC_ENTITY_FILE <sdc_file_name> \
-library <library_name> [-no_sdc_promotion] [-no_auto_inst_discovery]

Where:

Argument Description
-entity <entity_name> Mandatory argument. It defines the entity you want to bind to the SDC file.
-name SDC_ENTITY_FILE <sdc_file_name> Specifies the SDC file name. The file's name is relative to the project path.

In terms of scoping, the default setup for SDC_ENTITY_FILE is automatic constraint scoping. Automatic scoping means that each result from any get command (for example, get_pins, get_ports, and so on) in the SDC file is prepend with the instance's path. This confines all get commands to target items solely within the bound instance associated with the SDC file. You can deactivate this configuration (which facilitates instance-level targeting) using the -no_sdc_promotion argument available through SDC commands. With this choice, you can handle the responsibility of manually scoping your collections either by explicitly providing the top-level path to the current instance or using the get_current_instance command that delivers the top-level path to the current instance. Such an approach proves invaluable when combining local commands with those that necessitate targeting global, top-level paths or objects outside the instance associated with the SDC file.

-library <library_name> Indicates a library for the referenced entity. If you choose not to specify a library, the Quartus® Prime Pro Edition software automatically defaults to the altera_work library.

-no_sdc_promotion

-no_auto_inst_discovery

Converts any entity-bound SDC into a global SDC file read just once for the entire compilation, making it particularly fitting for bundling an SDC with an entity designated for export as a qdb file. This configuration still permits SDC's collection filters to specify global top-level paths in your get commands.