Redhawk解析PAD / IOPAD的实现方法
生活随笔
收集整理的這篇文章主要介紹了
Redhawk解析PAD / IOPAD的实现方法
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
Redhawk解析PAD / IOPAD的實現方法
- 1. IOPAD DEF的概念說明
- 2. 生成 IOPAD GDS文件
- 3. 生成 IOPAD DEF文件
- 4. Redhawk解析過程中讀取IOPAD DEF
- 腳本附件:getinfo2IODEF.tcl
- 腳本附件:create_iopadgds_script.tcl
- 補充
本文主要簡述【Redhawk解析IOPAD】的實現原理方法。
1. IOPAD DEF的概念說明
2. 生成 IOPAD GDS文件
注:
getinfo2IODEF.tcl 是基于innovus獲取IOPAD的擺放信息以及庫信息。
run_cerate_iopadgds.csh 是基于calibredrv腳本實現。
3. 生成 IOPAD DEF文件
注:
def文件的獲取通過redhawk的gds2def功能實現
4. Redhawk解析過程中讀取IOPAD DEF
腳本附件:getinfo2IODEF.tcl
set target_path "pad_info_iodef.txt" set target_file [open $target_path w+]#== IOPAD == set pads [dbGet [dbGet -p2 top.insts.cell.subClass pad].name] foreach pad $pads {set ll_x [dbGet [dbGet -p top.insts.name $pad].box_llx]set ll_y [dbGet [dbGet -p top.insts.name $pad].box_lly]set ur_x [dbGet [dbGet -p top.insts.name $pad].box_urx]set ur_y [dbGet [dbGet -p top.insts.name $pad].box_ury]set pad_type [dbGet [dbGet -p top.insts.name $pad].cell.name]set pad_orient [dbGet [dbGet -p top.insts.name $pad].orient]if {$pad_orient == "R0"} {set place_x [expr $ll_x]set place_y [expr $ll_y]}if {$pad_orient == "R90"} {set place_x [expr $ur_x]set place_y [expr $ll_y]}if {$pad_orient == "R180"} {set place_x [expr $ur_x]set place_y [expr $ur_y]}if {$pad_orient == "R270"} {set place_x [expr $ll_x]set place_y [expr $ur_y]}puts "$pad $pad_type $place_x $place_y $pad_orient"puts $target_file "$pad $pad_type $place_x $place_y $pad_orient" }#== CORNER == set corners [dbGet [dbGet -p2 top.insts.cell.subClass cornerBottomLeft].name] foreach corner $corners {set ll_x [dbGet [dbGet -p top.insts.name $corner].box_llx]set ll_y [dbGet [dbGet -p top.insts.name $corner].box_lly]set ur_x [dbGet [dbGet -p top.insts.name $corner].box_urx]set ur_y [dbGet [dbGet -p top.insts.name $corner].box_ury]set corner_type [dbGet [dbGet -p top.insts.name $corner].cell.name]set corner_orient [dbGet [dbGet -p top.insts.name $corner].orient]if {$corner_orient == "R0"} {set place_x [expr $ll_x]set place_y [expr $ll_y]}if {$corner_orient == "R90"} {set place_x [expr $ur_x]set place_y [expr $ll_y]}if {$corner_orient == "R180"} {set place_x [expr $ur_x]set place_y [expr $ur_y]}if {$corner_orient == "R270"} {set place_x [expr $ll_x]set place_y [expr $ur_y]}puts "$corner $corner_type $place_x $place_y $corner_orient"puts $target_file "$corner $corner_type $place_x $place_y $corner_orient" }close $target_file腳本附件:create_iopadgds_script.tcl
###################################### #Please set GDS that want to merge. #Usage :calibredrv <scriptfile> #ref option :-dt_expand -preserveProperties -preserveTextAttributes ###################################### set iopad_txt ../00_predata/pad_info_iodef.txt set porttext ../00_predata/top.porttext set textlayer 83.2set iopad_gds {\ ./data/pad.gds \ ./data/iofiller.gds \ } ###################################set top [layout create -type gds] $top create cell iodefset ref_gds_i 0 foreach ref_gds $iopad_gds {incr ref_gds_iset ref_gds [layout create $ref_gds -dt_expand]set ref_topname [$ref_gds topcell]set iopad_txt_file [open $iopad_txt r]while {[gets $iopad_txt_file line]>=0} {set pad_name [lindex $line 0]set pad_type [lindex $line 1]set pad_place_x [expr [lindex $line 2]*1000]set pad_place_y [expr [lindex $line 3]*1000]set pad_orient [lindex $line 4]regsub -all {XR} $pad_orient "" pad_orientif {[$ref_gds exists cell $pad_type]} {$top create cell $pad_name $ref_gds $pad_type$top create ref iodef $pad_name $pad_place_x $pad_place_y 0 $pad_orient 1puts "$pad_type $pad_name ref_gds_$ref_gds_i"puts "$pad_place_x $pad_place_y"}}close $iopad_txt_file }$top create layer $textlayer set porttext_file [open $porttext r] while {[gets $porttext_file line]>=0} {set net_name [lindex $line 2]set text_x [expr [lindex $line 3]*1000]set text_y [expr [lindex $line 4]*1000]$top create text iodef $textlayer $text_x $text_y $net_nameputs "create text $text_x $text_y $net_name" } close $porttext_file# export merged $top gdsout iodef.gds iodef補充
最近在用這個的時候有新發現:
這里的iodef實際作用就是連通PAD和die內的金屬,所以這里的redhwak option名叫RDL CELL。
通過測試表明,這里的RDL CELL以任何形式連通PAD 和die 內金屬都是可行的。(比如打上一小塊金屬,金屬加上label,然后用gds2def導出這些小金屬塊的def,def再讀入RDL CELL)
原文的iodef是完整的io ring,由于io filller沒有label,所以不能單獨進行gds2def。
總結
以上是生活随笔為你收集整理的Redhawk解析PAD / IOPAD的实现方法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 二维ITK连通区域提取
- 下一篇: 【Pygame经典合集】终极