静态时序分析:SDC约束命令set_multicycle_path详解

相关阅读

静态时序分析icon-default.png?t=N7T8https://blog.csdn.net/weixin_45791458/category_12567571.html


目录

指定多周期值

指定建立/保持时间检查

指定上升/下降沿

指定起点或终点

指定时序路径起点

删除多周期路径

添加注释

单周期时序分析

多周期时序分析


        本章将继续上章的步伐,讨论第二个点到点时序时序例外命令set_multicycle_path,它能改变默认的单周期时序路径分析模式,这会影响时序路径的建立/保持时间的检查方式。

        set_multicycle_path指令的BNF范式(有关BNF范式,可以参考以往文章)为:

set_multicycle_pathpath_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选项指定了时序路径的下降沿终点,它的参数是一个对象列表,如果有多于一个对象,需要使用引号或大括号包围。对象可以是时钟,代表着时序路径的终点是以该时钟下降沿触发的触发器数据输入引脚(这里要考虑时钟在时钟路径上传播时可能因为单元的单调性出现翻转,即以到达触发器时钟引脚的时钟信号下降沿为准);对象可以是端口,代表着时序路径的终点是该端口的下降沿;对象可以是引脚,代表着时序路径的终点是该引脚(例如触发器数据输入引脚)的下降沿;对象可以是单元,代表着时序路径的起点在该单元上(例如该单元数据输入引脚)的下降沿。 

删除多周期路径

        -reset_path选项移除了之前设置的多周期路径,使用该选项时,其它选项要和设置多周期路径时一样。

添加注释

        -comment选项允许添加一条字符串注释,工具会将注释保存在SDC对象中,以便在使用write_sdc或write_script命令写出约束时输出准确的字符串。注释在综合、布局布线以及时序分析的流中中保持完整。

单周期时序分析

        在学习多周期命令前,我们需要先了解单周期时序路径分析的过程,下面将以一个简单的例子说明。

图1 一个简单的例子

        图1所示的简单电路中两个上升沿触发器分别受到两个时钟端口控制,首先使用下面的命令在输入端口clk_1和clk_2定义两个时钟。

create_clock -period 5 -waveform {0 2.5} [get_port clk_1]
create_clock -period 20 -waveform {0 10} [get_port clk_2]

        图2和图3分别是这两个时钟的波形图。

图2 时钟clk_1波形

