SDC命令详解:使用all_inputs命令进行查询
相关阅读
SDC命令详解https://blog.csdn.net/weixin_45791458/category_12931432.html
all_clocks命令用于创建一个输入端口对象集合,关于设计对象和集合的更详细介绍,可以参考下面的博客。
Synopsys:设计对象https://chenzhang.blog.csdn.net/article/details/147015140?spm=1001.2014.3001.5502
本文针对Design Compiler,但该命令同样存在于PrimeTime、IC Compiler等工具中,它们大致相同,略有差别。all_inputs命令的BNF范式(有关BNF范式,可以参考以往文章)为:
all_inputs[-clock clock_name][-edge_triggered | -level_sensitive][-exclude_clock_ports]//注:该命令的选项和参数顺序任意
指定时钟
-clock选项指定了一个时钟对象列表,只有相对这些时钟设置了输入延迟的端口会被包含在集合中,如例1所示。
// 例1
dc_shell> create_clock -period 10 -name clk1
Warning: Creating virtual clock named 'clk1' with no sources. (UID-348)
1
dc_shell> create_clock -period 10 -name clk2
Warning: Creating virtual clock named 'clk2' with no sources. (UID-348)
dc_shell> set_input_delay 0.1 [get_ports in1] -clock clk1
1
dc_shell> set_input_delay 0.2 [get_ports in2] -clock clk2
1
dc_shell> all_inputs
{in1 in2 in3}
dc_shell> all_inputs -clock [get_clocks clk1]
{in1}
dc_shell> all_inputs -clock [get_clocks clk2]
{in2}
指定边沿/电平触发
-edge_triggered选项指定输入延迟是相对外部发射触发器而言的(不使用-level_sensitive选项);-level_sensitive选项指定输入延迟是相对外部发射锁存器而言的(使用-level_sensitive选项),如例2所示。
// 例2
dc_shell> create_clock -period 10 -name clk1
Warning: Creating virtual clock named 'clk1' with no sources. (UID-348)
1
dc_shell> create_clock -period 10 -name clk2
Warning: Creating virtual clock named 'clk2' with no sources. (UID-348)
dc_shell> set_input_delay 0.1 [get_ports in1] -clock clk1 -level_sensitive
1
dc_shell> set_input_delay 0.2 [get_ports in2] -clock clk2
1
dc_shell> all_inputs
{in1 in2 in3}
dc_shell> all_inputs -level_sensitive
{in1}
dc_shell> all_inputs -edge_triggered
{in2}
-edge_triggered选项和-level_sensitive选项是互斥的,只能使用其中一个。
指定排除时钟源
-exclude_clock_ports选项指定将那些作为时钟源对象的端口排除在集合外,如例3所示。
// 例3
dc_shell> create_clock -period 10 -name clk1 [get_ports in1]
1
dc_shell> all_inputs -exclude_clock_ports
{in2 in3}
写在最后
all_ports命令在功能上等价于下面这两种get_ports命令。
dc_shell> get_ports -filter "direction==inout or direction==in"
dc_shell> get_ports * -filter "direction==inout or direction==in"
如果想创建端口,使用create_port命令;如果想移除端口,使用remove_port命令;如果想报告端口的详细信息,使用report_port命令。