2021-05-31 08:58:24 +02:00
|
|
|
TECH = scn4m_subm
|
2018-01-22 22:39:07 +01:00
|
|
|
CUR_DIR = $(shell pwd)
|
|
|
|
|
TEST_DIR = ${CUR_DIR}/tests
|
|
|
|
|
|
2021-05-17 23:03:32 +02:00
|
|
|
#MAKEFLAGS += -j 1
|
2018-01-22 22:39:07 +01:00
|
|
|
|
|
|
|
|
# Library test
|
2018-12-05 21:58:10 +01:00
|
|
|
LIBRARY_TESTS = $(shell find ${TEST_DIR} -name 0[1-2]*_test.py)
|
2018-01-22 22:39:07 +01:00
|
|
|
|
|
|
|
|
# Technology and DRC tests (along with ptx)
|
2018-12-05 21:58:10 +01:00
|
|
|
TECH_TESTS = $(shell find ${TEST_DIR} -name 03*_test.py)
|
2018-01-22 22:39:07 +01:00
|
|
|
|
|
|
|
|
# Parameterized cells
|
2018-12-05 21:58:10 +01:00
|
|
|
CELL_TESTS = $(shell find ${TEST_DIR} -name 04*_test.py)
|
2018-01-22 22:39:07 +01:00
|
|
|
|
|
|
|
|
# Dynamically generated modules and arrays
|
2018-12-05 21:58:10 +01:00
|
|
|
MODULE_TESTS = $(shell find ${TEST_DIR} -name 0[5-9]*_test.py)\
|
|
|
|
|
$(shell find ${TEST_DIR} -name 1*_test.py)
|
2018-01-22 22:39:07 +01:00
|
|
|
|
|
|
|
|
# Top-level SRAM configurations
|
2018-12-05 21:58:10 +01:00
|
|
|
TOP_TESTS = $(shell find ${TEST_DIR} -name 20*_test.py)
|
2018-01-22 22:39:07 +01:00
|
|
|
|
|
|
|
|
# All simulation tests.
|
2018-12-05 21:58:10 +01:00
|
|
|
CHAR_TESTS = $(shell find ${TEST_DIR} -name 2[1-2]*_test.py)
|
2018-01-22 22:39:07 +01:00
|
|
|
|
|
|
|
|
# Keep the model lib test here since it is fast
|
|
|
|
|
# and doesn't need simulation.
|
2018-12-05 21:58:10 +01:00
|
|
|
USAGE_TESTS = $(shell find ${TEST_DIR} -name 2[3-9]*_test.py)\
|
|
|
|
|
$(shell find ${TEST_DIR} -name 30*_test.py)
|
2018-01-22 22:39:07 +01:00
|
|
|
|
2018-12-05 21:58:10 +01:00
|
|
|
ALL_TESTS = \
|
2018-01-22 22:39:07 +01:00
|
|
|
${LIBRARY_TESTS} \
|
|
|
|
|
${TECH_TESTS} \
|
2018-12-05 21:58:10 +01:00
|
|
|
${CELL_TESTS} \
|
|
|
|
|
${MODULE_TESTS} \
|
2018-01-22 22:39:07 +01:00
|
|
|
${TOP_TESTS} \
|
|
|
|
|
${CHAR_TESTS} \
|
|
|
|
|
${USAGE_TESTS}
|
|
|
|
|
|
2018-12-05 21:58:10 +01:00
|
|
|
.PHONY: ${ALL_TESTS}
|
2018-01-22 22:39:07 +01:00
|
|
|
|
2018-12-05 21:58:10 +01:00
|
|
|
all: ${ALL_TESTS}
|
2018-01-22 22:39:07 +01:00
|
|
|
|
|
|
|
|
# Library tests
|
|
|
|
|
lib: ${LIBRARY_TESTS}
|
|
|
|
|
|
|
|
|
|
# Transistor and wire tests
|
|
|
|
|
tech: ${TECH_TESTS}
|
|
|
|
|
|
|
|
|
|
# Dynamically generated cells
|
2018-12-05 21:58:10 +01:00
|
|
|
cell: ${CELL_TESTS}
|
2018-01-22 22:39:07 +01:00
|
|
|
|
|
|
|
|
# Dynamically generated modules
|
2018-12-05 21:58:10 +01:00
|
|
|
module: ${MODULE_TESTS}
|
2018-01-22 22:39:07 +01:00
|
|
|
|
|
|
|
|
# Top level SRAM tests
|
|
|
|
|
top: ${TOP_TESTS}
|
|
|
|
|
|
|
|
|
|
# Timing and characterization tests
|
|
|
|
|
char: ${CHAR_TESTS}
|
|
|
|
|
|
|
|
|
|
# Usage and file generation
|
|
|
|
|
usage: ${USAGE_TESTS}
|
|
|
|
|
|
2018-12-05 21:58:10 +01:00
|
|
|
$(ALL_TESTS):
|
|
|
|
|
python3 $@ -t ${TECH}
|
2021-05-31 07:19:56 +02:00
|
|
|
|
|
|
|
|
|
2021-05-20 22:05:16 +02:00
|
|
|
OPENRAM_TECHS = $(subst :, ,$(OPENRAM_TECH))
|
|
|
|
|
TECH_DIR := $(word 1, $(foreach dir,$(OPENRAM_TECHS),$(wildcard $(dir)/$(TECH))))
|
|
|
|
|
CONFIG_DIR = $(OPENRAM_HOME)/model_configs
|
2021-05-17 23:03:32 +02:00
|
|
|
MODEL_CONFIGS = $(wildcard $(CONFIG_DIR)/*.py)
|
2021-05-27 03:40:46 +02:00
|
|
|
SIM_DIR = $(OPENRAM_HOME)/model_data/$(TECH)
|
2021-05-20 22:05:16 +02:00
|
|
|
CSV_DIR = $(TECH_DIR)/sim_data
|
2021-05-31 07:19:56 +02:00
|
|
|
# Creates names of technology specific okay files for the configs
|
|
|
|
|
STAMPS=$(addprefix $(SIM_DIR)/, $(addsuffix .ok, $(notdir $(basename $(MODEL_CONFIGS)))))
|
|
|
|
|
|
2021-05-17 23:03:32 +02:00
|
|
|
OPTS =
|
|
|
|
|
# Characterize and perform DRC/LVS
|
|
|
|
|
OPTS += -c
|
|
|
|
|
# Do not characterize or perform DRC/LVS
|
|
|
|
|
OPTS += -n
|
|
|
|
|
# Verbosity
|
|
|
|
|
#OPTS += -v
|
|
|
|
|
# Spice
|
2021-06-10 00:42:15 +02:00
|
|
|
OPTS += -s hspice
|
2021-05-17 23:03:32 +02:00
|
|
|
|
2021-05-20 22:05:16 +02:00
|
|
|
.PHONY: model
|
2021-05-17 23:03:32 +02:00
|
|
|
|
2021-05-31 07:19:56 +02:00
|
|
|
model: $(STAMPS)
|
2021-05-20 22:05:16 +02:00
|
|
|
mkdir -p $(CSV_DIR)
|
|
|
|
|
python3 $(OPENRAM_HOME)/model_data_util.py $(SIM_DIR) $(CSV_DIR)
|
2021-05-31 07:19:56 +02:00
|
|
|
|
2021-05-31 08:58:24 +02:00
|
|
|
%.ok:
|
2021-05-31 10:07:12 +02:00
|
|
|
$(eval bname=$(basename $(notdir $@)))
|
|
|
|
|
$(eval config_path=$(CONFIG_DIR)/$(addsuffix .py, $(notdir $(basename $@))))
|
2021-05-27 03:40:46 +02:00
|
|
|
mkdir -p $(SIM_DIR)/$(bname)
|
2021-05-31 10:07:12 +02:00
|
|
|
-python3 $(OPENRAM_HOME)/openram.py $(OPTS) -p $(SIM_DIR)/$(bname) -o $(bname) -t $(TECH) $(config_path) 2>&1 > /dev/null
|
2021-05-31 07:19:56 +02:00
|
|
|
touch $@
|
|
|
|
|
|
|
|
|
|
clean_model:
|
|
|
|
|
rm -f -r $(SIM_DIR)/*.ok
|
2021-05-17 23:03:32 +02:00
|
|
|
|
2018-01-22 22:39:07 +01:00
|
|
|
clean:
|
|
|
|
|
find . -name \*.pyc -exec rm {} \;
|
|
|
|
|
find . -name \*~ -exec rm {} \;
|
|
|
|
|
|