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