SDC命令详解:使用set_sense命令进行约束
相关阅读SDC命令详解https://blog.csdn.net/weixin_45791458/category_12931432.html?spm1001.2014.3001.5482目录时钟极性指定引脚、端口列表/集合指定类型指定正单调性指定负单调性指定停止传播指定时钟脉冲指定时钟列表/集合指定时钟叶节点Multicorner-Multimode支持简单使用set_sense命令用于在时钟路径上存在非单调(Non Unate)单元时比如异或门和同或门设置时钟极性如果想要移除极性设置使用remove_sense命令。本文针对Design Compiler但该命令同样存在于PrimeTime、IC Compiler等工具中它们大致相同略有差别该命令是在SDC 2.1引入的同时之前的set_clock_sense命令被废除。set_ideal_network命令的BNF范式有关BNF范式可以参考以往文章为set_sense pins [-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%257Drequest_id337a2ecbb0029b40661d27bfffd8b559biz_id0utm_mediumdistribute.pc_search_result.none-task-blog-2~blog~first_rank_ecpm_v1~rank_v31_ecpm-1-135970796-null-null.nonecaseutm_term%E5%8D%95%E8%B0%83%E6%80%A7spm1018.2226.3001.4450假设时钟信号源的极性为正当通过负单调性的单元时极性取反当通过正单调性的单元时极性不变。例如当时钟信号通过偶数个反相器时极性为正当时钟信号通过偶数个反相器时极性为负。图1展示了当时钟路径上存在反相器的情况。图1 时钟路径上的反相器首先使用create_clock命令以clk端口为源对象创建一个周期为10的时钟图2为clk时钟的报告可以看出上升沿在0ns而下降沿在5ns。create_clock -period 10 [get_ports 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%257Drequest_id40bad359055f68892ab10388c40033ddbiz_id0utm_mediumdistribute.pc_search_result.none-task-blog-2~blog~first_rank_ecpm_v1~rank_v31_ecpm-1-140306133-null-null.nonecaseutm_termleafspm1018.2226.3001.4450如果指定的对象是一个叶单元的引脚则该引脚所属的叶单元会被设置size only属性确保其不会在综合过程中被优化掉需要注意的是此时的size_only属性是隐式设置的这与使用set_size_only命令显式设置不同无法使用report_attribute命令或get_attribute命令直接查看而只能使用report_cell命令或report_size_only命令间接查看隐式size_only属性的优先级高于显式size_only属性使用list_size_only_types命令可以列出叶单元被设置size_only属性的原因显式或隐式。对于列表而言如果有多于一个对象需要使用引号或大括号包围对使用集合无效关于列表和集合的区别可以参考下面的博客。SDC命令详解使用集合(Collection)而不是字符串(String)/列表(List)作为命令参数https://chenzhang.blog.csdn.net/article/details/147144571指定类型-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选项一起使用。时钟脉冲的类型如图6所示如果不使用set_sense -pulse命令或者set_propagated_clock命令Design Compiler无法识别时钟脉冲也就无法在触发器时钟引脚检查最小脉冲宽度约束。图6 时钟脉冲的产生对于理想时钟时钟脉冲的宽度可以使用set_clock_latency -rise/-fall分别定义而对于传播时钟时钟脉冲的宽度是由真实路径计算出来的。指定时钟列表/集合-clocks选项用于指定时钟对象列表/集合如果不指定该选项设置的时钟极性会应用于所有通过指定引脚或端口的时钟。指定时钟叶节点-clock_leaf选项用于指定停止经过指定引脚或端口的时钟传播。此选项还有一个作用是指定的引脚或端口被视为时钟使用端因此所有扇出为指定引脚或端口的时钟分支单元引脚的is_clock_used_as_clock属性都会被设置为true。该选项不能和-positive、-negative、-stop_propagation、-pulse选项一起使用。Multicorner-Multimode支持该命令仅对当前场景生效换句话说只能在当前场景设置时钟极性。关于场景的更多介绍可以参考下面的博客。Design Compiler多工艺角和多工作模式(Multicorner-Multimode, MCMM)https://blog.csdn.net/weixin_45791458/article/details/149578771?ops_request_misc%257B%2522request%255Fid%2522%253A%2522e3267dcc7cc26380435f53994dc8b9b8%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fblog.%2522%257Drequest_ide3267dcc7cc26380435f53994dc8b9b8biz_id0utm_mediumdistribute.pc_search_result.none-task-blog-2~blog~first_rank_ecpm_v1~rank_v31_ecpm-1-149578771-null-null.nonecaseutm_termMCMMspm1018.2226.3001.4450简单使用下面以图7为例说明set_sense命令的使用。图7 时钟路径上的异或门首先使用create_clock命令以clk端口为源对象创建一个周期为10的时钟。create_clock -period 10 [get_ports clk]然后使用set_sense命令设置只有正单调的时序弧能通过U4/Y引脚。set_sense -positive [get_pins U4/Y]此时的时序报告如图8所示可以看出到达触发器的时钟极性为正上升沿在0ns而下降沿在5ns。图8 建立时间时序报告