关键问题
由于 Quartus® II 软件版本 12.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]
有关此脚本的详细用法,键入
quartus_sh -t qip_checker.tcl
我们提供一个补丁来修复 Quartus® II 软件版本 12.1 SP1 的此问题。从以下相应链接下载并安装补丁 1.33:
- 下载面向 Windows (.exe) 的版本 12.1 SP1 补丁 1.33
- 下载面向 Linux (.tar) 的版本 12.1 SP1 补丁 1.33
- 下载 Quartus® II 软件版本 12.1 SP1 补丁 1.33 (.txt) 的自述文件
此补丁与 Quartus® II 软件版本 12.1 SP1(内部版本 243)兼容。
Patch 1.33 与 Quartus® II 软件版本 12.1 SP1 器件补丁(1.dp)不兼容,适用于 Stratix® V、Arria® V 和 Cyclone® V 设备。如果您使用这些设备,可以使用以下相关解决方案中的链接升级到设备补丁 1.dp6 或更高版本来解决此问题。
如果您无法使用此补丁,您可以通过在项目目录中创建名为 quartus.ini 的文本文件来避免此问题(如果不存在)。在文本文件中添加以下行以防止文件重新排序:
disable_ip_regen=on
此选项将禁用一些自动 IP 重新生成功能,因此您可能必须使用命令行操作来重新生成 IP。
如果您已经遇到此问题,您应该执行以下步骤:
- 立即应用修补程序或应用
disable_ip_regen=on
ini 设置 - 在具有或参数的 .qsf中删除任何分配
-qip
-sip
- 在
QIP_FILE
.qsf 中检查分配并删除任何不属于顶级的任务 - 修改 .qsf 以手动更正 .sdc 和 .qip 文件的顺序
以下是一个重新排序效果的示例,如果您的设计受到影响,应手动修复。
例如,在 Quartus® II 软件版本 12.1 SP1 之前,设计有项目.qsf文件中列出的以下.sdc和.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 版本开始修复。