众所周知,soc chip顶层io 包括某些block 的io 进来是会挂pad cell的 从 io port → PAD cell的PAD pin 。
这中间是不能插入任何buffer的。 要bond 出去。当然默认DC 好像也能识别出来后面挂的是PAD 。
也不需要你做其它操作。工具就不会给这个地方垫buff, 当然如果垫了也很简单。
set_ideal_network -no_propagate [get_ports xxx] 设置上就好
另一部分是ip 的某些ip 内部是封装好的。
如黑色是整个die 红色是你的ip , 紫色是ip内部的io pad它已经被做入到ip内部。那这部分的io 到ip部分的连接是不能插入任何buff的。
如何得到这些io呢用dc吃完rtl link 后写个脚本抓一下就好了
set input [get_object_name [get_ports * -filter “direction =~ in*”]]
set ouput [get_object_name [get_ports * -filter “direction =~ out*”]]
echo “#begin print” > dont_touch_port.tcl
foreach i $input {
set macro [get_cells -of_objects [all_fanout -from $i -flat -levels 1] -filter "ref_name =~ xxx || ref_name =~ xxx你使用的macro”]
if {$macro == ""} {
} else {
echo “$i” >> dont_touch_port.tcl }
}
foreach o $output {
set macro_o [get_cells -of_objects [all_fanin -to $o -flat -level 1] -filter "ref_name =~ xxx || ref_name =~ xxx你使用的macro”]
if {$macro_o == “”} {
} else {
echo “$o” >> dont_touch_port.tcl }
}
然后检查下,给这些port设置set_ideal_network -no_propagate
我不喜欢用dont_touch network。 原因就不多说了。这东西有时候会导致不期望的结果。