Critical Issue
Due to a problem in the Quartus® II software version 12.1 SP1, the ordering in your project\'s Quartus II Settings File (.qsf) can be changed unexpectedly.
This behavior may occur when you open a existing project or when you run the Upgrade IP command.
If your project has Synopsys Design Constraint (.sdc) file order dependency, this reordering may result in unexpected frequency settings or other timing assignments. You could have a project that has multiple levels of Quartus II IP (.qip) files. Inside the .qip files, you may have references to additional .qip or .sdc files. For an example, refer to the workaround section below. Incorrect .sdc settings can cause incorrect design behavior or functional errors.
A Tcl script file is available to check whether your design is affected by this issue. Download qip_checker.tcl to identify if there is any potential file order issue. You can run this script with the following command:
quartus_sh -t qip_checker.tcl [-force] <project>
For detailed usage on this script, type
quartus_sh -t qip_checker.tcl
A patch is available to fix this problem for the Quartus II software version 12.1 SP1. Download and install patch 1.33 from the appropriate link below:
- Download the version 12.1 SP1 patch 1.33 for Windows (.exe)
- Download the version 12.1 SP1 patch 1.33 for Linux (.tar)
- Download the Readme for the Quartus II software version 12.1 SP1 patch 1.33 (.txt)
This patch is compatible with the Quartus II software version 12.1 SP1 (build 243).
Patch 1.33 is not compatible with the Quartus II software version 12.1 SP1 device patches (1.dp<n>) for Stratix® V, Arria® V, and Cyclone® V devices. If you use these devices, you can fix this problem by upgrading to device patch 1.dp6 or later using the links in the related solution below.
If you are unable to use this patch, you can avoid this issue by creating a text file called quartus.ini in your project directory (if it does not already exist). Add the following line in the text file to prevent the file reordering:
disable_ip_regen=on
This option will disable some of the automatic IP regeneration features, so you may have to regenerate IP using command line operations.
If you have already run into this problem, you should perform the following steps:
- Apply the patch or apply
disable_ip_regen=on
ini setting immediately - Remove any assignment in the .qsf that has a
-qip
or-sip
argument - Check
QIP_FILE
assignments within the .qsf and remove any that do not belong to the top level - Modify the .qsf to manually correct the order of .sdc and .qip files
Below is an example of the reordering effects that you should fix manually if your design is affected.
As an example, before the Quartus II software version 12.1 SP1, a design has the following .sdc and .qip files listed in the project .qsf file:
a.qsf:
set_global_assignment -name SDC_FILE a_before.sdc
set_global_assignment -name QIP_FILE a.qip
set_global_assignment -name SDC_FILE a_after.sdc
a.qip:
set_global_assignment -name SDC_FILE aqip_before.sdc
set_global_assignment -name QIP_FILE asub.qip
set_global_assignment -name SDC_FILE aqip_after.sdc
asub.qip:
set_global_assignment -name SDC_FILE asub.sdc
The following is the file order from memory:
set_global_assignment -name SDC_FILE a_before.sdc
set_global_assignment -name QIP_FILE a.qip
set_global_assignment -name SDC_FILE aqip_before.sdc # from qip a.qip
set_global_assignment -name QIP_FILE asub.qip # from qip a.qip
set_global_assignment -name SDC_FILE asub.sdc # from qip asub.qip
set_global_assignment -name SDC_FILE aqip_after.sdc # from qip a.qip
set_global_assignment -name SDC_FILE a_after.sdc
Therefore the project reads the SDC_FILE assignments in the following order:
- a_before.sdc
- aqip_before.sdc
- asub.sdc
- aqip_after.sdc
- a_after.sdc
In the Quartus II software version 12.1 SP1, after triggering the software problem (opening project or upgrading IP), the .qsf would look as follows:
a.qsf:
set_global_assignment -name SDC_FILE a_before.sdc
set_global_assignment -name SDC_FILE a_after.sdc
set_global_assignment -name QIP_FILE a.qip
set_global_assignment -name QIP_FILE asub.qip
The following is the file order from memory:
set_global_assignment -name SDC_FILE a_before.sdc
set_global_assignment -name SDC_FILE a_after.sdc
set_global_assignment -name QIP_FILE a.qip
set_global_assignment -name SDC_FILE aqip_before.sdc # from qip a.qip
set_global_assignment -name QIP_FILE asub.qip # from qip a.qip
set_global_assignment -name SDC_FILE aqip_after.sdc # from qip a.qip
set_global_assignment -name QIP_FILE asub.qip
set_global_assignment -name SDC_FILE asub.sdc # qip asub.qip
Therefore the project reads the SDC_FILE assignments in the following order:
- a_before.sdc
- a_after.sdc
- aqip_before.sdc
- aqip_after.sdc
- asub.sdc
If the design is dependent on the order .sdc are read, this changed order may affect design optimization results and timing analysis. To fix the problem, add the ini setting as described above, then fix the .qsf to use the original correct assignment order. To quickly check if the order has been changed, refer to .qsf generated prior to the Quartus II software version 12.1 SP1.
This problem is fixed beginning with the Quartus II software version 13.0.