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