ibex/syn/syn_yosys.sh
Canberk Topal ea4e9383db [syn] Use sv2v for prim_generic_buf
Convert `prim_generic_buf` to Verilog as well.
Also, replace 'prim_buf' with 'prim_generic_buf' whenever we see a
`prim_buf` in a generated Verilog file.

Fixes #1557

Signed-off-by: Canberk Topal <ctopal@lowrisc.org>
2022-06-01 11:24:19 +01:00

96 lines
2.6 KiB
Bash
Executable file

#!/bin/bash
# Copyright lowRISC contributors.
# Licensed under the Apache License, Version 2.0, see LICENSE for details.
# SPDX-License-Identifier: Apache-2.0
# This script drives the experimental Ibex synthesis flow. More details can be
# found in README.md
set -e
set -o pipefail
error () {
echo >&2 "$@"
exit 1
}
teelog () {
tee "$LR_SYNTH_OUT_DIR/log/$1.log"
}
if [ ! -f syn_setup.sh ]; then
error "No syn_setup.sh file: see README.md for instructions"
fi
#-------------------------------------------------------------------------
# setup flow variables
#-------------------------------------------------------------------------
source syn_setup.sh
#-------------------------------------------------------------------------
# use sv2v to convert all SystemVerilog files to Verilog
#-------------------------------------------------------------------------
LR_DEP_SOURCES=(
"../vendor/lowrisc_ip/ip/prim_generic/rtl/prim_generic_buf.sv"
)
mkdir -p "$LR_SYNTH_OUT_DIR/generated"
mkdir -p "$LR_SYNTH_OUT_DIR/log"
mkdir -p "$LR_SYNTH_OUT_DIR/reports/timing"
# Convert dependency sources
for file in ${LR_DEP_SOURCES[@]}; do
module=`basename -s .sv $file`
sv2v \
--define=SYNTHESIS --define=YOSYS \
-I../vendor/lowrisc_ip/ip/prim/rtl \
$file \
> $LR_SYNTH_OUT_DIR/generated/${module}.v
done
# Convert core sources
for file in ../rtl/*.sv; do
module=`basename -s .sv $file`
# Skip packages
if echo "$module" | grep -q '_pkg$'; then
continue
fi
sv2v \
--define=SYNTHESIS --define=YOSYS \
../rtl/*_pkg.sv \
../vendor/lowrisc_ip/ip/prim/rtl/prim_ram_1p_pkg.sv \
../vendor/lowrisc_ip/ip/prim/rtl/prim_secded_pkg.sv \
-I../vendor/lowrisc_ip/ip/prim/rtl \
-I../vendor/lowrisc_ip/dv/sv/dv_utils \
$file \
> $LR_SYNTH_OUT_DIR/generated/${module}.v
# Make sure auto-generated primitives are resolved to generic primitives
# where available.
sed -i 's/prim_buf/prim_generic_buf/g' $LR_SYNTH_OUT_DIR/generated/${module}.v
done
# remove tracer (not needed for synthesis)
rm -f $LR_SYNTH_OUT_DIR/generated/ibex_tracer.v
# remove the FPGA & register-based register file (because we will use the
# latch-based one instead)
rm -f $LR_SYNTH_OUT_DIR/generated/ibex_register_file_ff.v
rm -f $LR_SYNTH_OUT_DIR/generated/ibex_register_file_fpga.v
yosys -c ./tcl/yosys_run_synth.tcl |& teelog syn || {
error "Failed to synthesize RTL with Yosys"
}
sta ./tcl/sta_run_reports.tcl |& teelog sta || {
error "Failed to run static timing analysis"
}
./translate_timing_rpts.sh
python/get_kge.py $LR_SYNTH_CELL_LIBRARY_PATH $LR_SYNTH_OUT_DIR/reports/area.rpt