2021-08-18 20:21:52 +02:00
|
|
|
TOP_DIR := $(realpath $(dir $(lastword $(MAKEFILE_LIST))))
|
2021-11-02 19:10:59 +01:00
|
|
|
include $(TOP_DIR)/openram.mk
|
2021-08-18 20:21:52 +02:00
|
|
|
|
2021-11-02 19:10:59 +01:00
|
|
|
.DEFAULT_GOAL := install
|
2021-08-18 20:21:52 +02:00
|
|
|
|
2021-11-02 23:07:18 +01:00
|
|
|
# Keep it locally if they didn't specify
|
|
|
|
|
PDK_ROOT ?= $(TOP_DIR)
|
|
|
|
|
|
2021-08-18 20:21:52 +02:00
|
|
|
# Skywater PDK SRAM library
|
2021-11-02 23:07:18 +01:00
|
|
|
SRAM_LIB_DIR ?= $(PDK_ROOT)/sky130_fd_bd_sram
|
|
|
|
|
SRAM_LIB_GIT_REPO ?= https://github.com/google/skywater-pdk-libs-sky130_fd_bd_sram.git
|
|
|
|
|
SRAM_LIB_GIT_COMMIT ?= main
|
2021-10-28 17:43:28 +02:00
|
|
|
|
2021-08-18 20:21:52 +02:00
|
|
|
# Open PDKs
|
2021-11-02 23:07:18 +01:00
|
|
|
OPEN_PDKS_DIR ?= $(PDK_ROOT)/open_pdks
|
|
|
|
|
OPEN_PDKS_GIT_REPO ?= https://github.com/RTimothyEdwards/open_pdks.git
|
|
|
|
|
OPEN_PDKS_GIT_COMMIT ?= 1.0.156
|
2021-11-08 18:31:56 +01:00
|
|
|
SKY130_PDK ?= $(PDK_ROOT)/sky130A
|
2021-08-18 20:21:52 +02:00
|
|
|
|
|
|
|
|
# Create lists of all the files to copy/link
|
2021-11-02 23:07:18 +01:00
|
|
|
GDS_FILES := $(sort $(wildcard $(SRAM_LIB_DIR)/cells/*/*.gds))
|
|
|
|
|
MAG_FILES := $(sort $(wildcard $(SRAM_LIB_DIR)/cells/*/*.mag))
|
2021-08-18 20:21:52 +02:00
|
|
|
|
|
|
|
|
SPICE_SUFFIX := spice
|
|
|
|
|
SPICE_LVS_SUFFIX := lvs.$(SPICE_SUFFIX)
|
|
|
|
|
SPICE_CALIBRE_SUFFIX := lvs.calibre.$(SPICE_SUFFIX)
|
|
|
|
|
SPICE_BASE_SUFFIX := base.$(SPICE_SUFFIX)
|
2021-11-02 23:07:18 +01:00
|
|
|
ALL_SPICE_FILES := $(sort $(wildcard $(SRAM_LIB_DIR)/cells/*/*.$(SPICE_SUFFIX)))
|
2021-08-18 20:21:52 +02:00
|
|
|
|
|
|
|
|
MAGLEF_SUFFIX := maglef
|
2021-11-02 23:07:18 +01:00
|
|
|
MAGLEF_FILES := $(sort $(wildcard $(SRAM_LIB_DIR)/cells/*/*.$(MAGLEF_SUFFIX)))
|
2021-08-18 20:21:52 +02:00
|
|
|
|
2021-11-02 23:07:18 +01:00
|
|
|
MAGICRC_FILE := $(SKY130_PDK)/libs.tech/magic/sky130A.magicrc
|
2021-08-18 20:21:52 +02:00
|
|
|
|
|
|
|
|
ALL_FILES := $(ALL_SPICE_FILES) $(GDS_FILES) $(MAG_FILES) $(MAGLEF_FILES)
|
|
|
|
|
|
|
|
|
|
|
2021-11-02 23:07:18 +01:00
|
|
|
INSTALL_BASE_DIRS := gds_lib mag_lib sp_lib lvs_lib calibre_lvs_lib maglef_lib
|
2021-08-18 20:21:52 +02:00
|
|
|
INSTALL_BASE := $(OPENRAM_HOME)/../technology/sky130
|
|
|
|
|
INSTALL_DIRS := $(addprefix $(INSTALL_BASE)/,$(INSTALL_BASE_DIRS))
|
|
|
|
|
|
2021-11-02 23:07:18 +01:00
|
|
|
$(OPEN_PDKS_DIR):
|
|
|
|
|
@echo "Cloning open_pdks..."
|
|
|
|
|
git clone $(OPEN_PDKS_GIT_REPO) $(OPEN_PDKS_DIR)
|
|
|
|
|
cd $(OPEN_PDKS_DIR) && git checkout $(OPEN_PDKS_GIT_COMMIT)
|
2021-10-05 01:00:37 +02:00
|
|
|
|
2021-11-02 23:07:18 +01:00
|
|
|
$(SKY130_PDK): $(OPEN_PDKS_DIR)
|
|
|
|
|
@echo "Installing open_pdks..."
|
|
|
|
|
cd $(OPEN_PDKS_DIR) &&\
|
2021-11-08 18:31:56 +01:00
|
|
|
./configure --enable-sky130-pdk=$(PDK_ROOT)/skywater-pdk/libraries \
|
|
|
|
|
--disable-openlane --disable-irsim --disable-xschem --disable-qflow &&\
|
|
|
|
|
cd sky130 && \
|
|
|
|
|
make veryclean && \
|
|
|
|
|
make && \
|
|
|
|
|
make SHARED_PDKS_PATH=$(PDK_ROOT) install
|
2021-10-05 01:00:37 +02:00
|
|
|
|
2021-11-02 23:07:18 +01:00
|
|
|
install: $(SRAM_LIB_DIR) $(SKY130_PDK) $(INSTALL_DIRS)
|
2021-08-18 20:21:52 +02:00
|
|
|
@echo "Installing sky130 SRAM PDK..."
|
|
|
|
|
@echo "PDK_ROOT='$(PDK_ROOT)'"
|
2021-11-02 23:07:18 +01:00
|
|
|
@echo "SRAM_LIB_DIR='$(SRAM_LIB_DIR)'"
|
|
|
|
|
@echo "SKY130_PDK='$(SKY130_PDK)'"
|
2021-08-18 20:21:52 +02:00
|
|
|
@true
|
2021-11-02 23:07:18 +01:00
|
|
|
.PHONY: install
|
2021-08-18 20:21:52 +02:00
|
|
|
|
2021-11-02 23:07:18 +01:00
|
|
|
$(SRAM_LIB_DIR):
|
|
|
|
|
@echo "Cloning SRAM library..."
|
|
|
|
|
git clone $(SRAM_LIB_GIT_REPO) $(SRAM_LIB_DIR)
|
|
|
|
|
cd $(SRAM_LIB_DIR) && git checkout $(SRAM_LIB_GIT_COMMIT)
|
2021-11-02 19:10:59 +01:00
|
|
|
|
2021-11-02 23:07:18 +01:00
|
|
|
.PHONY: $(INSTALL_DIRS)
|
2021-11-02 19:10:59 +01:00
|
|
|
|
2021-08-18 20:21:52 +02:00
|
|
|
$(INSTALL_BASE)/gds_lib: $(GDS_FILES)
|
|
|
|
|
@echo
|
|
|
|
|
@echo "Setting up GDS cell library for OpenRAM."
|
|
|
|
|
@echo "=================================================================="
|
|
|
|
|
mkdir -p $@
|
2021-11-02 23:07:18 +01:00
|
|
|
cp -va $? $@
|
2021-08-18 20:21:52 +02:00
|
|
|
@echo "=================================================================="
|
|
|
|
|
@echo
|
|
|
|
|
|
|
|
|
|
$(INSTALL_BASE)/mag_lib: $(MAG_FILES)
|
|
|
|
|
@echo
|
|
|
|
|
@echo "Setting up MAG files for OpenRAM."
|
|
|
|
|
@echo "=================================================================="
|
|
|
|
|
mkdir -p $@
|
|
|
|
|
@cp -va $? $@
|
|
|
|
|
@echo
|
|
|
|
|
cp -f $(MAGICRC_FILE) $(INSTALL_BASE)/tech/.magicrc
|
|
|
|
|
cp -f $(MAGICRC_FILE) $(INSTALL_BASE)/mag_lib/.magicrc
|
|
|
|
|
@echo "=================================================================="
|
|
|
|
|
@echo
|
|
|
|
|
|
|
|
|
|
$(INSTALL_BASE)/maglef_lib: $(MAGLEF_FILES)
|
|
|
|
|
@echo
|
|
|
|
|
@echo "Setting up MAGLEF cell library for OpenRAM."
|
|
|
|
|
@echo "=================================================================="
|
|
|
|
|
mkdir -p $@
|
|
|
|
|
@for SP in $?; do \
|
|
|
|
|
cp -va $$SP $@/$$(basename $$SP .$(MAGLEF_SUFFIX)).mag; \
|
|
|
|
|
done
|
|
|
|
|
@echo
|
|
|
|
|
cp -f $(MAGICRC_FILE) $(INSTALL_BASE)/maglef_lib/.magicrc
|
|
|
|
|
@echo "=================================================================="
|
|
|
|
|
@echo
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
$(INSTALL_BASE)/lvs_lib: $(filter %.$(SPICE_LVS_SUFFIX),$(ALL_SPICE_FILES))
|
|
|
|
|
@echo
|
|
|
|
|
@echo "Setting up LVS cell library for OpenRAM."
|
|
|
|
|
@echo "=================================================================="
|
|
|
|
|
mkdir -p $@
|
|
|
|
|
@for SP in $?; do \
|
|
|
|
|
cp -va $$SP $@/$$(basename $$SP .$(SPICE_LVS_SUFFIX)).sp; \
|
|
|
|
|
done
|
|
|
|
|
@echo "=================================================================="
|
|
|
|
|
@echo
|
|
|
|
|
|
|
|
|
|
$(INSTALL_BASE)/calibre_lvs_lib: $(filter %.$(SPICE_CALIBRE_SUFFIX),$(ALL_SPICE_FILES))
|
|
|
|
|
@echo
|
|
|
|
|
@echo "Setting up Calibre LVS library for OpenRAM."
|
|
|
|
|
@echo "=================================================================="
|
|
|
|
|
mkdir -p $@
|
|
|
|
|
@for SP in $?; do \
|
|
|
|
|
cp -va $$SP $@/$$(basename $$SP .$(SPICE_CALIBRE_SUFFIX)).sp; \
|
|
|
|
|
done
|
|
|
|
|
@echo "=================================================================="
|
|
|
|
|
@echo
|
|
|
|
|
|
|
|
|
|
$(INSTALL_BASE)/sp_lib: $(filter-out %.$(SPICE_LVS_SUFFIX) %.$(SPICE_CALIBRE_SUFFIX),$(ALL_SPICE_FILES))
|
|
|
|
|
@echo
|
|
|
|
|
@echo "Setting up spice simulation library for OpenRAM."
|
|
|
|
|
@echo "=================================================================="
|
|
|
|
|
mkdir -p $@
|
|
|
|
|
@for SP in $(filter-out %.$(SPICE_BASE_SUFFIX),$?); do \
|
|
|
|
|
cp -va $$SP $@/$$(basename $$SP .$(SPICE_SUFFIX)).sp; \
|
|
|
|
|
done
|
|
|
|
|
@echo
|
|
|
|
|
@echo "Overwriting some cells with base version."
|
|
|
|
|
@for SP in $(filter %.$(SPICE_BASE_SUFFIX),$?); do \
|
|
|
|
|
cp -va $$SP $@/$$(basename $$SP .$(SPICE_BASE_SUFFIX)).sp; \
|
|
|
|
|
done
|
|
|
|
|
@echo "=================================================================="
|
|
|
|
|
@echo
|
|
|
|
|
|
2021-11-02 19:10:59 +01:00
|
|
|
macros:
|
|
|
|
|
cd macros && make
|
|
|
|
|
|
|
|
|
|
.PHONY: macros
|
|
|
|
|
|
2021-11-03 16:32:29 +01:00
|
|
|
mount:
|
2021-11-03 16:42:00 +01:00
|
|
|
@docker run -it -v $(TOP_DIR):/openram \
|
2021-11-03 16:32:29 +01:00
|
|
|
-v $(SKY130_PDK):$(SKY130_PDK) \
|
|
|
|
|
-e PDK_ROOT=$(PDK_ROOT) \
|
|
|
|
|
-e OPENRAM_HOME=/openram/compiler \
|
|
|
|
|
-e OPENRAM_TECH=/openram/technology \
|
|
|
|
|
--user $(UID):$(GID) \
|
|
|
|
|
vlsida/openram-ubuntu:latest
|
|
|
|
|
.PHONY: mount
|
|
|
|
|
|
2021-11-03 16:34:49 +01:00
|
|
|
clean:
|
2021-11-03 16:36:10 +01:00
|
|
|
@rm -f *.zip
|
2021-11-03 16:34:49 +01:00
|
|
|
.PHONE: clean
|
2021-11-02 19:10:59 +01:00
|
|
|
|
2021-11-03 16:34:49 +01:00
|
|
|
uninstall: clean
|
2021-11-03 16:36:10 +01:00
|
|
|
@rm -f $(INSTALL_BASE)/tech/.magicrc
|
|
|
|
|
@rm -f $(INSTALL_BASE)/mag_lib/.magicrc
|
|
|
|
|
@rm -f $(INSTALL_BASE)/lef_lib/.magicrc
|
|
|
|
|
@rm -f $(INSTALL_BASE)/maglef_lib/.magicrc
|
|
|
|
|
@rm -rf $(INSTALL_DIRS)
|
2021-11-03 16:34:49 +01:00
|
|
|
.PHONY: uninstall
|
2021-11-02 23:07:18 +01:00
|
|
|
|
2021-11-03 16:34:49 +01:00
|
|
|
# wipe the entire repos
|
|
|
|
|
wipe: uninstall
|
2021-11-03 16:36:10 +01:00
|
|
|
@echo "Wiping PDK repos in 5 sec... (ctrl-c to quit)"
|
|
|
|
|
@sleep 5
|
2021-11-08 18:31:56 +01:00
|
|
|
rm -rf $(SKY130_PDK)
|
|
|
|
|
rm -rf $(SRAM_LIB_DIR)
|
|
|
|
|
rm -rf $(OPEN_PDKS_DIR)
|
2021-11-03 16:34:49 +01:00
|
|
|
.PHONY: wipe
|