| #!/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 |