热度 1| |||
如果get_cells、get_pins等命令执行后显示不全(末尾是省略号),在前面加上get_object_name即可,即get_object_name[get_cells...]。另一种方法是修改limit的值
set_app_var collection_result_display_limit 10000000(不一定是这个数字,尽量大就可以,如果忘记该变量名,可以用printvar *limit*报出相关的)
抓取所有寄存器
get_cells * -h -filter "ref_name =~ SDF*",(其中reference name 为SDF* 指寄存器)
查看符合条件的个数,前面加sizeof即可,即
sizeof [get_cells * -h -filter "ref_name =~ SDF*"]
抓取特定名字的寄存器
get_cells * -h -filter "full_name =~ ../* && ref_name =~ SDF*"
命令前加lsc可以自动换行
proc lsc {coll} {
foreach_in_coll itm $coll {
echo [get_attr $itm full_name]
}
}
抓取某信号A驱动的所有寄存器
get_cells [afo[get_ports A]] -filter "ref_name =~ SDF*",其中afo即all_fanout -flat -end -trace all -from
抓取信号A驱动的所有ICG
get_pins [afo[get_ports A]] -filter "full_name =~ *latch/E"
抓取信号A驱动的所有ICG的所有扇出
afo [get_pins -of [get_cells -of [get_pins [afo[get_ports A]] -filter "full_name =~ *latch/E"]] -filter "full_name =~ *latch/Q"],(Q端的fanout)
查看寄存器D端的输入
report_timing -to ../../D -in,可查看报出来的路径上的cell
查找设计中不被信号A控制的所有寄存器
>列出设计中的所有寄存器
get_cells * -h -filter "ref_name =~ SDF*" > sdf.lst
>列出信号A控制的所有ICG的所有扇出
afo [get_pins -of [get_cells -of [get_pins [afo[get_ports A]] -filter "full_name =~ *latch/E"]] -filter "full_name =~ *latch/Q"] >sdf_icg.lst
>用:sort u 将上述两个list排序,比较,找出sdf.lst中未在sdf_icg.lst的寄存器,记作B.lst
>对B.lst的寄存器,分别用report_timing -to ../../D -in 报出其D端的输入情况,(一定要加-in,表示输入pin)
>对于与信号A相关的,对照库中相关cell的说明,确定当A为1(或0)时,D端输入是否为固定值,(report_timing -th ../../A1 -in ,report_timing -th ../../A2 -in ,report_timing -th ../../B -in 等报出来详细各个pin的值,因为可能间接可控)。如果是固定值,说明被信号A可控;如果不是固定值,说明被信号A不可控
>对于与信号A完全不相关的,一定不被信号A可控