文档目录

1.7.3.4. 创建SDC-on-RTL SDC文件中的约束

SDC 2.1合规性

SDC-on-RTL SDC是一种行业标准,可提供针对您RTL的约束。目标节点从解析的网表中来,并与您的RTL紧密结合。您可以定位层次节点,并通过各种编译阶段将约束传递到编译流程中。

注: read_sdc命令将SDC-on-RTL SDC文件加载到Timing Analyzer中。根据您加载的快照,read_sdc尝试读取适合该快照的其他SDC。有关用于不同用例的SDC文件类型的其他信息,请参阅 Quartus® Prime软件中使用的SDC文件类型

Quartus® Prime软件保留SDC-on-RTL SDC文件中约束的顺序。您在SDC文件中列出的约束的顺序定义了将他们加载到 Quartus® Prime软件中的顺序。

SDC-on-RTL约束旨在仅支持符合SDC 2.1的命令。因而显然缺少对象访问程序,例如get_keepersget_registersget_nodes。以下列出的是支持的SDC命令,您可以在 Quartus® Prime专业版用户指南:脚本编写中的TCL Commands and Packages SummaryTCL部分找到更多关于他们的信息:

  • create_clock
  • create_generated_clock
  • set_input_delay
  • set_output_delay
  • set_false_path
  • set_max_delay
  • set_min_delay
  • set_multicycle_path
  • set_clock_groups
  • set_clock_latency
  • set_clock_uncertainty
  • set_data_delay
  • set_net_delay
  • set_max_skew
注:

并非所有这些命令都支持SDC 2.1参数的完整选择,因为Timing Analyzer不支持所有参数。如果指定了不受支持的参数,这些命令会发出告警消息并忽略该参数。如果您在Timing Analyzer中遇到告警时希望出现的是Tcl错误,则请使用以下命令:

set_global_assignment -name ERROR_ON_WARNINGS_LOADING_SDC_ON_RTL_CONSTRAINTS ON

识别时序路径

为了定义时序路径,请使用SDC标准访问程序,例如get_pins,而不是特定于 Quartus® Prime软件的命令,例如get_keepersget_registers Intel® 建议在定位目标时使用明确的 get_<pins|ports|nets> 命令。使用裸名称可能会导致无意目标,并且数据库会发出告警。

Quartus® Prime Conventional SDC (目标 Quartus® Prime时序图):
set_false_path -from [get_keepers { reg_A }] -to [get_keepers { reg_B }]
SDC-on-RTL SDC (针对您的网表节点):
set_false_path -from [get_pins { reg_A|clk }] -to [get_pins { reg_B|d }]
注: 该路径必须从寄存器clk管脚来识别时序路径。如果您的设计使用reg_A|d或者reg_A|q,则Timing Analyzer中的时序路径无效,如Report Exception报告中所示:
状态 例外命令 From标志 From To标志 To 建立裕量
Complete set_false_path -from

[get_pins{tf_sync[0] |ff_src|clk}]

-to

[get_pins{tf_sync[0] |ff_dst|d}]

3.603
Invalid set_false_path -from

[get_pins{tf_sync[2] |ff_src|q}]

-to

[get_pins{tf_sync[2] |ff_dst|d}]

Invalid
Invalid set_false_path -from

[get_pins{tf_sync[3] |ff_src|d}]

-to

[get_pins{tf_sync[3] |ff_dst|d}]

Invalid
注: 网表目标区分大小写。有时,较低级别的模块端口为大写。该情况下,使用-nocase选项以及get_<pins|ports|nets> 命令来忽略大小写敏感性。

调试SDC-on-RTL约束

有几种方法可以调试SDC-on-RTL约束。例如,您可以隔离设计中使用约束的确切位置,并在流程中对其进行分析。您还可以使用报告约束的编译报告(请参阅Elaboration Constraints Compilation Report)。然而,在调试约束时,请考虑以下几点:

加载约束时出现明确错误

读取SDC-on-RTL约束时出错,会通过命令堆栈发出错误消息,显示有问题的命令的行号。例如:

图 50. 通过命令堆栈的错误消息

您可以直接通过Tcl控制台调试错误约束。您可以在此早期阶段轻松地迭代初始目标解决方案或命令语法问题,因为这是 Quartus® Prime软件加载SDC-on-RTL SDC文件的阶段。

注:

一般来说,无法将SDC-on-RTL约束直接加载到Timing Analyzer中,原因如下:

  • 目标网表中的数据与解析网表中的数据有所不同,而与时序网表中的数据则没有区别。虽然两个网表之间可能存在一些共同节点,但两个网表不相同。
  • SDC-on-RTL中使用的是合规SDC 2.1语法,可能与传统的Quartus SDC命令不同。

尽管有这些警告,如果您仍然希望尝试在将SDC文件加载到Timing Analyzer中,请使用read_sdc <sdc filename>.

约束行为和解释问题

处理约束时,请确保以下事项:

  • 标和基本语法正确(节点查找或目标获取)。您可以使用RTL Analyzer在elaborated网表上查找节点。
  • 约束对于时序图 (约束行为) 的意义。您可以在Timing Analyzer中查看相关内容。

    从设计网表检查传达给Timing Analyzer的SDC-on-RTL约束(import_sdc仅加载SDC-on-RTL命令)。经过在编译流程多个阶段的传播后,import_sdc命令加载SDC-on-RTL约束的一个版本。完成该步骤后,体验与典型的Timing Analyzer会话相同。

注: 虽然 Intel® 不建议从Timing Analyzer加载原始SDC-on-RTL SDC文件,您可以使用Timing Analyzer Tcl控制台发出与Timing Analyzer兼容的SDC命令来调试您的设计。通过直接发出SDC命令,您可以覆盖SDC-on-RTL约束并探索更改该值的效果。但是,更改仅对当前时序分析环节有效。对于永久性更改,您必须更新源SDC-on-RTL SDC文件并重新运行Analysis and Elaboration。