blob: 0dd4a033d2cee8b93f616508c8f99c95fb0c677b [file] [log] [blame] [edit]
#!/bin/bash
export CALIBRE_HOME=/usr/local/google/edatools/mentor/calibre/2018.4.34.26/aoj_cal_2018.4_34.26/
export MGC_TMPDIR=/tmp
export MGC_CALIBRE_LAYOUT_TMP_FILE=/tmp/query_results
export CALIBRE_DISABLE_RHEL5_WARNING=1
export USE_CALIBRE_VCO=aoj
export CALIBRE_VERSION_DASH=2018.4_34.26
export CALIBRE_VERSION_DOT=$(echo $CALIBRE_VERSION_DASH | sed -e's/_/./')
export MGC_HOME=/usr/local/google/edatools/mentor/calibre/$CALIBRE_VERSION_DOT/aoj_cal_$CALIBRE_VERSION_DASH/
export PATH=${MGC_HOME}/bin:${PATH}
export MGLS_LICENSE_FILE=1817@gchips-licenses.corp.google.com
export LM_LICENSE_FILE=1717@gchips-licenses.corp.google.com
export PDK_VERSION="V1.3.0"
export PDK_HOME="/data/pdks/skywater/s8/$PDK_VERSION"
export RUNSET_DIR="$PDK_HOME/DRC/Calibre"
if [ -z $VERSION ];then
echo "Missing VERSION"
exit 1
fi
export TEST_DIR=/usr/local/google/home/tansell/work/openflow-drc-tests
export VERILOG=$TEST_DIR/verilog
export CDL=$TEST_DIR/cdl
export JOB_HOME=$TEST_DIR/torture_tests/$VERSION/
if [ ! -d "$JOB_HOME" ]; then
echo "$JOB_HOME doesn't exist?"
exit 1
fi
for GDS_FILE in $JOB_HOME/*.gds; do
export JOB_NAME="$(basename -s .gds $GDS_FILE)"
# export JOB_NAME=s8pir_10r_vcells_lvs
# export JOB_NAME=torture_test_s8
echo
echo
echo
echo "export JOB_HOME='$JOB_HOME'"
echo "export JOB_NAME='$JOB_NAME'"
echo "====================================="
if [ ! -e $JOB_HOME/$JOB_NAME.gds ]; then
echo "Did not find '$JOB_HOME/$JOB_NAME.gds'"
exit 1
fi
set -x
cd $TEST_DIR
git checkout HEAD $TEST_DIR/runsets/*_runset
#sed -i -e"s@\$JOB_HOME@$JOB_HOME@" $TEST_DIR/runsets/*_runset
cd ~/github/google/skywater-pdk/s8/$PDK_VERSION
# No-PEX extraction (ugly)
export LAYOUT_PRIMARY="$JOB_NAME"
export LAYOUT_PATH="$JOB_HOME/$JOB_NAME.gds"
export LAYOUT_NAME=$LAYOUT_PRIMARY
export LVS_RUNSET_DIR="$PDK_HOME/LVS/Calibre"
echo -en "LAYOUT SYSTEM GDSII\nLAYOUT PRIMARY $LAYOUT_PRIMARY\nLAYOUT PATH \"$LAYOUT_PATH\"\nERC RESULTS DATABASE "ercdb"\nINCLUDE $LVS_RUNSET_DIR/lvsRules_s8" > spice_runset
# end no-PEX extraction
# V2LVS flow
if [ -e $VERILOG/$JOB_NAME.v ] ; then
if compgen -G "${CDL}/library_*.cdl" > /dev/null; then
cat $CDL/library_*.cdl > $JOB_HOME/libraries.cdl
else
echo "* empty libraries" > $JOB_HOME/libraries.cdl
fi
# converts a verilog structural netlist to a SPICE-like netlist for LVS
v2lvs -v $VERILOG/$JOB_NAME.v -o $JOB_HOME/${JOB_NAME}_v2lvs.spice -s $JOB_HOME/libraries.cdl > $JOB_HOME/$JOB_NAME.v2lvs.log 2>&1 || true
cp $JOB_HOME/${JOB_NAME}_v2lvs.spice $JOB_HOME/$JOB_NAME.cdl
fi
# end V2LVS flow
#########################################################
# Disabling those to speed things up for LVS for now:
#########################################################
calibre -gui -drc -runset $TEST_DIR/runsets/s8_drc_runset -batch > $JOB_HOME/$JOB_NAME.drc_runset.log 2>&1
calibre -gui -drc -runset $TEST_DIR/runsets/s8_fill_runset -batch > $JOB_HOME/$JOB_NAME.fill_runset.log 2>&1
calibre -gui -drc -runset $TEST_DIR/runsets/s8_latchup_runset -batch > $JOB_HOME/$JOB_NAME.latchup_runset.log 2>&1
calibre -gui -drc -runset $TEST_DIR/runsets/s8_lures_runset -batch > $JOB_HOME/$JOB_NAME.lures_runset.log 2>&1
calibre -gui -drc -runset $TEST_DIR/runsets/s8_soft_runset -batch > $JOB_HOME/$JOB_NAME.soft_runset.log 2>&1
calibre -gui -drc -runset $TEST_DIR/runsets/s8_stress_runset -batch > $JOB_HOME/$JOB_NAME.stress_runset.log 2>&1
calibre -gui -drc -runset $TEST_DIR/runsets/s8_drcmr_runset -batch > $JOB_HOME/$JOB_NAME.drcmr_runset.log 2>&1
# remove fill cells and tap cells from the source netlist before LVS
[ -f $JOB_HOME/$JOB_NAME.cdl ] && \
python3 $TEST_DIR/scripts/remove_spice_instances.py \
$JOB_HOME/$JOB_NAME.cdl \
sky130_fd_sc_hd__fill sky130_fd_sc_hvl__fill sky130_fd_sc_hd__tapvpwrvgnd_1 \
> $JOB_HOME/$JOB_NAME.remove_spice_instances.log 2>&1
[ -f $JOB_HOME/$JOB_NAME.cdl ] && cp $JOB_HOME/$JOB_NAME.cdl $JOB_HOME/$JOB_NAME.lvs_source.cdl
# patch the LVS rules to avoid the need for polycuts
cp $PDK_HOME/LVS/Calibre/lvsRules_s8 $PDK_HOME/LVS/Calibre/lvsRules_s8.bk
cp $PDK_HOME/PEX/xRC/extLvsRules_s8_5lm $PDK_HOME/PEX/xRC/extLvsRules_s8_5lm.bk
sed -i "/^POLY_cond_nrc =/s/q9xuhrpoly_0p69_sub/xuhrpoly_0p69_sub/g" $PDK_HOME/PEX/xRC/extLvsRules_s8_5lm
cp $PDK_HOME/LVS/Calibre/lvsRules_s8 $JOB_HOME
cp $PDK_HOME/PEX/xRC/extLvsRules_s8_5lm $JOB_HOME
timeout 10800 calibre -gui -lvs -runset $TEST_DIR/runsets/s8_lvs_runset -batch > $JOB_HOME/$JOB_NAME.lvs_runset.log 2>&1
# restore the originals
mv $PDK_HOME/LVS/Calibre/lvsRules_s8.bk $PDK_HOME/LVS/Calibre/lvsRules_s8
mv $PDK_HOME/PEX/xRC/extLvsRules_s8_5lm.bk $PDK_HOME/PEX/xRC/extLvsRules_s8_5lm
# layout extraction
#########################################################
# Disabling those to speed things up for LVS for now:
#########################################################
# calibre -spice ${VERSION}.cdl spice_runset > $JOB_HOME/$JOB_NAME.extract.runset.log 2>&1
# mkdir $JOB_HOME/extract
# mv lvs.rep.ext $JOB_HOME/extract/
# mv ercdb $JOB_HOME/extract/
# cp ${VERSION}.cdl $JOB_HOME/extract
# mv ${VERSION}.cdl $JOB_HOME/
# rm spice_runset
# calibre -gui -pex -runset $TEST_DIR/runsets/s8_xRC_runset -batch > $JOB_HOME/$JOB_NAME.xRC_runset.log 2>&1
find $JOB_HOME -type f -exec sed -i -e's/... [0-9][0-9] [0-9 ][0-9]:[0-9][0-9]:[0-9][0-9] 2.../... XX XX:XX:XX 2.../' \{\} \+
done
exit 0