| #!/bin/bash |
| # |
| ################################################################################################################## |
| ##DO NOT CHANGE ANY OF THE BELOW BETWEEN THE TWO DO NOT CHANGE LINES ############################################# |
| ################################################################################################################## |
| |
| if [ -z "$MGLS_LICENSE_FILE" ]; then |
| echo "Missing MGLS_LICENSE_FILE" |
| exit 1 |
| fi |
| if [ -z "$LM_LICENSE_FILE" ]; then |
| echo "Missing LM_LICENSE_FILE" |
| exit 1 |
| fi |
| 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} |
| # |
| if [ -z $VERSION ];then |
| echo "Missing VERSION" |
| exit 1 |
| fi |
| |
| export TEST_DIR=/usr/local/google/home/tansell/work/openflow-drc-tests/ |
| export JOB_HOME=$TEST_DIR/torture_tests/$VERSION/ |
| export PDK_HOME=$TEST_DIR/pdk/skywater/s130/V2.1.305 |
| if [ ! -d "$JOB_HOME" ]; then |
| echo "$JOB_HOME doesn't exist?" |
| exit 1 |
| fi |
| |
| # see OASIS NOTES at EOF |
| for GDS_FILE in $JOB_HOME/gds/*.{gds,oas}{,.gz,.lz,.xz}; do |
| if [ ! -e "$GDS_FILE" ]; then |
| continue # above brace-expansion keeps non-existent star forms: '.../*.gds.gz' |
| fi |
| |
| # check for ambiguity(error); and optionally decompress. |
| # Keep source & decompress to a .gds/.oas in parallel; and afterwards delete .gds/.oas. |
| # This due to suspicion TEST_DIR or JOB_HOME elsewhere/later subject to a 'git add --all', |
| # which would commit (intended temporary) uncompressed files. Better would be decompress |
| # to a scratch-dir that is git-ignored or outside of TEST_DIR; but without visibility |
| # into rest of system not clear if works to restructure use of (exports)JOB_HOME,JOB_NAME. |
| GDS_BASE=${GDS_FILE%.xz} |
| GDS_BASE=${GDS_BASE%.lz} |
| GDS_BASE=${GDS_BASE%.gz} |
| GDS_FILEX=${GDS_BASE}.xz |
| GDS_FILEL=${GDS_BASE}.lz |
| GDS_FILEG=${GDS_BASE}.gz |
| |
| export JOB_EXT=gds |
| export LAYOUT_SYSTEM=GDSII |
| GDS_BASE2=${GDS_BASE%.$JOB_EXT}.oas # opposing variant for .gds |
| DRC_RS_BASE=base |
| unset LAYSYS_OASIS # so runset (via preprocessor) selects: 'LAYOUT SYSTEM GDSII' |
| |
| if [[ "$GDS_BASE" == *.oas ]]; then |
| export JOB_EXT=oas |
| export LAYOUT_SYSTEM=OASIS |
| GDS_BASE2=${GDS_BASE%.$JOB_EXT}.gds # opposing variant for .oas |
| export LAYSYS_OASIS=1 # so runset (via preprocessor) selects: 'LAYOUT SYSTEM OASIS' |
| fi |
| GDS_FILEX2=${GDS_BASE2}.xz # compressed opposing variants |
| GDS_FILEL2=${GDS_BASE2}.lz |
| GDS_FILEG2=${GDS_BASE2}.gz |
| GDS_DEL="" |
| nbr=0 |
| [ -e "$GDS_BASE" ] && (( nbr++ )) |
| [ -e "$GDS_FILEX" ] && (( nbr++ )) |
| [ -e "$GDS_FILEL" ] && (( nbr++ )) |
| [ -e "$GDS_FILEG" ] && (( nbr++ )) |
| [ -e "$GDS_BASE2" ] && (( nbr++ )) |
| [ -e "$GDS_FILEX2" ] && (( nbr++ )) |
| [ -e "$GDS_FILEL2" ] && (( nbr++ )) |
| [ -e "$GDS_FILEG2" ] && (( nbr++ )) |
| if [[ $nbr != 1 ]]; then |
| echo "$GDS_FILE ambiguous, $nbr variants (.gds/.oas with/without .gz/.lz/.xz)" |
| continue |
| fi |
| if [ -e "$GDS_FILEX" ]; then |
| unxz -c <"$GDS_FILE" >"$GDS_BASE" |
| stat=$? |
| if [[ "$stat" != 0 ]]; then |
| echo "Failed($stat) to: unxz --force $GDS_FILE" |
| continue |
| fi |
| echo "completed: unxz --force $GDS_FILE" |
| GDS_FILE="$GDS_BASE" |
| GDS_DEL="$GDS_BASE" |
| fi |
| if [ -e "$GDS_FILEL" ]; then |
| lzip -cd <"$GDS_FILE" >"$GDS_BASE" |
| stat=$? |
| if [[ "$stat" != 0 ]]; then |
| echo "Failed($stat) to: lzip -d --force $GDS_FILE" |
| continue |
| fi |
| echo "completed: lzip -d --force $GDS_FILE" |
| GDS_FILE="$GDS_BASE" |
| GDS_DEL="$GDS_BASE" |
| fi |
| if [ -e "$GDS_FILEG" ]; then |
| gunzip -c <"$GDS_FILE" >"$GDS_BASE" |
| stat=$? |
| if [[ "$stat" != 0 ]]; then |
| echo "Failed($stat) to: gunzip --force $GDS_FILE" |
| continue |
| fi |
| echo "completed: gunzip --force $GDS_FILE" |
| GDS_FILE="$GDS_BASE" |
| GDS_DEL="$GDS_BASE" |
| fi |
| |
| export JOB_NAME="$(basename -s .$JOB_EXT $GDS_FILE)" # extension: .gds or .oas |
| echo |
| echo |
| echo |
| echo "export JOB_HOME='$JOB_HOME'" |
| echo "export JOB_NAME='$JOB_NAME'" |
| echo "=====================================" |
| if [[ ! -e $JOB_HOME/gds/$JOB_NAME.gds && ! -e $JOB_HOME/gds/$JOB_NAME.oas ]]; then |
| echo "Did not find '$JOB_HOME/gds/$JOB_NAME.gds' or '$JOB_HOME/gds/$JOB_NAME.oas'" |
| exit 1 |
| fi |
| set -x |
| cd $TEST_DIR |
| git checkout HEAD $TEST_DIR/runsets/*_runset ## TBD: does this do anything? or just fail with error? |
| #sed -i -e"s@\$JOB_HOME@$JOB_HOME@" $TEST_DIR/runsets/*_runset |
| cd ~/github/google/skywater-pdk/s8/V1.3.0 |
| |
| ################################################################################################################## |
| ##DO NOT CHANGE ANY OF THE ABOVE ################################################################################# |
| ################################################################################################################## |
| |
| ################################################################################################################## |
| # Directories |
| ################################################################################################################## |
| |
| mkdir -p $JOB_HOME/logs |
| mkdir -p $JOB_HOME/lvs |
| mkdir -p $JOB_HOME/spef |
| mkdir -p $JOB_HOME/cdl |
| mkdir -p $JOB_HOME/drc |
| mkdir -p $JOB_HOME/ant |
| |
| ################################################################################################################## |
| # Variables needed by $TEST_DIR/runsets/local_xrc_rules.2 |
| ################################################################################################################## |
| |
| export JOB_HOME=$JOB_HOME |
| export JOB_NAME=$JOB_NAME |
| export LAYOUT_NAME=$JOB_NAME.$JOB_EXT # <-- parameterized ext: gds or oas |
| export LAYOUT_EXTRACTED=$JOB_NAME.extracted.cdl |
| export SOURCE_NAME=$JOB_NAME.source.cdl |
| export LVS_REPORT=report.lvs |
| export PEX_NETLIST=$JOB_NAME.spef |
| |
| export LAYOUT_PATH=$JOB_HOME/gds/$LAYOUT_NAME |
| export SOURCE_PATH=$JOB_HOME/cdl/$SOURCE_NAME |
| export LVS_REPORT_PATH=$JOB_HOME/lvs/$LVS_REPORT |
| export PEX_NETLIST_PATH=$JOB_HOME/spef/$PEX_NETLIST |
| export DRC_RESULTS_FILE=$JOB_HOME/drc/results.drc |
| export ANT_RESULTS_FILE=$JOB_HOME/ant |
| export DRC_SUMMARY_REPORT=$JOB_HOME/drc/summary.drc |
| export SVDB_PATH=$JOB_HOME/svdb |
| ################################################################################################################## |
| # Runset |
| ################################################################################################################## |
| s130=0 |
| s8=1 |
| gf180=0 |
| if [ "$s8" == "1" ]; then |
| export RUNSET_DIR=$TEST_DIR/runsets/s8/V2.0.1 |
| export PDK_HOME=$TEST_DIR/pdk/skywater/s8/V2.0.1 |
| export PDK_HOME2=$TEST_DIR/pdk/skywater/s8/V1.3.0-mr |
| fi |
| if [ "$s130" == "1" ]; then |
| export RUNSET_DIR=$TEST_DIR/runsets/s130/V2.1.305 |
| export PDK_HOME=$TEST_DIR/pdk/skywater/s130/V2.1.305 |
| fi |
| if [ "$gf180" == "1" ]; then |
| export RUNSET_DIR=$TEST_DIR/runsets/gf180 |
| fi |
| export RUNSET=$RUNSET_DIR/LVS/base |
| # export HCELLS=$RUNSET_DIR/LVS/hcells.txt |
| export HCELLS=$RUNSET_DIR/hcells.txt |
| export XCELLS=$RUNSET_DIR/xcells.txt |
| |
| export TECHDIR=$RUNSET_DIR/ |
| export baseDeckRev=Rev16 |
| |
| ################################################################################################################## |
| # V2LVS flow |
| ################################################################################################################## |
| |
| |
| run_lvs=0 |
| # all 1 for stdcell-based verilog source, all 0 for full-custom CDL source |
| run_lvs_rcx=0 # <-- meaningful/used IFF $run_lvs==1 |
| run_lvs_box=0 # <-- meaningful/used IFF $run_lvs==1 |
| run_lvs_catclibs=0 # <-- meaningful/used IFF $run_lvs==1 |
| run_antenna_check=1 |
| run_mr_drc=1 |
| run_full_drc=0 |
| run_oas=0 |
| run_lures=0 |
| run_soft=0 |
| run_stress=0 |
| |
| if [ "$run_lvs" == "1" ]; then |
| export RUNSET=$RUNSET_DIR/LVS/base |
| fi |
| if [ "$run_mr_drc" == "1" ]; then |
| export RUNSET=$RUNSET_DIR/DRC/base |
| fi |
| |
| if [ "$run_lvs" == "1" ]; then |
| unset DO_LVS_BOX # so runset (via preprocessor) OMITS: INCLUDE .../bbox.<libName>.txt |
| if [ "$run_lvs_box" == "1" ]; then |
| export DO_LVS_BOX=1 # so runset (via preprocessor) KEEPS: INCLUDE .../bbox.<libName>.txt |
| fi |
| |
| if [ -e $JOB_HOME/verilog/$JOB_NAME.v ] ; then |
| if [ ! -z "$(ls -A $JOB_HOME/cdl/)" ] ; then |
| echo "Found cdls under $JOB_HOME/cdl/" |
| cat $JOB_HOME/cdl/*.cdl > $JOB_HOME/cdl/libraries-merged.cdl |
| fi |
| if [ "$run_lvs_catclibs" == "1" ]; then |
| cat $TEST_DIR/libraries/cdl/*.cdl >> $JOB_HOME/cdl/libraries-merged.cdl |
| fi |
| |
| ## merge all verilog netlist |
| for verilog_module in $JOB_HOME/verilog/*; do |
| echo "" >> $verilog_module |
| done |
| for verilog_module in $JOB_HOME/verilog/box/*; do |
| echo "" >> $verilog_module |
| done |
| touch $JOB_HOME/cdl/box.cdl |
| mkdir -p $JOB_HOME/verilog/box |
| cat $JOB_HOME/verilog/box/* >> $JOB_HOME/verilog/box/merged.v |
| cat $JOB_HOME/verilog/* >> $JOB_HOME/verilog/verilog-merged.v |
| ##converts a verilog structural netlist to a SPICE-like netlist for LVS |
| |
| verilog_input=$JOB_HOME/verilog/$JOB_NAME.v |
| # verilog to spice with bus delimeter = "<>" |
| v2lvs -v $JOB_HOME/verilog/box/merged.v -o $JOB_HOME/cdl/box.cdl -e |
| v2lvs -a "<>" -w 2 -v $JOB_HOME/verilog/verilog-merged.v -o $JOB_HOME/cdl/$JOB_NAME.busworkaround.source.cdl \ |
| -s $JOB_HOME/cdl/libraries-merged.cdl -s $JOB_HOME/cdl/box.cdl \ |
| 2>&1 | tee $JOB_HOME/logs/$JOB_NAME.busworkaround.v2lvs.log || true |
| |
| # -e Specifies that empty .SUBCKT definitions are generated for all modules (no |
| # instances are translated). This is useful for generating “black box” subcircuits |
| # from library files. See Using the –e Switch to Create LVS Box Subcircuits |
| # later in this chapter. |
| # v2lvs -e -a "<>" -w 2 -v $verilog_input -o $JOB_HOME/cdl/$JOB_NAME.busworkaround.source.cdl \ |
| # | tee $JOB_HOME/logs/$JOB_NAME.busworkaround.v2lvs.log || true |
| |
| ## escape square brackets that are not buses |
| ## then replace <> buses with [] |
| sed 's/\[/\\[/g' -i $JOB_HOME/cdl/$JOB_NAME.busworkaround.source.cdl |
| sed 's/\]/\\]/g' -i $JOB_HOME/cdl/$JOB_NAME.busworkaround.source.cdl |
| sed 's/</\[/g' -i $JOB_HOME/cdl/$JOB_NAME.busworkaround.source.cdl |
| sed 's/>/\]/g' -i $JOB_HOME/cdl/$JOB_NAME.busworkaround.source.cdl |
| |
| export SOURCE_NAME=$JOB_NAME.busworkaround.source.cdl |
| export SOURCE_PATH=$JOB_HOME/cdl/$SOURCE_NAME |
| |
| # just keep this to compare with the workaround |
| v2lvs -w 2 -v $verilog_input -o $JOB_HOME/cdl/$JOB_NAME.source.cdl \ |
| -s $JOB_HOME/cdl/libraries-merged.cdl 2>&1 | tee $JOB_HOME/logs/$JOB_NAME.v2lvs.log || true |
| #cp $JOB_HOME/cdl/$JOB_NAME.source.cdl $JOB_HOME/cdl/${SOURCE_NAME} |
| |
| |
| else |
| if [ ! -z "$(ls -A $JOB_HOME/cdl/$JOB_NAME.cdl)" ] ; then |
| if [ "$run_lvs_catclibs" == "1" ]; then |
| echo ".INCLUDE $JOB_HOME/cdl/libraries-merged.cdl" >> $JOB_HOME/cdl/${SOURCE_NAME} |
| fi |
| cat $JOB_HOME/cdl/$JOB_NAME.cdl >> $JOB_HOME/cdl/${SOURCE_NAME} |
| fi |
| if [ "$run_lvs_catclibs" == "1" ]; then |
| cat $TEST_DIR/libraries/cdl/*.cdl >> $JOB_HOME/cdl/libraries-merged.cdl |
| fi |
| fi |
| fi |
| |
| ## end V2LVS flow |
| |
| ################################################################################################################## |
| # Remove fill cells and tap cells from the source netlist before LVS |
| ################################################################################################################## |
| |
| # [ -f $JOB_HOME/cdl/$JOB_NAME.source.cdl ] && \ |
| # cp $JOB_HOME/cdl/$JOB_NAME.source.cdl $JOB_HOME/cdl/$JOB_NAME.v2lvs.unfiltered.cdl |
| # python3 $TEST_DIR/scripts/remove_spice_instances.py $JOB_HOME/cdl/$JOB_NAME.source.cdl \ |
| # sky130_fd_sc_hd__fill_1 \ |
| # sky130_fd_sc_hd__fill_2 \ |
| # sky130_fd_sc_hd__tapvpwrvgnd_1 \ |
| # > $JOB_HOME/logs/$JOB_NAME.remove_spice_instances.log 2>&1 |
| |
| # extra runset rules per JOB_HOME |
| mkdir -p $JOB_HOME/runset |
| touch $JOB_HOME/runset/custom |
| |
| ################################################################################################################## |
| # Run Calibre LVS/XRC |
| ################################################################################################################## |
| |
| if [ "$run_mr_drc" == "1" ]; then |
| if [ "$run_oas" == "1" ]; then |
| export RUNSET=$RUNSET_DIR/s8_drcmr_runset-oas # <-- then why earlier RUNSET=... ? |
| else |
| export RUNSET=$RUNSET_DIR/s8_drcmr_runset |
| fi |
| calibre -gui -drc -runset $RUNSET -batch > $JOB_HOME/logs/mr_drc.log |
| fi |
| if [ "$run_full_drc" == "1" ]; then |
| if [ "$run_oas" == "1" ]; then |
| export RUNSET=$RUNSET_DIR/s130_drc_runset-oas # <-- then why earlier RUNSET=... ? |
| else |
| export RUNSET=$RUNSET_DIR/s130_drc_runset |
| fi |
| calibre -gui -drc -runset $RUNSET -batch > $JOB_HOME/logs/full_drc.log |
| fi |
| if [ "$run_stress" == "1" ]; then |
| export RUNSET=$RUNSET_DIR/s8_stress_runset # <-- then why earlier RUNSET=... ? |
| calibre -gui -drc -runset $RUNSET -batch > $JOB_HOME/logs/stress.log |
| fi |
| if [ "$run_lures" == "1" ]; then |
| export RUNSET=$RUNSET_DIR/s130_lures_runset # <-- then why earlier RUNSET=... ? |
| calibre -gui -drc -runset $RUNSET -batch > $JOB_HOME/logs/lures.log |
| fi |
| if [ "$run_soft" == "1" ]; then |
| export RUNSET=$RUNSET_DIR/s8_soft_runset # <-- then why earlier RUNSET=... ? |
| calibre -gui -drc -runset $RUNSET -batch > $JOB_HOME/logs/soft.log |
| fi |
| if [[ "$run_lvs" == "1" && "$run_lvs_rcx" == "0" ]]; then |
| export RUNSET=$RUNSET_DIR/base # <-- then why earlier RUNSET=... ? |
| calibre -lvs $RUNSET -spice $JOB_HOME/cdl/$LAYOUT_EXTRACTED -hier 2>&1 | tee $JOB_HOME/logs/lvs.log |
| fi |
| |
| if [ "$run_antenna_check" == "1" ]; then |
| export RUNSET=$RUNSET_DIR/s8_latchup_runset |
| calibre -gui -drc -runset $RUNSET -batch > $JOB_HOME/logs/latchup.log 2>&1 |
| fi |
| |
| ##calibre -hier -64 -hyper -turbo -hcell $TEST_DIR/runsets/hcells.sky130_fd_sc_hd.txt -spice $JOB_HOME/cdl/$JOB_NAME.extracted.cdl $TEST_DIR/runsets/local_xrc_rules.2 |
| if [[ "$run_lvs" == "1" && "$run_lvs_rcx" == "1" ]]; then |
| export RUNSET=$RUNSET_DIR/base # <-- then why earlier RUNSET=... ? |
| calibre -lvs -hier -hcell $HCELLS -spice \ |
| $JOB_HOME/cdl/$LAYOUT_EXTRACTED $RUNSET \ |
| | tee $JOB_HOME/logs/lvs.log |
| calibre -xrc -phdb -hcell $HCELLS -rc \ |
| $RUNSET \ |
| | tee $JOB_HOME/logs/phdb.log |
| calibre -xrc -pdb -xcell $XCELLS -rc \ |
| $RUNSET \ |
| | tee $JOB_HOME/logs/pdb.log |
| calibre -xrc -fmt -fmt_info -fmt_warnings $RUNSET \ |
| | tee $JOB_HOME/logs/fmt.log |
| |
| sed 's#//#DOUBLE_BACKSLASH#g' -i $PEX_NETLIST_PATH |
| sed 's#DIVIDER /#DIVIDER DIVIDER_BACKSLASH#g' -i $PEX_NETLIST_PATH |
| sed 's#/#\\/#g' -i $PEX_NETLIST_PATH |
| sed 's#DOUBLE_BACKSLASH#//#g' -i $PEX_NETLIST_PATH |
| sed 's#DIVIDER_BACKSLASH#/#g' -i $PEX_NETLIST_PATH |
| fi |
| |
| # clean locally decompressed source-layout (so it avoids below 'find ... sed'; AND not checked-in to output* branch) |
| if [ -n "$GDS_DEL" ]; then |
| rm -f "$GDS_DEL" |
| echo "completed: rm -f $GDS_DEL" |
| fi |
| |
| # calibre -lvs -hier -spice $JOB_HOME/cdl/$JOB_NAME.extracted.cdl $TEST_DIR/runsets/local_xrc_rules.2 |
| # calibre -xrc -phdb -rc $TEST_DIR/runsets/local_xrc_rules.2 |
| # calibre -xrc -pdb -rc $TEST_DIR/runsets/local_xrc_rules.2 |
| # calibre -xrc -fmt $TEST_DIR/runsets/local_xrc_rules.2 |
| |
| # calibre -gui -lvs -runset $TEST_DIR/runsets/s8_lvs_runset -batch > $JOB_HOME/$JOB_NAME.lvs_runset.log 2>&1 |
| |
| |
| #calibre -xrc -phdb -hcell $JOB_HOME/hcells.txt $PDK_HOME/LVS/Calibre/extLvsRules_s8_5lm |
| #calibre -gui -pex -runset $TEST_DIR/runsets/s8/V2.0.1/s8_xRC_runset -batch > $JOB_HOME/$JOB_NAME.xRC_runset.log 2>&1 |
| #calibre -gui -lvs -runset $TEST_DIR/runsets/s8_lvs_runset -batch > $JOB_HOME/$JOB_NAME.lvs_runset.log 2>&1 |
| #calibre --help > $JOB_HOME/$JOB_NAME.calibre--help.txt 2>&1 |
| |
| ################################################################################################################## |
| # No-PEX extraction then using it as an LVS source to pass before running extraction |
| ################################################################################################################## |
| |
| # 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 |
| # |
| # calibre -spice $JOB_HOME/$JOB_NAME.extracted.cdlX 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 $JOB_HOME/$JOB_NAME.extracted.cdlX $JOB_HOME/extract/$JOB_NAME.extracted.cdlX |
| # cp spice_runset $JOB_HOME |
| |
| ################################################################################################################## |
| # Run Calibre DRC |
| ################################################################################################################## |
| |
| # 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 |
| |
| ################################################################################################################## |
| |
| 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 |
| # |
| # Compression: Calibre supposed to NATIVELY support gds.gz & gds.Z compression schemes, |
| # so why did we need to explicitly decompress 1st? Only for handling others (lz,xz)? |
| # |
| # OASIS NOTES: for OASIS (.oas) instead of GDSII (.gds): |
| # [decompressed] gds-file : ends in .oas. |
| # /runsets/ dir MAY become /runsets-oas/ which files embed (if not converted to IFDEF below): |
| # (Or base switched for base-oas which embed): |
| # *drcLayoutSystem: OASIS (instead of GDSII) |
| # *drcLayoutPaths: $JOB_HOME/$JOB_NAME.oas (instead of .gds) |
| # |
| # More than one of: .gds[.gz/.lz/.xz] .oas[.gz/.lz/.xz] is an error: ambiguous |
| # |
| # For runsets/gf180/DRC/base preprocessor (#IFDEF $LAYSYS_OASIS) switches between |
| # LAYOUT SYSTEM GDSII vs LAYOUT SYSTEM OASIS |
| # Is there a simpler way to directly substitute LAYOUT_SYSTEM from the shell-env like?: |
| # Following version has NOT been tried: |
| # VARIABLE LAYOUT_SYSTEM ENVIRONMENT |
| # LAYOUT SYSTEM LAYOUT_SYSTEM |
| # |
| # Wish to avoid extra oas-specific runsets files by export-ing env-vars LAYOUT_SYSTEM & JOB_EXT and: |
| # *drcLayoutSystem: $LAYOUT_SYSTEM |
| # *drcLayoutPaths: $JOB_HOME/$JOB_NAME.$JOB_EXT |
| # |