| #!/bin/bash |
| |
| # Example call |
| # $ ./build_skywater_pdk.sh /home/user/skywater-src-nda /home/user/output /home/user/tmpdir |
| |
| set -e |
| |
| SKYWATER_NDA_PATH=${1%/} |
| OUTPUT_DIRECTORY=${2%/} |
| TMP_DIRECTORY=${3%/} |
| |
| # Check if programs installed are in required versions |
| if [ `which yosys |wc -l` -eq 0 ] || [ `yosys -p 'splitinout' 2>&1 |grep ERROR | wc -l` -eq 1 ] |
| then |
| echo "Yosys not installed or installed in version which does not have the 'splitinout' pass" |
| echo "Please install yosys from 'https://github.com/mithro/yosys/tree/split-inout'" |
| exit |
| fi |
| if [ `which symbolator |wc -l` -eq 0 ] || [ `symbolator --help 2>&1 |grep 'libname' | wc -l` -lt 1 ] |
| then |
| echo "Symbolator not installed or installed in version which does not have the 'libname' argument" |
| echo "Please install symbolator from 'https://github.com/antmicro/symbolator' using 'python -m pip install git+https://github.com/antmicro/symbolator'" |
| exit |
| fi |
| |
| # Update paths file with path to skywater-src-nda repository |
| echo $SKYWATER_NDA_PATH > paths |
| |
| # Create json files grouping src-nda files by mods |
| python files-list.py |
| python files-spice.py |
| python lib2mods.py |
| python spice2mods.py |
| python verilog2mods.py |
| |
| # Clean Liberty files |
| ROOT_DIR=$(pwd) |
| cd liberty_parser |
| echo "-----Liberty-to-JSON-----" |
| python ../mod2files-json-to-filelist.py ../.files.mod2files.lib.json $TMP_DIRECTORY/lib.list |
| python quicklogic_timings_importer/test_full_pipeline.py $TMP_DIRECTORY/lib.list --log-suppress-below ERROR --output-json-root-dir $TMP_DIRECTORY/out-json --skip-json-to-lib |
| echo "-----JSON-to-Liberty groups-----" |
| python quicklogic_timings_importer/group_cells.py ../.files.mod2files.lib.json $OUTPUT_DIRECTORY/skywater-pdk/libraries --json-path $TMP_DIRECTORY/out-json --path-prefix-to-remove "$TMP_DIRECTORY/out-json/$SKYWATER_NDA_PATH" --log-suppress WARNING --sourcetodests $TMP_DIRECTORY/group_cells.filemapping.json |
| cd $ROOT_DIR |
| |
| # Extract timings from verilog |
| echo "-----Verilog-specify-to-Liberty-----" |
| python parse_specify_from_filelist.py .files.mod2files.verilog.json $OUTPUT_DIRECTORY/skywater-pdk/libraries --path-prefix-to-remove $SKYWATER_NDA_PATH --sourcetodests $TMP_DIRECTORY/parse_specify_from_filelist.filemapping.json |
| |
| echo '**** Generating .full.v files ****' |
| python verilog2full.py $SKYWATER_NDA_PATH $OUTPUT_DIRECTORY $TMP_DIRECTORY/verilog2full.filemapping.json |
| echo '**** Split merged .full.v files ****' |
| python verilog_split.py $OUTPUT_DIRECTORY $TMP_DIRECTORY/verilog_split.filemapping.json |
| echo '**** Removing strength "twins" ****' |
| python merge-cells-with-different-strengths.py $OUTPUT_DIRECTORY |
| echo '**** Generating .simple.v files ****' |
| python verilog2simple.py $OUTPUT_DIRECTORY |
| echo '**** Creating temporary base cells lists ****' |
| pushd $OUTPUT_DIRECTORY |
| for x in `find . -type d -name 'V[0-9].[0-9].[0-9]'` |
| do |
| pushd $x > /dev/null |
| >.base |
| modules=() |
| touch temp |
| mapfile -t modules < <( grep -r -E --include=*.simple.v '^[ ]*sky130\w*? ' |cut -d ':' -f 2 | sed 's/^ *//g' | cut -d ' ' -f 1| sort |uniq ) |
| mapfile -t -O "${#modules[@]}" modules < <( grep -r -E --include=*.simple.v '^[ ]*(pg_)?[u]_\w*? ' |cut -d ':' -f 2 | sed 's/^ *//g' | cut -d ' ' -f 1| sort |uniq ) |
| for mod in "${modules[@]}" |
| do |
| echo $mod |
| realpath `grep -r -E --include "*.simple.v" -l "^module ${mod}[\( ]" ` | grep -v 'stubs_' | sort -r | grep -v '\.\w*\.simple\.v' |head -n 1 >> temp |
| done |
| sort temp |uniq >.base |
| rm temp |
| popd > /dev/null |
| done |
| popd > /dev/null |
| |
| echo '**** Generating .blackbox.v files ****' |
| python verilog2blackbox.py $OUTPUT_DIRECTORY |
| echo '**** Generating .sch.png files ****' |
| python verilog2sch.py $OUTPUT_DIRECTORY |
| echo '**** Generating .module.png files ****' |
| python verilog2symbol.py $OUTPUT_DIRECTORY |
| echo '**** Rewriting .lef files ****' |
| python lef_rewrite.py $SKYWATER_NDA_PATH $OUTPUT_DIRECTORY $TMP_DIRECTORY/lef_rewrite.filemapping.json |
| echo '**** Renaming and cleaning ****' |
| pushd $OUTPUT_DIRECTORY > /dev/null |
| shopt -s globstar |
| # Rename module diagrams from '.png' to '.module.png' |
| for x in `ls **/*[^s][^c][^h].png` |
| do mv $x ${x%.png}.module.png |
| done |
| # Remove .base files |
| rm **/.base |
| popd > /dev/null > /dev/null |
| |
| # Clean up Spice files |
| echo "-----Spice files cleanup-----" |
| python clean_spice_files.py .files.mod2files.spice.json $OUTPUT_DIRECTORY/skywater-pdk/libraries .files.mod2files.spice.unassigned --path-prefix-to-remove $SKYWATER_NDA_PATH --sourcetodests $TMP_DIRECTORY/clean_spice_files.filemapping.json --fileswithoutincludes $TMP_DIRECTORY/clean_spice_files_missing_includes.txt |
| |
| echo "-----PM3-to-CSV conversion-----" |
| python convert_pm3_to_csv.py $OUTPUT_DIRECTORY/skywater-pdk/libraries 2>$TMP_DIRECTORY/convert_pm3_to_csv.err --sourcetodests $TMP_DIRECTORY/convert_pm3_to_csv.filemapping.json |
| |
| # Directory cleanup |
| find $OUTPUT_DIRECTORY/skywater-pdk/libraries -type d -empty -delete |