在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:

该补丁与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。

如果您已遇到此问题,则应执行以下步骤:

  1. 应用补丁或立即disable_ip_regen=on ini设置中应用disable_ip_regen=on
  2. 删除.qsf中具有-qip-sip参数的任何赋值
  3. 检查QIP_FILE.qsf内分配和移除任何不属于顶级水平
  4. 修改.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分配:

  1. a_before.sdc
  2. aqip_before.sdc
  3. asub.sdc
  4. aqip_after.sdc
  5. 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分配:

  1. a_before.sdc
  2. a_after.sdc
  3. aqip_before.sdc
  4. aqip_after.sdc
  5. asub.sdc

如果设计依赖于订单.sdc被读取,则此更改的顺序可能会影响设计优化结果和时序分析。要解决此问题,请按上述方法添加ini设置,然后修复.qsf以使用原始正确的分配顺序。要快速检查订单是否已更改,请参阅Quartus II 12.1 SP1之前生成的.qsf

从Quartus II软件版本13.0开始修复此问题。

编辑 重设标签(回车键确认) 标为违禁 关闭 合并 删除

提问于 2018-08-04 14:19:26 +0800

这个帖子被标记为一个社区wiki

这个帖子是一个wiki(维基). 任何一个积分 >500的人都可以完善它