blob: b61e1596c3ae13db585747984ec2b6456882d973 [file] [log] [blame]
#!/bin/bash -f
export CASE_NAME=$1
export PDK_ROOT=`readlink -f $2`
export PDK=$3
export TESTCASES_DIR=`readlink -f $4`
export RUN_FOLDER=`readlink -f $5`
export COND=$6
export GND=$7
export LIB=$8
export TYPE=$9
if [ "$TYPE" == "SC" ]
then
gds_file=${TESTCASES_DIR}/${LIB}/${CASE_NAME}.gds
cdl_file=${TESTCASES_DIR}/${LIB}/${CASE_NAME}.cdl
cp $gds_file $RUN_FOLDER
cp $cdl_file $RUN_FOLDER
gds_file=$RUN_FOLDER/${CASE_NAME}.gds
cdl_file=$RUN_FOLDER/${CASE_NAME}.cdl
sed -E 's/w=([0-9]\.[0-9]+) l=([0-9]\.[0-9]+)/w=$1U l=$2U/gm;t;d' $cdl_file
sed -E 's/topography=normal //gm;t;d' $cdl_file
if [ -f $gds_file ]
then
if [ -f $cdl_file ]
then
python3 $PDK_ROOT/$PDK/run_lvs.py --design=$gds_file --net=$cdl_file --output_netlist=$RUN_FOLDER/${CASE_NAME}_pass_ext.cir --report=$RUN_FOLDER/${CASE_NAME}_pass --lvs_sub=${GND-sky130_gnd} > $RUN_FOLDER/${CASE_NAME}_pass_lvs.log 2>&1
return_code=$?
if [ "$return_code" != "0" ]
then
echo "## Pass test case $CASE_NAME didn't pass as expected."
echo "$CASE_NAME,No" >> $RUN_FOLDER/sc_test.csv
if [ "$COND" == "GHA" ]
then
exit 1
fi
else
echo "## Pass test case $CASE_NAME passed successfully."
echo "$CASE_NAME,Yes" >> $RUN_FOLDER/sc_test.csv
fi
else
echo "## Can't find pass CDL for case: $cdl_file"
exit 1
fi
else
echo "## Can't find pass GDS for case: $gds_file"
exit 1
fi
else
pass_gds=$TESTCASES_DIR/pass_cases/${CASE_NAME}.gds
pass_cdl=$TESTCASES_DIR/pass_cases/${CASE_NAME}.cdl
fail_dim_gds=$TESTCASES_DIR/fail_cases/${CASE_NAME}_dim_fail.gds
fail_dim_cdl=$TESTCASES_DIR/fail_cases/${CASE_NAME}_dim_fail.cdl
fail_lay_gds=$TESTCASES_DIR/fail_cases/${CASE_NAME}_lyr_fail.gds
fail_lay_cdl=$TESTCASES_DIR/fail_cases/${CASE_NAME}_lyr_fail.cdl
fail_net_gds=$TESTCASES_DIR/fail_cases/${CASE_NAME}_net_fail.gds
fail_net_cdl=$TESTCASES_DIR/fail_cases/${CASE_NAME}_net_fail.cdl
if [ -f $pass_gds ]
then
if [ -f $pass_cdl ]
then
python3 $PDK_ROOT/$PDK/run_lvs.py --design=$pass_gds --net=$pass_cdl --output_netlist=$RUN_FOLDER/${CASE_NAME}_pass_ext.cir --report=$RUN_FOLDER/${CASE_NAME}_pass > $RUN_FOLDER/${CASE_NAME}_pass_lvs.log 2>&1
return_code=$?
if [ "$return_code" != "0" ]
then
echo "## Pass test case $CASE_NAME didn't pass as expected."
echo "$CASE_NAME,No" >> $RUN_FOLDER/pass_results.csv
if [ "$COND" == "GHA" ]
then
exit 1
fi
else
echo "## Pass test case $CASE_NAME passed successfully."
echo "$CASE_NAME,Yes" >> $RUN_FOLDER/pass_results.csv
fi
else
echo "## Can't find pass CDL for case: $pass_cdl"
exit 1
fi
else
echo "## Can't find pass GDS for case: $pass_gds"
exit 1
fi
if [ -f $fail_dim_gds ]
then
if [ -f $fail_dim_cdl ]
then
python3 $PDK_ROOT/$PDK/run_lvs.py --design=$fail_dim_gds --net=$fail_dim_cdl --output_netlist=$RUN_FOLDER/${CASE_NAME}_fail_dim_ext.cir --report=$RUN_FOLDER/${CASE_NAME}_fail_dim > $RUN_FOLDER/${CASE_NAME}_fail_dim_lvs.log 2>&1
return_code=$?
if [ "$return_code" != "1" ]
then
echo "## Fail dimension test case $CASE_NAME didn't fail as expected."
echo "$CASE_NAME,No" >> $RUN_FOLDER/dim_fail_results.csv
if [ "$COND" == "GHA" ]
then
exit 1
fi
else
echo "## Fail dimension test case $CASE_NAME failed as expected."
echo "$CASE_NAME,Yes" >> $RUN_FOLDER/dim_fail_results.csv
fi
else
echo "## Can't find fail dimension CDL for case: $fail_dim_cdl"
if [ "$COND" == "GHA" ]
then
exit 1
fi
fi
else
echo "## Can't find fail dimension GDS for case: $fail_dim_gds"
if [ "$COND" == "GHA" ]
then
exit 1
fi
fi
if [ -f $fail_lay_gds ]
then
if [ -f $fail_lay_cdl ]
then
python3 $PDK_ROOT/$PDK/run_lvs.py --design=$fail_lay_gds --net=$fail_lay_cdl --output_netlist=$RUN_FOLDER/${CASE_NAME}_fail_lay_ext.cir --report=$RUN_FOLDER/${CASE_NAME}_fail_lay > $RUN_FOLDER/${CASE_NAME}_fail_lay_lvs.log 2>&1
return_code=$?
if [ "$return_code" != "1" ]
then
echo "## Fail layer test case $CASE_NAME didn't fail as expected."
echo "$CASE_NAME,No" >> $RUN_FOLDER/lyr_fail_results.csv
if [ "$COND" == "GHA" ]
then
exit 1
fi
else
echo "## Fail layer test case $CASE_NAME failed as expected."
echo "$CASE_NAME,Yes" >> $RUN_FOLDER/lyr_fail_results.csv
fi
else
echo "## Can't find fail layer for case: $fail_lay_cdl"
if [ "$COND" == "GHA" ]
then
exit 1
fi
fi
else
echo "## Can't find fail layer GDS for case: $fail_lay_gds"
if [ "$COND" == "GHA" ]
then
exit 1
fi
fi
if [ -f $fail_net_gds ]
then
if [ -f $fail_net_cdl ]
then
python3 $PDK_ROOT/$PDK/run_lvs.py --design=$fail_net_gds --net=$fail_net_cdl --output_netlist=$RUN_FOLDER/${CASE_NAME}_fail_net_ext.cir --report=$RUN_FOLDER/${CASE_NAME}_fail_net > $RUN_FOLDER/${CASE_NAME}_fail_net_lvs.log 2>&1
return_code=$?
if [ "$return_code" != "1" ]
then
echo "## Fail netlist test case $CASE_NAME didn't fail as expected."
echo "$CASE_NAME,No" >> $RUN_FOLDER/net_fail_results.csv
if [ "$COND" == "GHA" ]
then
exit 1
fi
else
echo "## Fail netlist test case $CASE_NAME failed as expected."
echo "$CASE_NAME,Yes" >> $RUN_FOLDER/net_fail_results.csv
fi
else
echo "## Can't find fail netlist CDL for case: $fail_net_cdl"
if [ "$COND" == "GHA" ]
then
exit 1
fi
fi
else
echo "## Can't find fail netlist GDS for case: $fail_net_gds"
if [ "$COND" == "GHA" ]
then
exit 1
fi
fi
fi