首页 / 资讯中心 / 文章详情

SDC命令详解:使用set_disable_timing命令进行约束

SDC命令详解:使用set_disable_timing命令进行约束 ★ FEATURED ARTICLE
相关阅读SDC命令详解https://blog.csdn.net/weixin_45791458/category_12931432.html?spm1001.2014.3001.5482目录指定对象列表/集合指定源、目的引脚指定恢复简单使用Multicorner-Multimode支持写在最后上一章中我们学习了如何使用set_case_analysis模式分析命令它通过指定某个端口或引脚为固定值从而使设计中的一些时序弧失效。本章将学习set_disable_timing命令它可以用于直接指定失效时序弧这会导致时序路径的中断常常用于减少时序分析的复杂度。如果想要恢复失效的时序弧使用-reset_path选项。本文针对Design Compiler但该命令同样存在于PrimeTime、IC Compiler等工具中它们大致相同略有差别。set_disable_timing命令的BNF范式有关BNF范式可以参考以往文章为set_disable_timing object_list [-from from_pin_name -to to_pin_name] [-restore] //注该命令的-from选项和-to选项必须同时出现指定对象列表/集合object_list参数指定了对象列表/集合包括需要中断时序弧的单元、端口、引脚、库单元或库引脚如果在PrimeTIme中还可以指定单元时序弧或库单元时序弧这个参数是必选的。对于列表而言如果有多于一个对象需要使用引号或大括号包围对使用集合无效关于列表和集合的区别可以参考下面的博客。SDC命令详解使用集合(Collection)而不是字符串(String)/列表(List)作为命令参数https://chenzhang.blog.csdn.net/article/details/147144571如果指定的对象是一个叶单元则其会被设置size only属性确保其不会在综合过程中被优化掉需要注意的是此时的size_only属性是隐式设置的这与使用set_size_only命令显式设置不同无法使用report_attribute命令或get_attribute命令直接查看也无法使用查询命令的-filter选项过滤而只能使用report_cell命令或report_size_only命令间接查看隐式size_only属性的优先级高于显式size_only属性使用list_size_only_types命令可以列出叶单元被设置size_only属性的原因显式或隐式。指定源、目的引脚-from选项和-to选项必须成对出现它们指定了一个单元需要中断从源引脚到目的引脚这个特定的时序弧因此如果它们使用了则对象列表中只能有单元对象。指定恢复-restore选项表示将中断的时序弧恢复此时指定的其它选项要和指定时序弧失效时的命令一致。简单使用首先我们可以解决静态时序分析SDC约束命令create_clock详解一文中出现的时序路径混乱问题如图1所示首先在输入端口clk1和clk2定义两个时钟。create_clock -period 10 [get_ports clk1] create_clock -period 15 [get_ports clk2]图1 有两个时钟驱动的电路单元对于上面的电路本意是触发器b_reg和触发器c_reg同时受时钟clk1或时钟clk2之一触发但如果不使用set_disable_timing命令在使用report_timing命令后会出现时钟clk2和时钟clk1之间的时序分析报告如图2、图3所示我们真正需要的是图4的时序报告本文如不加说明默认时序报告为建立时间报告。图2 发射时钟是clk2捕获时钟是clk1图3 发射时钟是clk1捕获时钟是clk2图4 发射时钟是clk2捕获时钟是clk2下面我们使用set_disable_timing命令直接使得数据选择器U4从输入引脚B到输出引脚Y的时序弧失效当然你也可以是使输入引脚S0到输出引脚Y的时序弧也失效但由于输入引脚S0不会定义时钟因此它可以省略。可以通过report_design命令或report_disable_timing命令查看直接指定失效的时序弧注在Design Compiler中该命令无法查看库单元和库引脚上设置失效时序弧PrimeTime中可以查看如图5或图6所示从图6的Flag栏的u可以看出此时的失效路径是直接由用户定义的。此时的时序分析结果如图7和图8所示。set_disable_timing [get_cells U4] -from B -to Y set_disable_timing [get_cells U4] -from S0 -to Y //加上这句也可以图5 失效时序弧报告(一)图6 失效时序弧报告(二)图7 发射时钟和捕获时钟都是clk2图8 发射时钟和捕获时钟都是clk2对于使用set_disable_timing命令使得数据选择器U4从输入引脚A到输出引脚Y的时序弧失效与上面是一样的操作和结果。在讨论set_case_analysis命令时我们说到常量值会沿着逻辑传播直到传播终点为止常量值不能继续传播下去。那set_disable_timing命令是否也会导致失效时序弧沿着逻辑传播下面来看一个例子如图9所示。图9 一个简单的例子首先在输入端口clk定义一个时钟并对输入端口enable添加输入延迟约束。create_clock -period 10 [get_ports clk] set_input_delay 0.5 -clock clk [get_ports enable]此时如果直接使用report_timing命令则触发器t_reg和触发器data_out_reg以及端口enable和触发器data_out_reg之间的时序路径会正常报告如图10和图11所示。图10 两个触发器间的时序报告图11 端口和触发器间的时序报告下面使用set_disable_timing命令使与门U4从输入引脚B到输出引脚Y的时序弧失效可以使用report_design命令或report_disable_timing命令查看直接指定失效的时序弧如图12或图13所示可以看出失效时序弧不会沿着逻辑传播。set_disable_timing [get_cells U4] -from B -to Y图12 失效时序弧报告(一)图13 失效时序弧报告(二)下面我们来看set_disable_timing命令的一个特性时序路径分割这与set_case_analysis命令直接使时序路径消失不同下面来看一个例子。由于在图9中我们只使与门U4从输入引脚B到输出引脚Y的时序弧失效了而与门U4从输入引脚A到输出引脚Y的时序弧依然保留了所以t_reg和data_out_reg的时序路径依旧存在如图14所示。图10 两个触发器间的时序报告但是原本在输入端口enable到触发器data_out_reg之间的时序路径被切断了此时的时序路径变成了从输入端口enable到与门U4的B引脚尽管这不是一个常见的时序路径终点但现在确实如此如图11所示而此时与门U4的Y引脚到触发器data_out_reg输入引脚D的时序弧只属于t_reg到data_out_reg的时序路径。图11 一条奇怪的时序路径如果此时使用下面的命令再使与门U4从输入引脚A到输出引脚Y的时序弧失效如图12所示。则这把之前的两条时序路径都切断此时会出现三条时序路径第一条是从t_reg到与门U4的A引脚第二条是从输入端口enable到与门U4的B引脚第三条是从与门U4的Y引脚到触发器data_out_reg如图13、图14和图15所示从图中的startpoint和endpoint可以看出时序路径的起点和终点。set_disable_timing [get_cells U4] -from A -to Y图12 失效时序弧报告图13 第一条时序路径图14 第二条时序路径图15 第三条时序路径我们可以使用-restore选项移除两个指定的失效时序弧顺带一提还可以使用remove_disable_timing命令移除失效时序弧它们是等价的。set_disable_timing [get_cells U4] -from A -to Y -restore set_disable_timing [get_cells U4] -from B -to Y -restore //下面的命令等价 remove_disable_timing [get_cells U4] -from A -to Y -restore remove_disable_timing [get_cells U4] -from B -to Y -restore如果我们直接指定触发器data_out_reg的时钟引脚CK到数据引脚D的时序弧失效则针对触发器data_out_reg的建立时间和保持时间检查都不会进行如图16所示。set_disable_timing [get_cells data_out_reg] -from CK -to D图16 建立时间和保持时间不会检查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写在最后set_disable_timing命令能直接指定一条时序弧失效并中断和分割经过它的时序路径在实际运用中使用此命令前需要谨慎并明确自己在做什么。除了本文谈到的set_disable_timing命令和set_case_analysis命令外失效时序弧还可能因为固定值引起的常量传播、工具自动断开组合逻辑环(Timing Loop)和状态相关的时序弧(Conditional Timing Arc)缺少对应状态等方式产生。
阅读完成 · 觉得有帮助?
咨询建站