###
###	Source file sky130.magicrc
###	Process this file with the m4 processor
###
puts stdout "Sourcing design .magicrc for technology TECHNAME ..."

# Put grid on 0.005 pitch.  This is important, as some commands don't
# rescale the grid automatically (such as lef read?).

set scalefac [tech lambda]
if {[lindex $scalefac 1] < 2} {
    scalegrid 1 2
}

# drc off
drc euclidean on
# Change this to a fixed number for repeatable behavior with GDS writes
# e.g., "random seed 12345"
catch {random seed}

# Turn off the scale option on ext2spice or else it conflicts with the
# scale in the model files.
ext2spice scale off

# Allow override of PDK path from environment variable PDK_ROOT
if {[catch {set PDK_ROOT $env(PDK_ROOT)}]} {
    set PDK_ROOT "STAGING_PATH"
}

# loading technology
#ifdef FULLTECH
tech load $PDK_ROOT/TECHNAME/MAGIC_CURRENT/TECHNAME-F.tech
#else
tech load $PDK_ROOT/TECHNAME/MAGIC_CURRENT/TECHNAME.tech
#endif

# load device generator
source $PDK_ROOT/TECHNAME/MAGIC_CURRENT/TECHNAME.tcl

# load bind keys (optional)
# source $PDK_ROOT/TECHNAME/MAGIC_CURRENT/TECHNAME-BindKeys

# set units to lambda grid 
snap lambda

# set sky130 standard power, ground, and substrate names
set VDD VPWR
set GND VGND
set SUB VSUBS

# Allow override of type of magic library views used, "mag" or "maglef",
# from environment variable MAGTYPE

if {[catch {set MAGTYPE $env(MAGTYPE)}]} {
   set MAGTYPE mag
}

# add path to reference cells
if {[file isdir ${PDK_ROOT}/TECHNAME/libs.ref/${MAGTYPE}]} {
    addpath ${PDK_ROOT}/TECHNAME/libs.ref/${MAGTYPE}/sky130_fd_pr
    addpath ${PDK_ROOT}/TECHNAME/libs.ref/${MAGTYPE}/sky130_fd_io
    addpath ${PDK_ROOT}/TECHNAME/libs.ref/${MAGTYPE}/sky130_fd_sc_hd
    addpath ${PDK_ROOT}/TECHNAME/libs.ref/${MAGTYPE}/sky130_fd_sc_hdll
    addpath ${PDK_ROOT}/TECHNAME/libs.ref/${MAGTYPE}/sky130_fd_sc_hs
    addpath ${PDK_ROOT}/TECHNAME/libs.ref/${MAGTYPE}/sky130_fd_sc_hvl
    addpath ${PDK_ROOT}/TECHNAME/libs.ref/${MAGTYPE}/sky130_fd_sc_lp
    addpath ${PDK_ROOT}/TECHNAME/libs.ref/${MAGTYPE}/sky130_fd_sc_ls
    addpath ${PDK_ROOT}/TECHNAME/libs.ref/${MAGTYPE}/sky130_fd_sc_ms
    addpath ${PDK_ROOT}/TECHNAME/libs.ref/${MAGTYPE}/sky130_osu_sc
    addpath ${PDK_ROOT}/TECHNAME/libs.ref/${MAGTYPE}/sky130_osu_sc_t18
    addpath ${PDK_ROOT}/TECHNAME/libs.ref/${MAGTYPE}/sky130_ml_xx_hd
    addpath ${PDK_ROOT}/TECHNAME/libs.ref/${MAGTYPE}/sky130_sram_macros
} else {
    addpath ${PDK_ROOT}/TECHNAME/libs.ref/sky130_fd_pr/${MAGTYPE}
    addpath ${PDK_ROOT}/TECHNAME/libs.ref/sky130_fd_io/${MAGTYPE}
    addpath ${PDK_ROOT}/TECHNAME/libs.ref/sky130_fd_sc_hd/${MAGTYPE}
    addpath ${PDK_ROOT}/TECHNAME/libs.ref/sky130_fd_sc_hdll/${MAGTYPE}
    addpath ${PDK_ROOT}/TECHNAME/libs.ref/sky130_fd_sc_hs/${MAGTYPE}
    addpath ${PDK_ROOT}/TECHNAME/libs.ref/sky130_fd_sc_hvl/${MAGTYPE}
    addpath ${PDK_ROOT}/TECHNAME/libs.ref/sky130_fd_sc_lp/${MAGTYPE}
    addpath ${PDK_ROOT}/TECHNAME/libs.ref/sky130_fd_sc_ls/${MAGTYPE}
    addpath ${PDK_ROOT}/TECHNAME/libs.ref/sky130_fd_sc_ms/${MAGTYPE}
    addpath ${PDK_ROOT}/TECHNAME/libs.ref/sky130_osu_sc/${MAGTYPE}
    addpath ${PDK_ROOT}/TECHNAME/libs.ref/sky130_osu_sc_t18/${MAGTYPE}
    addpath ${PDK_ROOT}/TECHNAME/libs.ref/sky130_ml_xx_hd/${MAGTYPE}
    addpath ${PDK_ROOT}/TECHNAME/libs.ref/sky130_sram_macros/${MAGTYPE}
}

