在Quartus II软件版本12.1 SP1中打开项目或重新生成IP时,项目.qsf中的.qip / .sdc文件会重新排序。
由于Quartus®II12.1 SP1中的问题,项目的Quartus II设置文件( .qsf )中的顺序可能会意外更改。
当您打开现有项目或运行升级IP命令时,可能会发生此问题。
如果您的项目具有Synopsys Design Constraint( .sdc )文件顺序依赖项,则此重新排序可能会导致意外的频率设置或其他时序分配。您可以拥有一个具有多级Quartus II IP( .qip )文件的项目。在.qip文件中,您可能引用了其他.qip或.sdc文件。有关示例,请参阅下面的解决方法部分。不正确的.sdc设置可能导致不正确的设计行为或功能错误。
解决/修复方法
可以使用Tcl脚本文件来检查您的设计是否受此问题的影响。下载qip_checker.tcl以确定是否存在任何潜在的文件订单问题。您可以使用以下命令运行此脚本:
quartus_sh -t qip_checker.tcl [-force] <project>
有关此脚本的详细用法,请键入
quartus_sh -t qip_checker.tcl
有一个补丁可以解决Quartus II软件12.1 SP1的这个问题。从以下相应链接下载并安装补丁1.33:
- 下载适用于Windows(.exe)的12.1 SP1补丁1.33版
- 下载适用于Linux的版本12.1 SP1补丁1.33(.tar)
- 下载Quartus II软件12.1 SP1补丁1.33(.txt)的自述文件
该补丁与Quartus II软件12.1 SP1(版本243)兼容。
Patch 1.33与Stratix®V,Arria®V和Cyclone®V器件的Quartus II软件版本12.1 SP1器件补丁(1.dp <n> )不兼容。如果您使用这些器件,则可以使用下面相关解决方案中的链接升级到器件补丁1.dp6或更高版本来解决此问题。
如果您无法使用此修补程序,则可以通过在项目目录中创建名为quartus.ini的文本文件(如果它尚不存在)来避免此问题。在文本文件中添加以下行以防止文件重新排序:
disable_ip_regen=on
此选项将禁用某些自动IP重新生成功能,因此您可能必须使用命令行操作重新生成IP。
如果您已遇到此问题,则应执行以下步骤:
- 应用补丁或立即
disable_ip_regen=on
ini设置中应用disable_ip_regen=on
- 删除.qsf中具有
-qip
或-sip
参数的任何赋值 - 检查
QIP_FILE
的.qsf内分配和移除任何不属于顶级水平 - 修改.qsf以手动更正.sdc和.qip文件的顺序
下面是您的设计受到影响时应手动修复的重新排序效果的示例。
作为一个例子,Quartus II软件12.1版SP1之前,一个设计有以下.sdc和项目.qsf文件中列出.qip文件:
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
以下是内存中的文件顺序:
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
因此,项目按以下顺序读取SDC_FILE分配:
- a_before.sdc
- aqip_before.sdc
- asub.sdc
- aqip_after.sdc
- a_after.sdc
在Quartus II软件版本12.1 SP1中,触发软件问题(打开项目或升级IP)后, .qsf将如下所示:
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
以下是内存中的文件顺序:
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
因此,项目按以下顺序读取SDC_FILE分配:
- a_before.sdc
- a_after.sdc
- aqip_before.sdc
- aqip_after.sdc
- asub.sdc
如果设计依赖于订单.sdc被读取,则此更改的顺序可能会影响设计优化结果和时序分析。要解决此问题,请按上述方法添加ini设置,然后修复.qsf以使用原始正确的分配顺序。要快速检查订单是否已更改,请参阅Quartus II 12.1 SP1之前生成的.qsf 。
从Quartus II软件版本13.0开始修复此问题。