图3 时钟clk_2波形

        在进行单周期的建立时序分析时,DC会选择选择最难满足建立时间要求的发射/捕获时钟沿组合,全部组合方式为:一个发射沿,和其后的第一个捕获沿(不重合)组合。例如对于图1中的发射时钟为clk_1,捕获时钟为clk_2的情况,组合可以是下面的这些情况。

  • 发射沿0ns、捕获沿20ns。
  • 发射沿5ns、捕获沿20ns。
  • 发射沿10ns、捕获沿20ns。
  • 发射沿15ns、捕获沿20ns。
  • 发射沿20ns、捕获沿40ns(这与发射沿0ns、捕获沿20ns在分析时一模一样)。
  • 发射沿25ns、捕获沿40ns(这与发射沿5ns、捕获沿20ns在分析时一模一样)。
  • 以此类推,等等....

        因此组合“发射沿15ns、捕获沿20ns”是最难满足的(有多种等效情况)。

        在进行单周期的保持时序分析时,DC会选择选择最难满足保持时间要求的捕获时钟沿组合,全部的组合方式为:一个发射沿,和其后的第一个捕获沿(不重合)前的一个捕获沿组合,因此可以很容易地通过建立时序分析的组合得出建立时序分析的保持。例如对于图1中的发射时钟为clk_1,捕获时钟为clk_2的情况,组合可以是下面的这些情况。

  • 发射沿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_pin t_reg/CK] -to [get_pin 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_pin t_reg/CK] -to [get_pin 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”。

图10 保持时间报告

        当然也可以不使用默认情况,即在指定建立时间分析的多周期值时使用-start选项,此时会向前移动发射沿(对于默认情况下的向后移动捕获沿);在指定保持时间分析的多周期值时使用-end选项,此时会向前移动捕获沿(对于默认情况下的向后移动发射沿)。总之,多周期的指定,会导致建立时间和保持时间的检查更为宽松。另外要注意的是,建立时间的多周期值N指的是移动N-1,而保持时间时间的多周期值N指的是移动N。

       

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/526029.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

php集成修改数据库的字段

1.界面效果 2.代码 <?phpecho <form action"" method"post"><label for"table">表名:</label><input type"text" id"table" name"table"><br><div id"fieldsContaine…

文本生成视频:从 Write-a-video到 Sora

2024年2月15日&#xff0c;OpenAI 推出了其最新的文本生成视频模型——Sora。Sora 能够根据用户的指令生成一分钟长度的高质量视频内容。这一创新的发布迅速在社会各界引发了广泛关注与深入讨论。本文将围绕本实验室发表于SIGGRAPH AISA 的 Write-a-video和 Sora 展开&#xff…

提示词微调:LLMs适应新任务的强大技术

原文地址&#xff1a;Prompt Tuning: A Powerful Technique for Adapting LLMs to New Tasks 2023 年 10 月 18 日 提示词微调是一种通过训练少量提示参数来使大型语言模型 (LLM) 适应新任务的技术。提示文本添加在输入文本之前&#xff0c;以指导LLM生成所需的输出。由于其高…

深入分析Java线程池——ThreadPoolExecutor

文章目录 Java 线程池概述ThreadPoolExecutor 构造方法线程池拒绝策略工作流程并发库中的线程池CachedThreadPoolFixedThreadPoolSingleThreadExecutorScheduledThreadPool ThreadPoolExecutor 源码分析线程池状态表示获取 runState获取 workerCount生成 ctl 提交任务 execute(…

ARTS Week 20

Algorithm 本周的算法题为 1222. 可以攻击国王的皇后 在一个 下标从 0 开始 的 8 x 8 棋盘上&#xff0c;可能有多个黑皇后和一个白国王。 给你一个二维整数数组 queens&#xff0c;其中 queens[i] [xQueeni, yQueeni] 表示第 i 个黑皇后在棋盘上的位置。还给你一个长度为 2 的…

日期问题---算法精讲

前言 今天讲讲日期问题&#xff0c;所谓日期问题&#xff0c;在蓝桥杯中出现众多&#xff0c;但是解法比较固定。 一般有判断日期合法性&#xff0c;判断是否闰年&#xff0c;判断日期的特殊形式&#xff08;回文或abababab型等&#xff09; 目录 例题 题2 题三 总结 …

WPF 窗口添加投影效果Effect

BlurRadius&#xff1a;阴影半径 Color&#xff1a;颜色 Direction&#xff1a;投影方向 ShadowDepth&#xff1a;投影的深度 <Window.Effect><DropShadowEffect BlurRadius"10" Color"#FF858484" Direction"300" ShadowDepth&quo…

云计算项目十一:构建完整的日志分析平台

检查k8s集群环境&#xff0c;master主机操作&#xff0c;确定是ready 启动harbor [rootharbor ~]# cd /usr/local/harbor [rootharbor harbor]# /usr/local/bin/docker-compose up -d 检查head插件是否启动&#xff0c;如果没有&#xff0c;需要启动 [rootes-0001 ~]# system…

代码学习记录15

随想录日记part15 t i m e &#xff1a; time&#xff1a; time&#xff1a; 2024.03.09 主要内容&#xff1a;今天的主要内容是二叉树的第四部分&#xff0c;主要涉及平衡二叉树的建立&#xff1b;二叉树的路径查找&#xff1b;左叶子之和&#xff1b;找树左下角的值&#xff…

毅速3D打印随形透气钢:模具困气排气革新之选

在注塑生产过程中&#xff0c;模具内的气体若无法有效排出&#xff0c;往往会引发困气现象&#xff0c;导致产品表面出现气泡、烧焦等瑕疵。这些瑕疵不仅影响产品的美观度&#xff0c;更可能对其性能造成严重影响&#xff0c;甚至导致产品报废&#xff0c;从而增加生产成本。 传…

用C语言执行SQLite3的gcc编译细节

错误信息&#xff1a; /tmp/cc3joSwp.o: In function main: execSqlite.c:(.text0x100): undefined reference to sqlite3_open execSqlite.c:(.text0x16c): undefined reference to sqlite3_exec execSqlite.c:(.text0x174): undefined reference to sqlite3_close execSqlit…

数据结构入门篇 之 【单链表】的实现讲解(附单链表的完整实现代码以及用单链表完成通讯录的实现代码)

虽然封面是顶针&#xff0c;但是我们还是要好好学习❀ 一.单链表 1.单链表的概念 2.单链表的结构 3.单链表的实现 1&#xff09;.尾插函数 SLTPushBack 2&#xff09;.打印函数 SLPrint 3&#xff09;. 头插函数 SLTPushFront 4&#xff09;.尾删函数 SLTPopBack 5&am…