Add a tape out script
diff --git a/scripts/tape-out.sh b/scripts/tape-out.sh new file mode 100755 index 0000000..de57883 --- /dev/null +++ b/scripts/tape-out.sh
@@ -0,0 +1,83 @@ +#!/bin/bash -e + +# Where to do tape out - WARNING: needs ~20GB of disk +export MPW=/scratch/mpw7 + +# Build macros in parallel - WARNING: needs lots of RAM +PARALLEL=1 + +export PDK=sky130B + +export ROUTING_CORES=$(nproc) + +export OPENLANE_ROOT=$MPW/OpenLane +export PDK_ROOT=$OPENLANE_ROOT/pdks +export CARAVEL_USER_PROJECT_ROOT=$MPW/caravel_user_project +export CARAVEL_ROOT=$CARAVEL_USER_PROJECT_ROOT/caravel +export MCW_ROOT=$CARAVEL_USER_PROJECT_ROOT/mgmt_core_wrapper + +mkdir -p $MPW +cd $MPW + +git clone --depth 1 https://github.com/antonblanchard/microwatt-caravel -b sky130-mpw7-tapeout-5 caravel_user_project + +git clone --depth 1 https://github.com/antonblanchard/DFFRAM -b microwatt-20221122 + +git clone --depth 1 https://github.com/antonblanchard/microwatt -b caravel-mpw7-20221125 + +cd caravel_user_project + +# Install OpenLane, pdks, caravel and mgmt_core_wrapper +make setup + +# Shouldn't have any compresed/split files yet, but just in case +make uncompress + +# Set OPENLANE_IMAGE_NAME so we use the same toolchain to build DFFRAM (Assume we are on a tag) +#cd $MPW/OpenLane +#OPENLANE_COMMIT=$(git describe --tags) +#export OPENLANE_IMAGE_NAME=efabless/openlane:$OPENLANE_COMMIT + +# Convert Microwatt to Verilog +cd $MPW/microwatt +make DOCKER=1 FPGA_TARGET=caravel microwatt_asic.v && ./caravel/process-microwatt-verilog.sh +cd $MPW/caravel_user_project + +# copy in Microwatt Verilog +cp $MPW/microwatt/microwatt_asic_processed.v verilog/rtl/microwatt.v + +if [ $PARALLEL -eq 1 ]; then + cd $MPW/DFFRAM + # Build cache and main RAM DFFRAMs + ./dffram.py --pdk-root $PDK_ROOT --size 32x64 --variant 1RW1R --min-height 180 > $MPW/1.out 2>&1 & + ./dffram.py --pdk-root $PDK_ROOT --size 512x64 --vertical-halo 100 --horizontal-halo 20 > $MPW/2.out 2>&1 & + cd $MPW/caravel_user_project + + make multiply_add_64x64 > $MPW/3.out 2>&1 & + make Microwatt_FP_DFFRFile > $MPW/4.out 2>&1 & + + wait + + cat $MPW/1.out $MPW/2.out $MPW/3.out $MPW/4.out +else + cd $MPW/DFFRAM + # Build cache and main RAM DFFRAMs + ./dffram.py --pdk-root $PDK_ROOT --size 32x64 --variant 1RW1R --min-height 180 + ./dffram.py --pdk-root $PDK_ROOT --size 512x64 --vertical-halo 100 --horizontal-halo 20 + cd $MPW/caravel_user_project + + make multiply_add_64x64 + make Microwatt_FP_DFFRFile +fi + +# copy in RAMS +for RAM in 512x64_DEFAULT 32x64_1RW1R +do + cd $MPW/DFFRAM/build/$RAM/products + tar cf - . | (cd $CARAVEL_USER_PROJECT_ROOT && tar xvf -) + cd - +done + +make user_project_wrapper + +echo SUCCESS