blob: df02cac25dd2897f1fd12d98d1ca41e606a3e1a1 [file] [log] [blame] [edit]
#!/usr/bin/env bash
export PYTHONHASHSEED=0
SCRIPT_SRC="$(realpath ${BASH_SOURCE[0]})"
SCRIPT_DIR="$(dirname "${SCRIPT_SRC}")"
source $SCRIPT_DIR/common.sh
if [ -z "$INPUT_DIRECTORY" ]; then
if [ ! -z "$1" ]; then
INPUT_DIRECTORY=$1
else
msg "No \$INPUT_DIRECTORY set or argument given."
exit 1
fi
fi
if [ -z "$OUTPUT_DIRECTORY" ]; then
if [ ! -z "$2" ]; then
OUTPUT_DIRECTORY=$2
else
msg "No \$OUTPUT_DIRECTORY set or argument given."
exit 1
fi
fi
if [ -z "$TEMP_DIR" ]; then
if [ ! -z "$3" ]; then
TEMP_DIR=$3
else
msg "No \$TEMP_DIR set or argument given."
exit 1
fi
fi
if [ ! -z "$4" ]; then
VERSIONS=$4
else
VERSIONS="V*"
fi
set -e
set -x
for V in $INPUT_DIRECTORY/s8/$VERSIONS; do
msg "Processing spice for $V"
VDIR=$(echo $(realpath $V) | sed -e"s@$(realpath $INPUT_DIRECTORY)/@@")
echo $VDIR
# s8/V2.0.1/MODELS/SPECTRE/s8phirs_10r/Models/
MODELS_1=$V/MODELS/SPECTRE/s8phirs_10r/Models/
MODELS_2=$V/MODELS/SPECTRE/s8x/Models/
OA=$V/VirtuosoOA
TEMP1=$(realpath -m $TEMP_DIR/$VDIR/step1-converted)
rm -rf $TEMP1
mkdir -p $TEMP1
TEMP2=$(realpath -m $TEMP_DIR/$VDIR/step2-split)
rm -rf $TEMP2
TEMP3=$(realpath -m $TEMP_DIR/$VDIR/step3)
echo
echo
echo "Step 1 - Converting spectre files to spice"
echo "A ----------------------------------------"
mkdir -p $TEMP1/s8a
$SCRIPT_DIR/spectre_to_spice.py $MODELS_1 $TEMP1/s8a -nocmt
echo "B ----------------------------------------"
mkdir -p $TEMP1/s8b
$SCRIPT_DIR/spectre_to_spice.py $MODELS_2 $TEMP1/s8b -nocmt
echo "C ----------------------------------------"
# Add the sky130.lib.spice file, which is a top-level file for including
# everything that is compatible with ngspice syntax.
cp $SCRIPT_DIR/sky130.lib.spice $TEMP1/s8b
echo "D ----------------------------------------"
mkdir -p $TEMP1/oa
find $OA -name \*.sp -exec $SCRIPT_DIR/spectre_to_spice.py \{\} $TEMP1/oa/ -nocmt \;
echo
echo
echo "Step 2 - Handling comment lines"
echo "----------------------------------------"
$SCRIPT_DIR/spice_comment_tables.py $TEMP1/s8a/
$SCRIPT_DIR/spice_comment_tables.py $TEMP1/s8b/
$SCRIPT_DIR/spice_comment_tables.py $TEMP1/oa/
find $TEMP1 -name \*.table
echo "------------------------------------------"
$SCRIPT_DIR/spice-remove-x.py $TEMP1
rm -v $TEMP1/s8b/*_tt*.cor.bins.csv
rm -v $TEMP1/s8b/*nvhv*.cor.bins.csv
echo
echo
echo "Step 3 - Splitting spice files"
echo "------------------------------"
s8asplit_subckts="r+c.mod"
s8bsplit_subckts="xcmvpp.mod xcmvpp_moscap.mod xcmvpp_ponly.mod xcmvpp_pqonly.mod xcnwvc.mod xcmimc.mod xinductor.mod linear.mod pnp.mod"
s8bsplit_mod="pdiode_h.mod ndiode_h.mod dnwdiode_pw.mod nwdiode.mod"
mkdir -p $TEMP2/s8a
$SCRIPT_DIR/split_nlowvt_rf.py $TEMP1/s8a/nlowvt_rf.pm3 $TEMP2/s8a
$SCRIPT_DIR/copy-no-overwrite.py $TEMP1/s8a $TEMP2/s8a
for file in $s8asplit_subckts; do
rm $TEMP2/s8a/$file
$SCRIPT_DIR/split_one_spice.py $TEMP1/s8a/$file $TEMP2/s8a
done
mkdir -p $TEMP2/s8b
$SCRIPT_DIR/copy-no-overwrite.py $TEMP1/s8b $TEMP2/s8b
for file in $s8bsplit_subckts; do
rm $TEMP2/s8b/$file
$SCRIPT_DIR/split_one_spice.py $TEMP1/s8b/$file $TEMP2/s8b
done
for file in $s8bsplit_mod; do
rm $TEMP2/s8b/$file
$SCRIPT_DIR/split_one_model.py $TEMP1/s8b/$file $TEMP2/s8b
done
cp -avR $TEMP1/oa $TEMP2/oa
echo
echo
echo "Step 4 - Rewriting spice files to output"
echo "----------------------------------------"
$SCRIPT_DIR/spice_rewrite.py $TEMP2/s8a $OUTPUT_DIRECTORY $TEMP3/s8a
$SCRIPT_DIR/spice_rewrite.py $TEMP2/s8b $OUTPUT_DIRECTORY $TEMP3/s8b
$SCRIPT_DIR/spice_rewrite.py $TEMP2/oa $OUTPUT_DIRECTORY $TEMP3/oa
done
#$SCRIPT_DIR/upload-spice-includes.py $OUTPUT_DIRECTORY