blob: 0d780c9bf7399cca3ff900b53fc884485b31dc3f [file] [log] [blame] [edit]
#!/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
python quicklogic_timings_importer/remove-duplicated-wraps.py $OUTPUT_DIRECTORY/skywater-pdk/libraries/wrap
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
# Clean up Spice files
echo "-----Spice files cleanup-----"
python clean-spice-files.py .files.mod2files.spice.json $OUTPUT_DIRECTORY/skywater-pdk/libraries --path-prefix-to-remove $SKYWATER_NDA_PATH
# Directory cleanup
find $OUTPUT_DIRECTORY/skywater-pdk/libraries -type d -empty -delete
echo '**** Generating .full.v files ****'
python verilog2full.py $SKYWATER_NDA_PATH $OUTPUT_DIRECTORY
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 '**** 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