blob: 7ec699d6d7c29607769d50f81b6579c3b0e89eb3 [file] [log] [blame]
# SPDX-FileCopyrightText: 2020 Efabless Corporation
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
# SPDX-License-Identifier: Apache-2.0
# Allow override of PDK path from environment variable PDKPATH. Failing
# that, fall back on definitions of PDK_ROOT and PDK. If either of those
# fails, substitute a default. If PDKPATH has been specified, then get
# PDK_VARIANT from the tail of PDKPATH.
if {[catch {set PDKPATH $env(PDKPATH)}]} {
if {[catch {set PDK_ROOT $env(PDK_ROOT)}]} {
set PDK_ROOT /usr/share/pdk
}
if {[catch {set PDK_VARIANT $env(PDK)}]} {
set PDK_VARIANT sky130A
}
set PDKPATH ${PDK_ROOT}/${PDK_VARIANT}
} else {
set PDK_VARIANT [file tail ${PDKPATH}]
}
puts stdout "Sourcing design .magicrc for technology $PDK_VARIANT ..."
# 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
# loading technology
tech load $PDKPATH/libs.tech/magic/${PDK_VARIANT}.tech
# load device generator
source $PDKPATH/libs.tech/magic/${PDK_VARIANT}.tcl
# load bind keys (optional)
# source $PDKPATH/libs.tech/magic/${PDK_VARIANT}-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 maglef
}
path search [concat "../$MAGTYPE" [path search]]
# add path to reference cells
if {[file isdir ${PDKPATH}/libs.ref/${MAGTYPE}]} {
addpath ${PDKPATH}/libs.ref/${MAGTYPE}/sky130_fd_pr
addpath ${PDKPATH}/libs.ref/${MAGTYPE}/sky130_fd_io
addpath ${PDKPATH}/libs.ref/${MAGTYPE}/sky130_fd_sc_hd
addpath ${PDKPATH}/libs.ref/${MAGTYPE}/sky130_fd_sc_hdll
addpath ${PDKPATH}/libs.ref/${MAGTYPE}/sky130_fd_sc_hs
addpath ${PDKPATH}/libs.ref/${MAGTYPE}/sky130_fd_sc_hvl
addpath ${PDKPATH}/libs.ref/${MAGTYPE}/sky130_fd_sc_lp
addpath ${PDKPATH}/libs.ref/${MAGTYPE}/sky130_fd_sc_ls
addpath ${PDKPATH}/libs.ref/${MAGTYPE}/sky130_fd_sc_ms
addpath ${PDKPATH}/libs.ref/${MAGTYPE}/sky130_osu_sc
addpath ${PDKPATH}/libs.ref/mag/sky130_ml_xx_hd
} else {
addpath ${PDKPATH}/libs.ref/sky130_fd_pr/${MAGTYPE}
addpath ${PDKPATH}/libs.ref/sky130_fd_io/${MAGTYPE}
addpath ${PDKPATH}/libs.ref/sky130_fd_sc_hd/${MAGTYPE}
addpath ${PDKPATH}/libs.ref/sky130_fd_sc_hdll/${MAGTYPE}
addpath ${PDKPATH}/libs.ref/sky130_fd_sc_hs/${MAGTYPE}
addpath ${PDKPATH}/libs.ref/sky130_fd_sc_hvl/${MAGTYPE}
addpath ${PDKPATH}/libs.ref/sky130_fd_sc_lp/${MAGTYPE}
addpath ${PDKPATH}/libs.ref/sky130_fd_sc_ls/${MAGTYPE}
addpath ${PDKPATH}/libs.ref/sky130_fd_sc_ms/${MAGTYPE}
addpath ${PDKPATH}/libs.ref/sky130_osu_sc/${MAGTYPE}
addpath ${PDKPATH}/libs.ref/sky130_ml_xx_hd/mag
}
addpath hexdigits
addpath ../subcells/simple_por/mag
# add path to GDS cells
# 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}