流程:
1)根据系统(其他芯片的)要求,芯片内部的floorplan,决定信号PAD的位置
2)计算出power PAD的个数,插入到信号PAD里面
3)加其他的PAD,比如IO filler,power cut,power on control,corner PAD,ESD等
细节可以包括:
1)如何计算core power PAD:估算core power,再加50%,算出电流,除以每个core power IO的最大电流,就是大致的PAD个数。插入到信号PAD ring后,还要再计算power EM,防止一根电源线上的电流过大。
2)如何计算IO power PAD:从信号IO的功耗算起,同时计算SSO,取2个结果里面较大的
3)在什么地方插入power cut:不同的电压core电压和不同的IO电压之间,power island之间,数字和模拟电源之间。
4)power on control PAD,一段每个IO ring需要一个
5)ESD一般要加在每个不同的电源之间
1)信号PAD的位置
set pins [dbGet selected.name]
redirect ./io_top.tcl { }
foreach pin $pins {set name [dbGet [dbGet top.insts.instTerms.name $pin -p1].net.instTerms.inst.name -v *Top*]redirect ./io_top.tcl { puts "(inst name=\"$name\" place_status=placed )" } -append }set pins [dbGet selected.name]
redirect ./io_right.tcl { }
foreach pin $pins {set name [dbGet [dbGet top.insts.instTerms.name $pin -p1].net.instTerms.inst.name -v *Top*]redirect ./io_right.tcl { puts "(inst name=\"$name\" place_status=placed )" } -append }set pins [dbGet selected.name]
redirect ./io_bottom.tcl { }
foreach pin $pins {set name [dbGet [dbGet top.insts.instTerms.name $pin -p1].net.instTerms.inst.name -v *Top*]redirect ./io_bottom.tcl { puts "(inst name=\"$name\" place_status=placed )" } -append }set pins [dbGet selected.name]
redirect ./io_left.tcl { }
foreach pin $pins {set name [dbGet [dbGet top.insts.instTerms.name $pin -p1].net.instTerms.inst.name -v *Top*]redirect ./io_left.tcl { puts "(inst name=\"$name\" place_status=placed )" } -append }