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

静态时序分析: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 保持时间时序报告


http://www.kler.cn/a/570559.html

相关文章:

  • 学习笔记-DeepSeek在开源第四天发布DualPipe和EPLB两项技术
  • C#中泛型的协变和逆变
  • 关于常规模式下运行VScode无法正确执行“pwsh”问题
  • Ubuntu 下 nginx-1.24.0 源码分析 - ngx_init_cycle 函数 - 详解(10)
  • 【算法刷题】leetcode hot 100 动态规划
  • 探秘基带算法:从原理到5G时代的通信变革【四】Polar 编解码(一)
  • 【JavaScript/JS】事件回调函数this指向不到Vue/Class 实例上下文的变量或者方法的问题
  • 网络安防系统安装与维护专业(710208)物联网基础技术实训室建设方案
  • 蓝桥杯试题:特殊的三角形
  • 基础设施安全(Infrastructure Security)是什么?
  • Golang学习笔记_41——观察者模式
  • Skynet入门(一)
  • 开源ocr
  • 19c startup ORA-00093 ORA-01078 pga_aggregate_limit
  • 千峰React:组件与逻辑封装(下)
  • Leetcode 刷题记录 01 —— 哈希
  • 医院信息科医疗语言大模型开发的风险洞察与避坑策略
  • 6.C#对接微信Native支付(退款申请、退款回调通知)
  • Kafka Connect连接器的全生命周期:
  • Pytest测试用例执行跳过的3种方式