mirror of
https://github.com/lowRISC/ibex.git
synced 2025-04-24 13:57:19 -04:00
This commit protects the core_busy_o signal using a multi-bit encoding to reduce the chances of an adversary for glitching this signal to low, thereby putting the core to sleep and e.g. not handling an alert. Without this commit, the glitch would only be detected once both the main core and the shadow core wake up again and the comparison of the core_busy_o signals continues. This resolves lowRISC/Ibex#1827. Signed-off-by: Pirmin Vogel <vogelpi@lowrisc.org>
98 lines
2.8 KiB
Bash
Executable file
98 lines
2.8 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"
|
|
"../vendor/lowrisc_ip/ip/prim_generic/rtl/prim_generic_flop.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
|
|
sed -i 's/prim_flop/prim_generic_flop/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
|