blob: fe244dcbcf6a0c14d910426b23e8bca0d7b2c126 [file] [log] [blame]
unless( setq( pdkHome getShellEnvVar("PDK_HOME"))
error( "PDK_HOME environment variable not set\n")
)
;unless( setq( metStack getShellEnvVar("METAL_STACK"))
; error( "METAL_STACK environment variable not set\n")
;)
when( and( isCallable('hiGraphicMode) hiGraphicMode() )
ciwMenuInit()
)
;===============================================================================
; Load all needed skill code
;===============================================================================
info( "----------------------------------------\n")
info( "Loading SkyWater Skill Code\n")
info( "----------------------------------------\n")
; Model Selection
;loadi( strcat( getShellEnvVar("PDK_HOME") "/MODELS/V3.0.1/SPECTRE/SKILL/skywater_menu.il"))
;loadi( strcat( getShellEnvVar("PDK_HOME") "/MODELS/SPECTRE/SKILL/skywater_menu.il"))
; Trigger Callbacks
loadi( strcat( getShellEnvVar("PDK_HOME") "/PROGS/SKILL/menu_tools/CCSinvokeCdfCallbacks.il"))
; Check & Save
;loadi( strcat( getShellEnvVar("PDK_HOME") "/PROGS/SKILL/menu_tools/CCScheckAllSymAndSch.il"))
loadi( strcat( getShellEnvVar("PDK_HOME") "/PROGS/SKILL/menu_tools/SWcheckAllSymAndSch.il"))
; QA developer tools
if( getShellEnvVar("PDK_DEV") == "t" then
loadi( strcat( getShellEnvVar("PDK_HOME") "/PROGS/SKILL/dev/qa_sims/S130QA_pcellSimulator.il"))
loadi( strcat( getShellEnvVar("PDK_HOME") "/PROGS/SKILL/dev/qa_pcells/S130QA_pcellPlacer.il"))
loadi( strcat( getShellEnvVar("PDK_HOME") "/PROGS/SKILL/dev/qa_pcells/S130QA_pcellVerifier.il"))
loadi( strcat( getShellEnvVar("PDK_HOME") "/PROGS/SKILL/dev/qa_drc/laQADRC.il"))
loadi( strcat( getShellEnvVar("PDK_HOME") "/PROGS/SKILL/dev/qa_lvs/laQALVS.il"))
loadi( strcat( getShellEnvVar("PDK_HOME") "/PROGS/SKILL/dev/LACopyFastGUI.il"))
); if
;===============================================================================
; Create Menus Items
;===============================================================================
; generic separator
swSeparator = hiCreateSeparatorMenuItem( ?name 'swSeparator )
;-------------------
; Trigger Callbacks
;-------------------
swTriggerCBsWarning1 = hiCreateLabel(
?name 'swTriggerCBsWarning1
?labelText "<div style='color: #ff0000;'>** USE WITH CAUTION **</div>"
?justification 'center
)
swTriggerCBsWarning2 = hiCreateLabel(
?name 'swTriggerCBsWarning2
?labelText "<div style='color: #ff0000;'>This can alter your currently placed Pcells</div>"
?justification 'center
)
swSelInstTriggerCallbacks = hiCreateAppForm(
?name `swSelInstTriggerCallbacks
?formTitle "Trigger Callbacks on Selected Instances"
?fields list(
list( swTriggerCBsWarning1 0: 5 350:20 )
list( swTriggerCBsWarning2 0:25 350:20 )
)
?callback "foreach( inst setof( i geGetSelSet() i->objType == \"inst\")
CCSinvokeInstCdfCallbacks( inst ?callInitProc t ?useInstCDF t))"
?initialSize list( 350 80 )
)
swSelInstTrigCBsMenu = hiCreateMenuItem(
?name 'swSelInstTrigCBsMenu
?itemText "Trigger Callbacks on Selected Instances"
?callback "hiDisplayForm(swSelInstTriggerCallbacks)"
)
swAllInstTriggerCallbacks = hiCreateAppForm(
?name `swAllInstTriggerCallbacks
?formTitle "Trigger Callbacks on All Instances"
?fields list(
list( swTriggerCBsWarning1 0: 5 350:20 )
list( swTriggerCBsWarning2 0:25 350:20 )
)
?callback "CCSinvokeCdfCallbacks(geGetEditCellView(getCurrentWindow()) ?callInitProc t ?useInstCDF t )"
?initialSize list( 350 80 )
)
swAllInstTrigCBsMenu = hiCreateMenuItem(
?name 'swAllInstTrigCBsMenu
?itemText "Trigger Callbacks on All Instances"
?callback "hiDisplayForm(swAllInstTriggerCallbacks)"
)
procedure( swLibTrig(@rest args)
projLibs = hiCreateCyclicField(
?name 'projLibs
?prompt "Library:"
?choices sort(setof( lib ddGetLibList()
(lib->cells && !rexMatchp(car(getInstallPath()) lib->readpath)) )~>name nil)
)
swLibTriggerCallbacks = hiCreateAppForm(
?name `swLibTriggerCallbacks
?formTitle "Trigger Callbacks on Entire Library"
?fields list(
list( swTriggerCBsWarning1 0: 5 350:20 )
list( swTriggerCBsWarning2 0:25 350:20 )
list( projLibs 5:55 300:30 55 )
)
?callback "swCdfCallbackEntireLib(hiGetCurrentForm()->projLibs->value)"
?initialSize list( 350 120 )
)
hiDisplayForm(swLibTriggerCallbacks)
)
swLibTrigCBsMenu = hiCreateMenuItem(
?name 'swLibTrigCBsMenu
?itemText "Trigger Callbacks on Entire Library"
?callback "swLibTrig()"
)
;-------------------
; Check & Save
;-------------------
procedure( swLibCnS(@rest args)
projLibs = hiCreateCyclicField(
?name 'projLibs
?prompt "Library:"
?choices sort(setof( lib ddGetLibList()
(lib->cells && !rexMatchp(car(getInstallPath()) lib->readpath)) )~>name nil)
)
swLibCheckAndSave = hiCreateAppForm(
?name `swLibCheckAndSave
?formTitle "Check And Save on Entire Library"
?fields list( list(projLibs 5:5 300:30 55) )
?callback "SWcheckAllSymAndSch(hiGetCurrentForm()->projLibs->value t)"
?initialSize list( 350 60 )
)
hiDisplayForm(swLibCheckAndSave)
)
swLibCnSMenu = hiCreateMenuItem(
?name 'swLibCnSMenu
?itemText "Check And Save on Entire Library"
?callback "swLibCnS()"
)
;-------------------
; Documentation/About
;-------------------
procedure( swOpenPDFdoc(pdfFile @optional (docsDir strcat(getShellEnvVar("PDK_HOME") "/DOC")) )
let( (pdfViewer pdfCmd)
pdfViewer = getShellEnvVar("PDFVIEWER")
unless( pdfViewer
pdfViewer = "/usr/bin/evince"
); unless
pdfCmd = sprintf(nil "%s %s/%s &" pdfViewer docsDir pdfFile )
shell(pdfCmd)
t
); let
); proc
let( (S130PDKdocsDir S130PdfDocs)
S130PDKdocsDir = strcat(getShellEnvVar("PDK_HOME") "/DOC")
S130PdfDocs = sort(setof( file getDirFiles(S130PDKdocsDir) rexMatchp("pdf$" file)) nil)
S130DocMenuItems = list()
if( length(S130PdfDocs) > 0 then
foreach( pdf S130PdfDocs
let( (baseName swDocMenu)
rexCompile("\\.pdf")
baseName = rexReplace(pdf "" 0)
rexCompile("_")
swDocMenu = hiCreateMenuItem(
?name stringToSymbol(strcat("swDoc" baseName "Menu"))
?itemText rexReplace(baseName " " 0)
?callback sprintf(nil "swOpenPDFdoc(%L)" pdf)
)
S130DocMenuItems = append1( S130DocMenuItems swDocMenu )
); let
); foreach pdf
else
swDocMenu = hiCreateMenuItem(
?name 'swDocNoMenu
?itemText "No Documents Available"
)
S130DocMenuItems = append1( S130DocMenuItems swDocMenu )
); if pdfs exist
); let
hiCreatePulldownMenu(
'swDocMenu
"PDK Documents"
S130DocMenuItems
)
swDocMenuAdd = hiCreateSliderMenuItem(
?name 'swDocMenuAdd
?itemText "PDK Documents"
?subMenu swDocMenu
)
;-------------------
; Q & A
;-------------------
swQADRCItem = hiCreateMenuItem(
?name 'swQADRCItem
?itemText "QA Libs: DRC"
?callback "laQADRCGUI(nil \"QA_S130_DRC\" nil nil nil nil)"
)
swQALVSItem = hiCreateMenuItem(
?name 'swQALVSItem
?itemText "QA Libs: LVS"
?callback "laQALVSGUI()"
)
swQAPcellsItem = hiCreateMenuItem(
?name 'swQAPcellsItem
?itemText "S130 QA: Pcell Placer"
?callback "S130QA_PcellPlacementForm()"
)
swQAPcellVerifItem = hiCreateMenuItem(
?name 'swQAPcellVerifItem
?itemText "S130 QA: Pcell Verification"
?callback "S130QA_pcellVerif()"
)
swQAPcellSimItem = hiCreateMenuItem(
?name 'swQAPcellSimItem
?itemText "S130 QA: Pcell Simulator"
?callback "S130QA_pcellSim()"
)
hiCreatePulldownMenu(
'swQAMenu
"Developer QA"
list( swQADRCItem swQALVSItem swQAPcellVerifItem swQAPcellSimItem )
)
swQAMenuAdd = hiCreateSliderMenuItem(
?name 'swQAMenuAdd
?itemText "Developer QA"
?subMenu swQAMenu
)
;===============================================================================
; Create Menus
;===============================================================================
;-------------------
; Schematic SkyWater Menu
;-------------------
hiCreatePulldownMenu(
'swSchPulldownMenu
"SkyWater"
list(
swSelInstTrigCBsMenu
swAllInstTrigCBsMenu
)
)
when( getShellEnvVar("PDK_DEV") == "t"
hiAddMenuItem( swSchPulldownMenu swSeparator )
hiAddMenuItem( swSchPulldownMenu swQAPcellsItem )
)
procedure( swSchMenu(args)
hiInsertBannerMenu( hiGetCurrentWindow() swSchPulldownMenu 20)
)
;; Trigger for adding to Schematic windows
deRegUserTriggers("schematic" nil nil 'swSchMenu)
deRegUserTriggers("schematicXL" nil nil 'swSchMenu)
;-------------------
; Layout SkyWater Menu
;-------------------
hiCreatePulldownMenu(
'swLayPulldownMenu
"SkyWater"
list(
swSelInstTrigCBsMenu
swAllInstTrigCBsMenu
)
)
when( getShellEnvVar("PDK_DEV") == "t"
hiAddMenuItem( swLayPulldownMenu swSeparator )
hiAddMenuItem( swLayPulldownMenu swQAPcellsItem )
)
procedure( swLayMenu(args)
hiInsertBannerMenu( hiGetCurrentWindow() swLayPulldownMenu 20)
)
;; Trigger for adding to Layout windows
deRegUserTriggers("maskLayout" nil nil 'swLayMenu)
deRegUserTriggers("maskLayoutXL" nil nil 'swLayMenu)
;-------------------
; CIW SkyWater Menu
;-------------------
swCiwPulldownMenu = hiCreatePulldownMenu(
'swCiwPulldownMenu
"SkyWater"
list(
swLibCnSMenu
swLibTrigCBsMenu
)
)
when( getShellEnvVar("PDK_DEV") == "t"
hiAddMenuItem( swCiwPulldownMenu swSeparator )
hiAddMenuItem( swCiwPulldownMenu swQAMenuAdd )
)
; add the document/about menu
hiAddMenuItem( swCiwPulldownMenu hiCreateSeparatorMenuItem( ?name 'swSep ) )
hiAddMenuItem( swCiwPulldownMenu swDocMenuAdd )
hiInsertBannerMenu( window(1) swCiwPulldownMenu
(length (hiGetBannerMenus window(1)))
)
;-------------------
; ADE SkyWater Menu
;-------------------
swADEModelGui = hiCreateMenuItem(
?name 'swADEModelGui
?itemText "Open Model GUI"
?callback "ADE_modelGUI()"
)
hiCreatePulldownMenu(
'swAdePulldownMenu
"SkyWater"
list( swADEModelGui )
)
procedure( swADEPostInstallTrigger(args)
hiInsertBannerMenu(
hiGetCurrentWindow()~>sevSession~>window
swAdePulldownMenu
length( hiGetBannerMenus( hiGetCurrentWindow()~>sevSession~>window))
)
); procedure
deRegUserTriggers( "analogArtist-schematic" nil nil 'swADEPostInstallTrigger)
deRegUserTriggers( "adexl" nil nil 'swADEPostInstallTrigger)
deRegUserTriggers( "maestro" nil nil 'swADEPostInstallTrigger)
deRegUserTriggers( "explorer" nil nil 'swADEPostInstallTrigger)
; needed for ADE L
;envSetVal("asimenv.startup" "sessInitTrigFunc" 'string "swADEPostInstallTrigger")