当前位置: 首页 > 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_sensepins[-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 建立时间时序报告


http://www.mrgr.cn/news/94460.html

相关文章:

  • C++初阶——类和对象(一)
  • 万字长文详解嵌入式电机软件开发
  • 搭建基于flask的web应用框架
  • Linux内核实时机制19 - RT调度器4 - 实时就绪队列维护
  • Spring Boot整合JWT 实现双Token机制
  • Nginx快速上手
  • 《计算机图形学》第二课笔记-----二维变换的推导
  • 《解锁Netlify:静态网站托管》:此文为AI自动生成
  • MATLAB 控制系统设计与仿真 - 26
  • 《基於Python的网络爬虫抓包技术研究与应用》
  • Java8的新特性
  • Python字符串高效优化策略:特定编码 -> Unicode码点 -> UTF-8(可自定义)
  • 序列化和反序列化TCP粘包问题
  • 《GitHub网路访问不稳定:解决办法》:此文为AI自动生成
  • 【原创】在高性能服务器上,使用受限用户运行Nginx,充当反向代理服务器[未完待续]
  • Java高级-04.反射-获取成员变量和方法对象并使用
  • QT中读取QSetting文件
  • Android 高版本 DownloadManager 封装工具类,支持 APK 断点续传与自动安装
  • C++ primer plus 类和对象下
  • VSCode C/C++ 开发环境完整配置及常见问题(自用)