SDC命令详解:使用all_fanin命令进行查询

相关阅读

SDC命令详解https://blog.csdn.net/weixin_45791458/category_12931432.html


all_fanin命令用于创建一个输入端口、引脚和单元对象集合,包含指定对象的扇入时序路径上的对象,关于设计对象和集合的更详细介绍,可以参考下面的博客。

Synopsys:设计对象https://chenzhang.blog.csdn.net/article/details/147015140?spm=1001.2014.3001.5502 本文针对Design Compiler,但该命令同样存在于PrimeTime、IC Compiler等工具中,它们大致相同,略有差别。all_fanin命令的BNF范式(有关BNF范式,可以参考以往文章)为:

复制代码
all_fanin
    -to sink_list
    [-startpoints_only]
    [-exclude_bboxes]
    [-break_on_bboxes]
    [-only_cells]
    [-flat]
    [-levels count]
    [-trace_arcs arc_type]
    [-continue_trace pin_types]
    //注:该命令的选项和参数顺序任意

指定对象

-to选项用于指定作为向前遍历起点的引脚、端口或线网(其效果与列出该线网的驱动引脚相同),对于列表而言,如果有多于一个对象,需要使用引号或大括号包围(对使用集合无效),关于列表和集合的区别,可以参考下面的博客。

SDC命令详解:使用集合(Collection)而不是字符串(String)/列表(List)作为命令参数https://chenzhang.blog.csdn.net/article/details/147144571

指定仅时序路径起点

-startpoints_only选项用于指定在对象集合中仅包含时序路径起点。默认情况下,对象集合中会包含从指定对象向前遍历直到时序路径起点(对于典型的时序路径是输入端口(包括输入输出双向端口)或触发器的时钟引脚)过程中的所有引脚/输入端口。

指定不包含黑盒

-exclude_bboxes选项用于指定对象集合中不包含黑盒单元及其引脚。

指定停止在黑盒

-break_on_bboxes选项用于指定向前遍历停止在黑盒单元的输出引脚(包括输入输出双向引脚)。默认情况下,如果黑盒单元有从输入引脚到输出引脚的时序弧,会继续向前遍历。

指定仅包含单元

-only_cells选项用于指定对象集合中只包含引脚所属的单元。

指定展平模式

-flat选项用于指定以展平模式执行命令。默认情况下是层次模式,对象集合中只会包含和指定对象在同一层次下的对象(这并不意味着遍历会停止在层次单元引脚)。

下面通过一个例子展示了展平模式和层次模式的区别,图1中存在多次穿越层次的时序路径。

图1 穿越层次的例子

复制代码
dcnxt_shell> all_fanin -to [get_pins U_A/DFF2_reg/D] -flat
{U_A/DFF1_reg/CK U_A/DFF1_reg/Q U_B/U1/A U_B/U1/Y U_A/DFF2_reg/D}
dcnxt_shell> all_fanin -to [get_pins U_A/DFF2_reg/D]
{U_A/DFF1_reg/CK U_A/DFF1_reg/Q U_A/DFF2_reg/D}

指定级数

-levels选项用于指定向前遍历的最大级数,一个单元属于一级,默认值为无穷大。

指定时序弧类型

-trace_arcs选项用于指定向前遍历过程中的组合逻辑时序弧类型,当设置为timing时,仅追踪有效的组合逻辑时序弧,即未因set_disable_timing命令、set_case_analysis命令、固定值引起的常量传播、工具自动断开组合逻辑环(Timing Loop)和状态相关的时序弧(Conditional Timing Arc)缺少对应状态等原因而失效的组合逻辑时序弧;当设置为all时则不存在该限制。使用此选项将覆盖由fanin_fanout_trace_arcs变量(默认值为timing)设置的值。

该选项对时序逻辑时序弧没用,严格意义上说,该选项的使用能让向前遍历突破只能在一条时序路径上的限制。

指定覆盖默认的遍历行为

-continue_trace选项用于覆盖默认的遍历行为,可以将其指定为generated_clock_source。

当指定为generated_clock_source时,当指定对象在生成时钟的时钟路径上时,遍历不会停在生成时钟源(默认情况下,这是一个时序路径起点),而会继续向前遍历直到时钟源外的时序路径起点(对于典型的时序路径是输入端口(包括输入输出双向端口)或触发器的时钟引脚)。

严格意义上说,该选项的使用能让向前遍历突破只能在一条时序路径上的限制。

下面通过一个例子展示了-continue_trace选项的作用,图2中存在一个分频时钟。

图2 分频时钟的例子

复制代码
dcnxt_shell> create_clock -name CLK -period 10 [get_ports clk]
1
dcnxt_shell> create_generated_clock -name CLK_DIV2 -source [get_ports clk] -divide_by 2 [get_pins div2_reg_reg/Q]
1
dcnxt_shell> all_fanin -to [get_pins dout_reg/CK]
{div2_reg_reg/Q dout_reg/CK}
dcnxt_shell> all_fanin -to [get_pins dout_reg/CK] -continue_trace generated_clock_source
{div2_reg_reg/CK div2_reg_reg/Q dout_reg/CK}

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%257D&request_id=e3267dcc7cc26380435f53994dc8b9b8&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~blog~first_rank_ecpm_v1~rank_v31_ecpm-1-149578771-null-null.nonecase&utm_term=MCMM&spm=1018.2226.3001.4450

写在最后

all_fanin命令返回的是输入端口、引脚和单元对象集合,但返回对象集合的命令会自动调用query_objects命令显示对象名列表,执行该命令后可看到对应列表(列表中的对象名数量最多由collection_result_display_limit变量控制,默认为100)。

该命令不依赖当前实例,只根据当前设计进行查询。实际上,使用该命令时,当前实例必须是当前设计,否则会出现No sinks提示。

如果使用current_design命令切换了当前设计,则相对原当前设计得到的对象集合会暂时失效,如下所示。

复制代码
dcnxt_shell> current_design top
Current design is 'top'.
{top}
dcnxt_shell> set a [all_fanin -to [get_pins cin]]
{cin}
dcnxt_shell> query_objects $a
{cin}
dcnxt_shell> current_design bot
Current design is 'bot'.
{bot}
dcnxt_shell> query_objects $a
Error: No such collection '_sel2040' (SEL-001)
dcnxt_shell> current_design top
Current design is 'top'.
{top}
dcnxt_shell> query_objects $a
{cin}
相关推荐
景芯SoC芯片实战1 个月前
景芯SoC USB2.0 PHY上电后CLK不输出60MHz,Controller一直挂死——问题到底出在哪?
数字ic
景芯SoC芯片实战2 个月前
❓ 问题:流片前做功能ECO,后端改完 ecoPlace 和 ecoRoute 就可以交片了吗?
数字ic
景芯SoC芯片实战2 个月前
ICG的TE端到底该接scan_enable还是test_mode?
数字ic
日晨难再2 个月前
Design Compiler:精确映射(-exact_map选项)
数字ic
日晨难再3 个月前
SDC命令详解:使用set_size_only命令进行约束
数字ic
景芯SoC芯片实战3 个月前
Hard Macro的Float Pin设错了,skew balance全白干
数字ic·soc后端
景芯SoC芯片实战3 个月前
12nm工艺下,6T-Turbo Cell的Filler到底该怎么插?
数据库·数字ic·dft·soc后端
日晨难再4 个月前
SDC命令详解:使用quit、exit和return命令进行控制
数字ic
日晨难再5 个月前
Formality:层次化验证(write_hierarchical_verification_script命令)
数字ic·formality