blob: de57883b026a5613e2dceb7b3519b3cfbaa690e8 [file] [log] [blame]
#!/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