;; ;; layerselect.il 2012/04/19 ;; ;; version: 0.1 ;; ;; Description: ;; (1) adds "VisibleLayer" menu in toolbar of Layout and Layout-XL ;; (2) set some shortcut keys to change the visibility of design layers. ;; [1] ALL Inisible ;; [2] Diff-Poly-M1 Visible ;; [3] M1-M3 Visible ;; [4] M4-M6 Visible ;; [5] SG1-SG3 Visible ;; [6] G1-G2 Visible ;; [7] ALL Comments Visible (not implemented) ;; [8] ALL Visible ;; ;; Usage: ;; [.cdsinit] ;; (load "layerselect.il") ;; (deRegUserTriggers "schematic" nil nil 'LayerAddMenusTrigger) ;; (deRegUserTriggers "maskLayout" nil nil 'LayerAddMenusTrigger) ;; (deRegUserTriggers "maskLayoutXL" nil 'nil LayerAddMenusTrigger) (procedure LayerCreatePullDownMenu() (let (item001 item002 item003 item004 item005 item006 item007 item008 menuItems) item001 = (hiCreateMenuItem ?name 'item001 ?itemText "ALL Invisible" ?callback "setLayerVisible( 1 )" ) item002 = (hiCreateMenuItem ?name 'item002 ?itemText "Diff-Poly-M1 Visible" ?callback "setLayerVisible( 2 )" ) item003 = (hiCreateMenuItem ?name 'item003 ?itemText "M1-M3 Visible" ?callback "setLayerVisible( 3 )" ) item004 = (hiCreateMenuItem ?name 'item004 ?itemText "M4-M6 Visible" ?callback "setLayerVisible( 4 )" ) item005 = (hiCreateMenuItem ?name 'item005 ?itemText "SG1-SG3 Visible" ?callback "setLayerVisible( 5 )" ) item006 = (hiCreateMenuItem ?name 'item006 ?itemText "G1-PM1 Visible" ?callback "setLayerVisible( 6 )" ) item007 = (hiCreateMenuItem ?name 'item007 ?itemText "ALL Comments Visible" ?callback "setLayerVisible( 7 )" ) item008 = (hiCreateMenuItem ?name 'item008 ?itemText "ALL Visible" ?callback "setLayerVisible( 8 )" ) menuItems = (list item001 item002 item003 item004 item005 item006 item007 item008 ) (hiCreatePulldownMenu 'trLayerPulldownMenu ; menu handle "VisibleLayer" ; menu title menuItems ) ) ; end let ) ; end procedure createLayerPullDownMenu ;;========================================== ;; ;;========================================== (procedure LayerAddMenus() (let (newMenu) newMenu = (LayerCreatePullDownMenu ) (hiInsertBannerMenu getCurrentWindow() 'newMenu hiGetNumMenus(getCurrentWindow()) ) ) ; let ) ; procedure ;;========================================== ;; ;;========================================== (procedure LayerAddMenusTrigger(args) (let (newMenu) newMenu = ( LayerAddMenus ) (list newMenu) ) ) ;;========================================== ;;========================================== (procedure setLayerVisible(value) (let (winID) (case value (1 leSetAllLayerVisible( nil ) ) (2 leSetLayerVisible(list("df" "sd") t ) leSetLayerVisible(list("pii" "sd") t ) leSetLayerVisible(list("nii" "sd") t ) leSetLayerVisible(list("ndii" "sd") t ) leSetLayerVisible(list("p" "sd") t ) leSetLayerVisible(list("vaa" "sd") t ) leSetLayerVisible(list("maa" "sd") t ) ) (3 leSetLayerVisible(list("maa" "sd") t ) leSetLayerVisible(list("vab" "sd") t ) leSetLayerVisible(list("mab" "sd") t ) leSetLayerVisible(list("vac" "sd") t ) leSetLayerVisible(list("mac" "sd") t ) ) (4 leSetLayerVisible(list("vad" "sd") t ) leSetLayerVisible(list("mad" "sd") t ) leSetLayerVisible(list("vae" "sd") t ) leSetLayerVisible(list("mae" "sd") t ) leSetLayerVisible(list("vaf" "sd") t ) leSetLayerVisible(list("maf" "sd") t ) ) (5 leSetLayerVisible(list("vba" "sd") t ) leSetLayerVisible(list("mba" "sd") t ) leSetLayerVisible(list("vbb" "sd") t ) leSetLayerVisible(list("mbb" "sd") t ) leSetLayerVisible(list("vbc" "sd") t ) leSetLayerVisible(list("mbc" "sd") t ) ) (6 leSetLayerVisible(list("vca" "sd") t ) leSetLayerVisible(list("mca" "sd") t ) leSetLayerVisible(list("vcb" "sd") t ) leSetLayerVisible(list("mcb" "sd") t ) ) (8 leSetAllLayerVisible( t ) ) ); case ); let ); procedure setLayerVisible ;;========================================== ;;==========================================「どこかで見覚えがあるぞ」と思った方はご明察.元ネタは吉原研Wikiのグリッド変更SKILLである.このSKILL自体もバグがあるので,修正する必要がある. 吉原研のWikiは必読である.大変勉強になる.ただし「NDA的に大丈夫なのかしら」と思ってしまう事も事実だが... NDAを恐れない吉原研のアグレッシブさに負けないように,本Blogも積極的に技術情報を提示できるよう頑張りたいものである.
2012年4月19日木曜日
AnalogArtistでレイヤの表示/非表示を一発で切り替える.
研究が進まない時に限って,研究以外の仕事に手が向いてしまう.
AnalogArtistでレイアウトを書いていると,LSWで頻繁にレイヤの表示/非表示を切り替える必要がある.
近年のプロセスは配線層が多層なので,たとえば12層配線あるとメタルとVIAを消すのに23回もクリックしないといけない.これはあまりに非生産的.
これを解決するために,簡単なプログラムを書いてみた.
図を見れば一発でわかると思うが,念のため説明すると上から順に
[1] 全レイヤーの非表示
[2] Diffusion,Poly,I.I+,コンタクト,M1の表示
[3] M1からM3まで表示
[4] M4からM6まで表示
[5] Semi-Global1からSemi-Global3まで表示
[6] Global1からGlobal2まで表示
[7] コメントレイヤの表示(未実装)
[8] 全レイヤーの表示
である.
プログラムは以下の通りである.単にleSetLayerVisibleコマンドでレイヤの表示/非表示を切り替えているだけである.
登録:
投稿 (Atom)