2019年11月20日水曜日

SKILL関数でセルを開け(dbOpenCellViewByType),所望の位置にインスタンスを貼る(dbCreateInstByMasterName)

特定のセルにインスタンスを貼る SKILL 関数を紹介する.そのためには(1)セルを開く,(2)インスタンスを貼る,の2つの関数が必要.

(1) セルを開く
dbOpenCellViewByType 関数を使う.

dbOpenCellViewByType(
{ gt_lib | nil }
t_cellName
lt_viewName
[ t_viewTypeName
[ t_mode
[ d_contextCellView ] ] ]
)
=> d_cellView / nil

gt_lib はライブラリ名,t_cellName はセル名,lt_viewName はView名, t_viewTypeName は ViewType,t_mode はセルを開くモードである.d_contextCellView はバージョンによっては必要らしいが不要っぽい.
モードはいくつかある.
r : 読み込み(read)
a : 追記(append)
w : 書き込み(write),すでにファイルがある場合は Virtual Memory に捨てられる.
他にもモードがあるが違いがよくわからない.

dbOpenCellViewByType 関数を実行すると,Cell View IDが帰ってくる.このCell View IDを使って後続の処理を行う.

(2)インスタンスを貼る
dbCreateInstByMasterName 関数を使う.

dbCreateInstByMasterName(
d_cellView
t_libName
t_cellName
t_viewName
t_instName
l_origin
t_orient
[ x_numInst ]
)

d_cellView は貼り付け先のCell View ID,t_libName は貼り付け元のライブラリ,t_cellName は貼り付け元のセル名,t_viewName は貼り付け元のView,t_instName はインスタンス名(不要ならnilに),l_origin は貼り付ける座標,t_orient は回転角度, x_numInst は貼り付け個数である.

例えば,設計後のレイアウトにスクライブラインを貼る SKILL は以下のようになる.

cellview = dbOpenCellViewByType("CHIP_TOP" "CHIP_TOP" "layout" "maskLayout" "a")
dbCreateInstByMasterName(cellview "SCRIBE2_5000x5000" "SCRIBE2_5000_5000" "layout" nil list(0 0) "R0" 1) 
cellview = dbOpenCellViewByType("CHIP_TOP" "CHIP_TOP" "layout")
dbSave(cellview)
dbClose(cellview)

よくわからないけれど,貼り付け後もう一度 dbOpenCellViewByType しないとうまくいかなかった.最後は dbSave でセーブ, dbClose でクローズ.

SKILL プログラムというよりは,API を叩いている感じである.マニュアルは Cadence Design Framework II SKILL Functions Reference です.

0 件のコメント:

コメントを投稿