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

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

相关阅读

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


        本章将讨论如何使用set_clock_jitter命令模拟设计中的时钟抖动(clock jitter),传统流程中往往将时钟抖动包含在时钟不确定度(uncertainty)之中,使用set_clock_uncertainty命令进行约束,但这需要进行较多的人为干预,例如保持时间的不确定度应小于建立时间的不确定度,因为保持时间检查在同一个时钟沿进行,所以只受到时钟偏差的影响。

        set_clock_jitter命令只适用于发射时钟和捕获时钟都为同一时钟的情况,如果时钟类型为生成时钟,还要求其为使用-multiply_by选项创建的生成时钟。

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

set_clock_jitter
    [-cycle cycle_to_cycle_jitter]
    [-duty_cycle duty_cycle_jitter]
    -clocks clock_list
    //注:该命令的选项和参数顺序任意

指定周期抖动值

        -cycle选项指定了周期抖动值,当发射时钟沿和捕获时钟沿相隔为时钟周期的整数倍时,周期抖动值生效。

指定占空比抖动值

        -duty_cycle选项指定了占空比抖动值,当发射时钟沿和捕获时钟沿相隔不是时钟周期的整数倍时,占空比抖动值生效。

指定时钟列表

        -clocks选项指定了应用抖动值的时钟。

周期抖动值的示例

        下面以图1所示的两级D触发器为例说明周期抖动值的使用。

图1 简单的例子

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

create_clock -period 10 [get_port clk_1]

        然后使用set_clock_jitter命令设置时钟clk_1的周期抖动值,此时的建立时间时序报告如图2所示。 

set_clock_jitter -cycle 0.5 -clocks [get_clock clk_1]

图2 建立时间时序报告

        从图2中可以看出,clk_1的时钟抖动体现在了cycle clock jitter这一项中,导致data  required time减少了0.5,也就导致了最后的裕度(slack)减少了0.5。

占空比抖动值的示例

        为了说明占空比抖动值的影响,改用图3所示的两级D触发器进行说明,图3和图1的区别在于:图3的捕获时钟路径上出现了反相器,这会导致时钟在时钟路径上传播时可能因为单元的单调性出现翻转。

图3 简单的例子

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

create_clock -period 10 [get_port clk_1]

        然后使用set_clock_jitter命令设置时钟clk_1的占空比抖动值,此时的建立时间时序报告如图4所示。  

set_clock_jitter -duty_cycle 0.5 -clocks [get_clock clk_1]

 

图4 建立时间时序报告

        从图4中可以看出,由于反相器的存在,发射时钟的上升沿在0ns,而捕获时钟的下降沿在5ns时由于反相器变成了上升沿(从取反时钟clk_1'可以看出这一点),它们只相差半个周期。clk_1的时钟抖动体现在了duty cycle clock jitter这一项中,导致data  required time减少了0.5,也就导致了最后的裕度(slack)减少了0.5。

不应用时钟抖动的示例

        重新回到图1的例子,若此时查看保持时间时序报告,则会发现此时没有应用任何时钟抖动,因为保持时间检查在发射时钟和捕获时钟的同一个时钟沿进行(仅针对单周期情况),如图5所示。

图5 保持时间时序报告

相关文章:

  • halcon学习笔记1
  • 高效文件管理工具:一键生成文件清单,提升工作效率
  • Kneser-Ney平滑在自然语言处理中的应用
  • npm ERR! code 128 npm ERR! An unknown git error occurred
  • 一文讲清楚 MySQL 事务隔离级别和实现原理
  • 使用DeepSeek辅助编写一个快速排序算法程序的步骤
  • 《深度学习进阶》第8集:多模态学习与跨领域融合**
  • vue 和 react 底层采用的 diff 算法的区别
  • C++ MySQL ORM接口设计优化:从宏污染到现代流式API
  • Apache nifi demo 实验
  • 【实战 ES】实战 Elasticsearch:快速上手与深度实践-2.1.2字段类型选择:keyword vs text、nested对象
  • ollama本地部署DeepSeek-R1大模型使用前端JS调用的详细流程
  • 确保移动设备上机器学习的安全性:挑战与最佳实践
  • 清华大学DeepSeek功能全解手册
  • 【Java学习】内部类
  • 数据库二三事(9)
  • Linux系统管理操作
  • 分布式和微服务的理解
  • C语言:51单片机 程序设计基础
  • 进来了解一下python的深浅拷贝
  • “75后”袁达已任国家发改委秘书长
  • 中国公民在日本被机动车碾压身亡,我使馆发布提醒
  • 卸任兰大校长后,严纯华院士重返北大作报告
  • 广东雷州农商行董事长、原行长同日被查
  • 央媒关注给保洁人员设休息室:让每一份踏实奋斗得到尊重呵护
  • 第二十届中国电影华表奖揭晓!完整获奖名单来了