当前位置: 首页 > news >正文

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

相关阅读

静态时序分析https://blog.csdn.net/weixin_45791458/category_12567571.html?spm=1001.2014.3001.5482


        set_sense命令用于在时钟路径上存在非单调(Non Unate)单元时(比如异或门和同或门)设置时钟极性,如果想要移除极性设置,使用remove_sense命令。

        本文针对Design Compiler,但该命令同样存在于PrimeTime、IC Compiler等工具中,它们大致相同,略有差别(该命令是在SDC 2.1引入的,同时之前的set_clock_sense命令被废除)。set_ideal_network命令的BNF范式(有关BNF范式,可以参考以往文章)为:

set_sense
    pins
    [-type clock]
    [-positive]
    [-negative]
    [-stop_propagation]
    [-pulse pulse_type]
    [-clocks clock_list]
    [-clock_leaf]
    //注:该命令的选项和参数顺序任意

时钟极性

        不管是数据信号还是时钟信号,都会因为路径上单元的单调性而进行翻转,常见的正单调性(Positive Unate)的单元有与门和或门,常见的负单调性(Negative Unate)的单元有反相器、与非门和或非门,有关单调性的详细介绍,可以参考下面的博客。

静态时序分析:时序弧以及其时序敏感(单调性)https://blog.csdn.net/weixin_45791458/article/details/135970796?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522337a2ecbb0029b40661d27bfffd8b559%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fblog.%2522%257D&request_id=337a2ecbb0029b40661d27bfffd8b559&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~blog~first_rank_ecpm_v1~rank_v31_ecpm-1-135970796-null-null.nonecase&utm_term=%E5%8D%95%E8%B0%83%E6%80%A7&spm=1018.2226.3001.4450        假设时钟信号源的极性为正,当通过负单调性的单元时,极性取反;当通过正单调性的单元时,极性不变。例如,当时钟信号通过偶数个反相器时,极性为正;当时钟信号通过偶数个反相器时,极性为负。

        图1展示了当时钟路径上存在反相器的情况。

图1 时钟路径上的反相器

        首先使用create_clock命令以clk端口为源对象创建一个周期为10的时钟,图2为clk时钟的报告,可以看出上升沿在0ns而下降沿在5ns。

create_clock -period 10 [get_port clk]

图2 时钟报告

        由于时钟路径上的反相器,到达触发器的时钟信号极性为负,此时的时序报告如图3所示。

图3 建立时间时序报告

        可以从图3中看出,由于时钟clk经过反相器后极性变为负,时钟报告中使用了clk'来表示该时钟,即时钟clk的下降沿对应于clk'的上升沿。

        图4展示了时钟路径中存在异或门的情况。

图4 时钟路径上的异或门

        由于时钟路径上的异或门,到达触发器的时钟信号极性无法确定,此时的时序报告如图5所示。

        可以从图5中看出,时钟报告中考虑了最严格的情况,即在发射时钟沿与捕获时钟沿是不同极性的时钟,此时时钟沿间只有5ns的间隔。

指定引脚

        指定一个设置时钟极性的叶单元(Leaf Cell)的引脚,而不可以是层次单元的引脚。关于什么是叶单元可以参考下面的博客。

静态时序分析:Leaf Cell(叶单元)https://blog.csdn.net/weixin_45791458/article/details/140306133?ops_request_misc=%257B%2522request%255Fid%2522%253A%252240bad359055f68892ab10388c40033dd%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fblog.%2522%257D&request_id=40bad359055f68892ab10388c40033dd&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~blog~first_rank_ecpm_v1~rank_v31_ecpm-1-140306133-null-null.nonecase&utm_term=leaf&spm=1018.2226.3001.4450

指定类型

        -type选项用于指定极性类型,对于Design Compiler而言,该选项的参数只能是clock,对于PrimeTime而言,该选项还可以使用data参数(在本文中不讨论)。

指定正单调性

        -positive选项用于指定只有正单调性的时序弧能传播过指定引脚,即时钟极性不变。

        该选项不能和-negative、-stop_propagation、-pulse、-clock_leaf选项一起使用。

