首页
/
行业洞察
/
正文
INDUSTRY INSIGHT · 深度
SDC命令详解:使用set_multicycle_path命令进行约束
📅 2026/10/27 18:18:19
✍️ 爱科研究院
👁 阅读 3,247
相关阅读SDC命令详解https://blog.csdn.net/weixin_45791458/category_12931432.html?spm1001.2014.3001.5482目录指定多周期值指定建立/保持时间检查指定上升/下降沿指定起点或终点指定时序路径起点指定时序路径经过点指定时序路径终点删除多周期路径添加注释Multicorner-Multimode支持单周期时序分析多周期时序分析本章将继续上章的步伐讨论第二个点到点时序时序例外命令set_multicycle_path它能改变默认的单周期时序路径分析模式这会影响时序路径的建立/保持时间的检查方式。它是一种点到点时序例外命令其他的点到点时序例外命令还有set_fasle_path、set_max_delay、set_min_delay、set_path_margin。如果想要移除多周期时序路径使用reset_path命令或-reset_path选项。本文针对Design Compiler但该命令同样存在于PrimeTime、IC Compiler等工具中它们大致相同略有差别。set_multicycle_path命令的BNF范式有关BNF范式可以参考以往文章为set_multicycle_path path_multiplier [-setup | -hold] [-rise | -fall] [-start | -end] [-from from_list | -rise_from rise_from_list | -fall_from fall_from_list] [-through through_list] [-rise_through rise_through_list] [-fall_through fall_through_list] [-to to_list | -rise_to rise_to_list | -fall_to fall_to_list] [-reset_path] [-comment comment_string] //注该命令的选项和参数顺序任意指定多周期值参数path_multiplier指定了多周期路径的周期值它会改变默认的发射/捕获时钟沿检查组合。对建立时间检查的多周期值设定也会影响保持时间检查后面会进行详细说明。一般情况下它是一个正数表示放松时序但是在某些特殊情况的约束中会出现多周期值为负数的情况例如源同步接口。指定建立/保持时间检查-setup选项指定多周期值为建立时间设置-hold选项指定多周期值为建立时间设置。如果这两个选项都没有指定默认多周期值为建立时间设置且设置保持时间的多周期值为0无任何影响。如果这两个选项都指定了相当于多周期值同时为建立时间和保持设置并为保持时间设置end属性当设置了-start选项时以其为准。指定上升/下降沿-rise选项指定只设置终点是上升沿的时序路径为多周期路径-fall选项指定只设置终点是下降沿的时序路径为多周期路径。如果这两个选项都没有指定时序路径为终点是上升沿和下降沿的多周期路径相当于它们同时指定。指定起点或终点-start选项指定多周期值是对发射时钟沿起作用设置start属性-end选项指定多周期值是对捕获时钟沿起作用设置end属性。对于建立时间默认多周期值是对捕获时钟沿起作用对于保持时间默认多周期值是对发射时钟沿起作用。指定时序路径起点-from选项、-rise_from选项、-fall_from选项指定了需要设置为多周期路径的时序路径的起点列表每条命令中它们三者中只能指定一个。-from选项指定了时序路径的起点它的参数是一个对象列表/集合对于列表而言如果有多于一个对象需要使用引号或大括号包围对使用集合无效。对象可以是时钟代表着时序路径的起点是以该时钟触发的触发器时钟引脚对象可以是端口代表着时序路径的起点是该端口对象可以是引脚代表着时序路径的起点是该引脚例如触发器时钟引脚对象可以是叶单元代表着时序路径的起点在该叶单元上。-rise_from选项指定了时序路径的上升沿起点它的参数是一个对象列表/集合对于列表而言如果有多于一个对象需要使用引号或大括号包围对使用集合无效。对象可以是时钟代表着时序路径的起点是所有以该时钟上升沿触发的触发器时钟引脚对象可以是端口代表着时序路径的起点是该端口的上升沿对象可以是引脚代表着时序路径的起点是该引脚例如触发器时钟引脚的上升沿对象可以是叶单元代表着时序路径的起点是该叶单元上的上升沿。-fall_from选项指定了时序路径的下降沿起点它的参数是一个对象列表/集合对于列表而言如果有多于一个对象需要使用引号或大括号包围对使用集合无效。对象可以是时钟代表着时序路径的起点是所有以该时钟下降沿触发的触发器时钟引脚对象可以是端口代表着时序路径的起点是该端口的下降沿对象可以是引脚代表着时序路径的起点是该引脚例如触发器时钟引脚的下降沿对象可以是叶单元代表着时序路径的起点是该叶单元上的下降沿。注意如果对象列表/集合包含时钟则此时的上升、下降沿指的是时钟对象本身的上升、下降沿而不是到达各触发器时钟引脚的上升、下降沿这里要考虑时钟在时钟路径上传播时可能因为单元的单调性出现翻转。指定时序路径经过点-through选项、-rise_through选项、-fall_through选项需要设置为多周期路径的时序路径的途经点列表这三个选项可以指定多个并可以以混合使用表示依次途径每个列表中的一个对象的时序路径。-through选项指定了时序路径的途径点它的参数是一个对象列表/集合对于列表而言如果有多于一个对象需要使用引号或大括号包围对使用集合无效。对象可以是端口代表着时序路径途径该端口对象可以是引脚代表着时序路径途径该引脚对象可以是叶单元代表着时序路径途径该叶单元。-rise_through选项指定了时序路径的上升沿途径点它的参数是一个对象列表/集合对于列表而言如果有多于一个对象需要使用引号或大括号包围对使用集合无效。对象可以是端口代表着时序路径的上升沿途径该端口对象可以是引脚代表着时序路径的上升沿途径该引脚对象可以是叶单元代表着时序路径的上升沿途径该叶单元。-fall_through选项指定了时序路径的下降沿途径点它的参数是一个对象列表/集合对于列表而言如果有多于一个对象需要使用引号或大括号包围对使用集合无效。对象可以是端口代表着时序路径的下降沿途径该端口对象可以是引脚代表着时序路径的下降沿途径该引脚对象可以是叶单元代表着时序路径的下降沿途径该叶单元。指定时序路径终点-to选项、-rise_to选项、-fall_to选项指定了需要设置为多周期路径的时序路径的终点列表每条命令中它们三者只能指定一个并且不能与-fall选项和-rise选项的指定冲突如有即如果指定了-fall选项则只能指定-fall_to选项因为没有时序路径的终点即是上升沿也是下降沿。-to选项指定了时序路径的终点它的参数是一个对象列表/集合对于列表而言如果有多于一个对象需要使用引号或大括号包围对使用集合无效。对象可以是时钟代表着时序路径的终点是以该时钟触发的触发器数据输入引脚对象可以是端口代表着时序路径的终点是该端口对象可以是引脚代表着时序路径的终点是该引脚例如触发器数据输入引脚对象可以是叶单元代表着时序路径的终点在该叶单元上。-rise_to选项指定了时序路径的上升沿终点它的参数是一个对象列表/集合对于列表而言如果有多于一个对象需要使用引号或大括号包围对使用集合无效。对象可以是时钟代表着时序路径的终点是以该时钟上升沿触发的触发器数据输入引脚对象可以是端口代表着时序路径的终点是该端口的上升沿对象可以是引脚代表着时序路径的终点是该引脚例如触发器数据输入引脚的上升沿对象可以是叶单元代表着时序路径的终点是该叶单元上的上升沿。-fall_to选项指定了时序路径的下降沿终点它的参数是一个对象列表/集合对于列表而言如果有多于一个对象需要使用引号或大括号包围对使用集合无效。对象可以是时钟代表着时序路径的终点是以该时钟下降沿触发的触发器数据输入引脚对象可以是端口代表着时序路径的终点是该端口的下降沿对象可以是引脚代表着时序路径的终点是该引脚例如触发器数据输入引脚的下降沿对象可以是叶单元代表着时序路径的终点是该叶单元上的下降沿。注意如果对象列表/集合包含时钟则此时的上升、下降沿指的是时钟对象本身的上升、下降沿而不是到达各触发器时钟引脚的上升、下降沿这里要考虑时钟在时钟路径上传播时可能因为单元的单调性出现翻转。size_only属性当指定的时序路径起点/经过点/终点包含组合逻辑叶单元的引脚则该引脚所属的叶单元会被设置size only属性确保其不会在综合过程中被优化掉需要注意的是此时的size_only属性是隐式设置的这与使用set_size_only命令显式设置不同无法使用report_attribute命令或get_attribute命令直接查看也无法使用查询命令的-filter选项过滤而只能使用report_cell命令或report_size_only命令间接查看隐式size_only属性的优先级高于显式size_only属性使用list_size_only_types命令可以列出叶单元被设置size_only属性的原因显式或隐式。当指定的时序路径起点/经过点/终点包含组合逻辑叶单元时则其会被设置size only属性确保其不会在综合过程中被优化掉需要注意的是此时的size_only属性是隐式设置的这与使用set_size_only命令显式设置不同无法使用report_attribute命令或get_attribute命令直接查看也无法使用查询命令的-filter选项过滤而只能使用report_cell命令或report_size_only命令间接查看隐式size_only属性的优先级高于显式size_only属性使用list_size_only_types命令可以列出叶单元被设置size_only属性的原因显式或隐式。删除多周期路径-reset_path选项移除了之前设置的多周期路径使用该选项时其它选项要和设置多周期路径时一样。添加注释-comment选项允许添加一条字符串注释工具会将注释保存在SDC对象中以便在使用write_sdc或write_script命令写出约束时输出准确的字符串。注释在综合、布局布线以及时序分析的流中中保持完整。Multicorner-Multimode支持该命令仅对当前场景生效换句话说只能在当前场景设置多周期路径。关于场景的更多介绍可以参考下面的博客。Design Compiler多工艺角和多工作模式(Multicorner-Multimode, MCMM)https://blog.csdn.net/weixin_45791458/article/details/149578771?ops_request_misc%257B%2522request%255Fid%2522%253A%2522e3267dcc7cc26380435f53994dc8b9b8%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fblog.%2522%257Drequest_ide3267dcc7cc26380435f53994dc8b9b8biz_id0utm_mediumdistribute.pc_search_result.none-task-blog-2~blog~first_rank_ecpm_v1~rank_v31_ecpm-1-149578771-null-null.nonecaseutm_termMCMMspm1018.2226.3001.4450单周期时序分析在学习多周期命令前我们需要先了解单周期时序路径分析的过程下面将以一个简单的例子说明。图1 一个简单的例子图1所示的简单电路中两个上升沿触发器分别受到两个时钟端口控制首先使用下面的命令在输入端口clk1和clk2定义两个时钟。create_clock -period 5 -waveform {0 2.5} [get_ports clk1] create_clock -period 20 -waveform {0 10} [get_ports clk2]图2和图3分别是这两个时钟的波形图。图2 时钟clk1波形图3 时钟clk2波形在进行单周期的建立时序分析时DC会选择选择最难满足建立时间要求的发射/捕获时钟沿组合全部组合方式为一个发射沿和其后的第一个捕获沿不重合组合。例如对于图1中的发射时钟为clk1捕获时钟为clk2的情况组合可以是下面的这些情况。发射沿0ns、捕获沿20ns。发射沿5ns、捕获沿20ns。发射沿10ns、捕获沿20ns。发射沿15ns、捕获沿20ns。发射沿20ns、捕获沿40ns这与发射沿0ns、捕获沿20ns在分析时一模一样。发射沿25ns、捕获沿40ns这与发射沿5ns、捕获沿20ns在分析时一模一样。以此类推等等....因此组合“发射沿15ns、捕获沿20ns”是最难满足的有多种等效情况。在进行单周期的保持时序分析时DC会选择选择最难满足保持时间要求的捕获时钟沿组合全部的组合方式为一个发射沿和其后的第一个捕获沿不重合前的一个捕获沿组合因此可以很容易地通过建立时序分析的组合得出建立时序分析的保持。例如对于图1中的发射时钟为clk1捕获时钟为clk2的情况组合可以是下面的这些情况。发射沿0ns、捕获沿0ns。发射沿5ns、捕获沿0ns。发射沿10ns、捕获沿0ns。发射沿15ns、捕获沿0ns。发射沿20ns、捕获沿20ns这与发射沿0ns、捕获沿0ns在分析时一模一样。发射沿25ns、捕获沿20ns这与发射沿5ns、捕获沿0ns在分析时一模一样。以此类推等等....因此组合“发射沿0ns、捕获沿0ns”是最难满足的有多种等效情况。下面的图4和图5是这种情况下的建立时序报告和保持时序报告。图4 建立时序报告图5 保持时序报告多周期时序分析有时候我们需要指定某些时序路径为多周期路径这会改变上面提到的发射/捕获时钟沿组合方式。还是拿图1的电路为例我们使用下面的命令指定从发射触发器t_reg的时钟引脚CK到捕获触发器data_out_reg的数据引脚D的时序路径为建立时间分析时的多周期路径周期数为2捕获时钟沿起作用可以使用report_timing_requirements命令报告多周期路径如图6所示。set_multicycle_path 2 -from [get_pins t_reg/CK] -to [get_pins data_out_reg/D] -setup -end #上面的命令中-end选项是可以省略的图6 多周期路径报告这里顺带一提如果不指定-setup则保持时间的多周期值会被设置为0无任何影响如图7所示它们是等效的。图7 多周期路径报告建立保持时间的多周期值设置为2会导致原本的建立时间的发射/捕获时钟沿组合方式变为一个发射沿和其后的第二个捕获沿不重合组合即将原来的捕获沿向后移动一个周期如下所示。发射沿0ns、捕获沿40ns。发射沿5ns、捕获沿40ns。发射沿10ns、捕获沿40ns。发射沿15ns、捕获沿40ns。发射沿20ns、捕获沿60ns这与发射沿0ns、捕获沿40ns在分析时一模一样。发射沿25ns、捕获沿60ns这与发射沿5ns、捕获沿40ns在分析时一模一样。以此类推等等....因此组合“发射沿15ns、捕获沿40ns”是最难满足的有多种等效情况图8是此时的建立时间时序报告。图8 建立时间报告建立时间的多周期值设置为2还会影响原本的保持时间的发射/捕获时钟沿这是因为保持时间的检查方式是由建立时间的检查方式为基础导出的组合方式变为一个发射沿和其后的第一个捕获沿不重合组合多周期建立时间检查的捕获沿的前一个沿如下所示。发射沿0ns、捕获沿20ns。发射沿5ns、捕获沿20ns。发射沿10ns、捕获沿20ns。发射沿15ns、捕获沿20ns。发射沿20ns、捕获沿40ns这与发射沿0ns、捕获沿20ns在分析时一模一样。发射沿25ns、捕获沿40ns这与发射沿5ns、捕获沿20ns在分析时一模一样。以此类推等等....因此组合“发射沿0ns、捕获沿20ns”是最难满足的有多种等效情况图9是此时的保持时间时序报告图中选择了等效组合“发射沿20ns、捕获沿40ns”。图9 保持时间报告接着我们使用下面的命令指定从发射触发器t_reg的时钟引脚CK到捕获触发器data_out_reg的数据引脚D的时序路径为保持时间分析时的多周期路径周期数为1发射时钟沿起作用可以使用report_timing_requirements命令报告多周期路径如图10所示。set_multicycle_path 1 -from [get_pins t_reg/CK] -to [get_pins data_out_reg/D] -hold -start #上面的命令中-start选项是可以省略的图10 多周期路径报告保持时间的多周期值设置为1导致在原本的保持时间的发射/捕获时钟沿组合方式以被建立时间多周期影响后基础上发射沿又往后移动了一个周期即一个发射沿和其前一个发射沿的后一个捕获沿组合如下所示。发射沿5ns、捕获沿20ns。发射沿10ns、捕获沿20ns。发射沿15ns、捕获沿20ns。发射沿20ns、捕获沿20ns。发射沿25ns、捕获沿40ns这与发射沿5ns、捕获沿20ns在分析时一模一样。发射沿30ns、捕获沿40ns这与发射沿10ns、捕获沿20ns在分析时一模一样。以此类推等等....因此组合“发射沿5ns、捕获沿20ns”是最难满足的有多种等效情况图11是此时的保持时间时序报告图中选择了等效组合“发射沿25ns、捕获沿40ns”。图11 保持时间报告当然也可以不使用默认情况即在指定建立时间分析的多周期值时使用-start选项此时会向前移动发射沿对于默认情况下或指定-end选项是向后移动捕获沿在指定保持时间分析的多周期值时使用-end选项此时会向前移动捕获沿对于默认情况下或指定-start选项是向后移动发射沿。总之一个正的多周期值会导致建立时间和保持时间的检查更为宽松反之一个负的多周期值会导致建立时间和保持时间的检查更为严格。另外要注意的是对于建立时间的多周期值N指的是移动N-1个周期而对于保持时间的多周期值N指的是移动N个周期。
📌 标签:
工业官网
设计趋势
AI 建站
SEO
获取完整报告 →
RELATED ARTICLES
推荐阅读
2026/10/27 18:13:18
普通二本学弟如何逆袭大厂offer?拆解可复制的学习路径
2026/10/27 18:13:18
永磁同步电机低速无感FOC:d轴正弦波高频注入HFI从原理到实战
2026/10/27 18:13:18
.NET OPC UA客户端实战:连接、读写、订阅与心跳重连
2026/10/27 19:08:40
Python中文文本情感分析全流程:分词、打分与可视化
2026/10/27 19:08:40
AI人格向量控制技术解析与应用实践
2026/10/27 19:08:40
GRPO强化学习实战:从PPO显存痛点到组内优势与训练排坑
2026/10/27 19:08:40
GRPO强化学习微调:去掉Critic的PPO原理与TRL实战
2026/10/27 19:08:40
Oracle数据库锁机制解析与实战处理指南
2026/10/27 19:03:36
蒸汽系统设计与能效优化实战指南:从疏水阀选型到冷凝水回收
2026/10/27 0:04:20
WorkBuddy_新建任务与工作模式19_“模式选错”的典型代价
2026/10/27 0:04:20
WorkBuddy_新建任务与工作模式20_新手推荐路径
2026/10/27 0:04:20
ZerolanLiveRobot开发者指南:如何扩展一个新服务并注册自定义事件(附完整实战示例)
2026/10/27 11:41:45
全国计算机二级C语言真题PDF高效刷题指南
2026/10/27 9:24:40
requests+BeautifulSoup:爬虫抓取h1标题的入门实战指南
2026/10/27 12:03:45
递推最小二乘参数辨识MATLAB编程:二阶系统与渐消记忆实现
2026/10/25 22:15:16
我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频
2026/10/26 11:29:48
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证
2026/10/25 12:42:56
2026 大模型集体涨价:用 Python 做企业 Token 成本测算与选型避坑(附配置)