synthesis 中不希望工具 垫buffer的IO

众所周知,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的。
image

如何得到这些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。 原因就不多说了。这东西有时候会导致不期望的结果。