指定负单调性

        -negative选项用于指定只有负单调性的时序弧能传播过指定引脚,即时钟极性改变。

        该选项不能和-positive、-stop_propagation、-pulse、-clock_leaf选项一起使用。

指定停止传播

        -stop_propagation选项用于指定停止经过指定引脚的时钟传播。

        该选项不能和-positive、-negative、-pulse、-clock_leaf选项一起使用。

指定时钟脉冲

        -pulse选项用于指定产生脉冲,它的参数可以是rise_triggered_high_pulse、rise_triggered_low_pulse、fall_triggered_high_pulse、fall_triggered_low_pulse之中的一个。

        该选项不能和-positive、-negative、-stop_propagation、-clock_leaf选项一起使用。

        时钟脉冲的类型如图5所示,如果不使用set_sense -pulse命令或者set_propagated_clock命令,Design Compiler无法识别时钟脉冲,也就无法在触发器时钟引脚检查最小脉冲宽度约束。

图5 时钟脉冲的产生

        对于理想时钟,时钟脉冲的宽度可以使用set_clock_latency -rise/-fall分别定义;而对于传播时钟,时钟脉冲的宽度是由真实路径计算出来的。

指定时钟

        -clocks选项用于指定时钟对象列表,如果不指定该选项,设置的时钟极性会应用于所有通过指定引脚的时钟。

指定时钟叶节点

        -clock_leaf选项用于指定停止经过指定引脚的时钟传播。此选项还指定引脚为时钟消费者,因此到达该引脚的时钟分支也会被视为时钟消费者(换句话说,所有到达指定引脚的时钟分支的引脚都会标记为is_clock_used_as_clock属性为真)。

        该选项不能和-positive、-negative、-stop_propagation、-pulse选项一起使用。

简单使用

        下面以图6为例说明set_sense命令的使用。

图6 时钟路径上的异或门

        首先使用create_clock命令以clk端口为源对象创建一个周期为10的时钟。 

create_clock -period 10 [get_port clk]

        然后使用set_sense命令设置只有正单调的时序弧能通过U4/Y引脚。

set_sense -positive [get_pin U4/Y]

        此时的时序报告如图7所示,可以看出到达触发器的时钟极性为正,上升沿在0ns而下降沿在5ns。

图7 建立时间时序报告

相关文章:

  • ​​vue-router编程式导航,params传参拿不到
  • FastAPI复杂查询终极指南:告别if-else的现代化过滤架构
  • Secs/Gem第一讲(基于secs4net项目的ChatGpt介绍)
  • 《JavaScript高级程序设计(第5版)》学习大纲
  • 【通缩螺旋的深度解析与科技破局路径】
  • Java中关于Optional的 orElse 操作,以及 orElse 与 orElseGet 的区别
  • 目标跟踪之DeepSort算法(4)
  • 响应(Response)
  • pgsql创建新用户并赋只读权限
  • 拥有一台云服务器能做什么呢?
  • fprintf() 函数:C语言中的文件格式化输出利器
  • 使用 Arduino 和 ThingSpeak 通过互联网进行实时温度和湿度监测
  • Android Studio执行Run操作报Couldn‘t terminate previous instance of app错误
  • Java 大视界 -- Java 大数据在智能教育虚拟实验室建设与实验数据分析中的应用(132)
  • leetcode0027 移除元素 - easy
  • 结构体的简单介绍(C语言)
  • 超精密工件小孔几何尺寸测量:自动化解决方案
  • 使用 Python 爬取微店关键词搜索接口(micro.item_search)的完整指南
  • 农业建设项目管理系统评测:8款推荐工具优缺点分析
  • iWebOffice2015 中间件如何在Chrome107及之后的高版本中加载
  • 世卫大会拒绝涉台提案,外交部:坚持一个中国原则是人心所向
  • 上海银行副行长汪明履新上海农商银行党委副书记
  • 美国贸易政策|特朗普模式:你想做交易吗?
  • 流失海外79年,两卷战国帛书回归祖国
  • 舞者王佳俊谈“与AI共舞”:像多了一个舞伴,要考虑它的“感受”
  • 上市公司重大资产重组新规九要点:引入私募“反向挂钩”,压缩审核流程