# add path to GDS cells
#ifdef FULLTECH
if {[file isdir ${PDK_ROOT}/TECHNAME/libs.ref/gds]} {
    path cell ${PDK_ROOT}/TECHNAME/libs.ref/gds/sky130_fd_pr
    path cell +${PDK_ROOT}/TECHNAME/libs.ref/gds/sky130_fd_io
    path cell +${PDK_ROOT}/TECHNAME/libs.ref/gds/sky130_fd_sc_hd
    path cell +${PDK_ROOT}/TECHNAME/libs.ref/gds/sky130_fd_sc_hdll
    path cell +${PDK_ROOT}/TECHNAME/libs.ref/gds/sky130_fd_sc_hs
    path cell +${PDK_ROOT}/TECHNAME/libs.ref/gds/sky130_fd_sc_hvl
    path cell +${PDK_ROOT}/TECHNAME/libs.ref/gds/sky130_fd_sc_lp
    path cell +${PDK_ROOT}/TECHNAME/libs.ref/gds/sky130_fd_sc_ls
    path cell +${PDK_ROOT}/TECHNAME/libs.ref/gds/sky130_fd_sc_ms
    path cell +${PDK_ROOT}/TECHNAME/libs.ref/gds/sky130_osu130
    path cell +${PDK_ROOT}/TECHNAME/libs.ref/gds/sky130_osu130_t18
    path cell +${PDK_ROOT}/TECHNAME/libs.ref/gds/sky130_ml_xx_hd
    path cell +${PDK_ROOT}/TECHNAME/libs.ref/gds/sky130_sram_macros
} else {
    path cell ${PDK_ROOT}/TECHNAME/libs.ref/sky130_fd_pr/gds
    path cell +${PDK_ROOT}/TECHNAME/libs.ref/sky130_fd_io/gds
    path cell +${PDK_ROOT}/TECHNAME/libs.ref/sky130_fd_sc_hd/gds
    path cell +${PDK_ROOT}/TECHNAME/libs.ref/sky130_fd_sc_hdll/gds
    path cell +${PDK_ROOT}/TECHNAME/libs.ref/sky130_fd_sc_hs/gds
    path cell +${PDK_ROOT}/TECHNAME/libs.ref/sky130_fd_sc_hvl/gds
    path cell +${PDK_ROOT}/TECHNAME/libs.ref/sky130_fd_sc_lp/gds
    path cell +${PDK_ROOT}/TECHNAME/libs.ref/sky130_fd_sc_ls/gds
    path cell +${PDK_ROOT}/TECHNAME/libs.ref/sky130_fd_sc_ms/gds
    path cell +${PDK_ROOT}/TECHNAME/libs.ref/sky130_osu130/gds
    path cell +${PDK_ROOT}/TECHNAME/libs.ref/sky130_osu130_t18/gds
    path cell +${PDK_ROOT}/TECHNAME/libs.ref/sky130_ml_xx_hd/gds
    path cell +${PDK_ROOT}/TECHNAME/libs.ref/sky130_sram_macros/gds
}
#endif (FULLTECH)

# add path to IP from catalog.  This procedure defined in the PDK script.
catch {magic::query_mylib_ip}
# add path to local IP from user design space.  Defined in the PDK script.
catch {magic::query_my_projects}
