Files
mlkem-sync/run_tb.sh
FallenSigh 880e87daad fix(run_tb): allow digits in TCL variable names (e.g. SHA3_DIR)
Grep pattern [A-Z_]+ rejected variable names containing digits
like SHA3_DIR, SHA3C_DIR, NTT_DIR, etc. Changed to [A-Z0-9_]+.
2026-06-27 01:13:58 +08:00

84 lines
2.1 KiB
Bash
Executable File

#!/bin/bash
# run_tb.sh - Run Vivado XSIM testbench for a module
#
# Usage: ./run_tb.sh <module>
# ./run_tb.sh mod_add
# ./run_tb.sh --list
#
# Prerequisites:
# Vivado 2019.2 at /opt/Xilinx/Vivado/2019.2/
set -e
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
VIVADO_SETTINGS="/opt/Xilinx/Vivado/2019.2/settings64.sh"
if [ "$1" = "--list" ]; then
echo "Available modules:"
for d in "$SCRIPT_DIR"/sync_rtl/*/TB; do
if [ -f "$d/xsim_run.tcl" ]; then
name=$(basename "$(dirname "$d")")
echo " $name"
fi
done
exit 0
fi
if [ -z "$1" ]; then
echo "Usage: $0 <module_name>"
echo " $0 --list"
exit 1
fi
MODULE="$1"
TB_DIR="$SCRIPT_DIR/sync_rtl/$MODULE/TB"
TCL_FILE="$TB_DIR/xsim_run.tcl"
if [ ! -f "$TCL_FILE" ]; then
echo "ERROR: No xsim_run.tcl found for module '$MODULE'"
echo " Expected: $TCL_FILE"
echo " Run '$0 --list' to see available modules"
exit 1
fi
# Source Vivado environment
if [ -f "$VIVADO_SETTINGS" ]; then
source "$VIVADO_SETTINGS"
else
echo "ERROR: Vivado settings not found at $VIVADO_SETTINGS"
exit 1
fi
# Fix ncurses compatibility for Vivado 2019.2 on modern Linux
export LD_PRELOAD="${LD_PRELOAD}${LD_PRELOAD:+:}/usr/lib64/libtinfo.so.5"
cd "$SCRIPT_DIR"
echo "========================================"
echo " Running testbench for: $MODULE"
echo "========================================"
# Save TCL variables as bash variables, run commands with substitution
execute_tcl() {
local tcl_file="$1"
local tmp_script="/tmp/run_tb_$$.sh"
# Convert TCL 'set VAR value' to bash 'VAR=value'
{
grep -E '^set [A-Z0-9_]+ ' "$tcl_file" | while read -r _ var value; do
echo "${var}=${value}"
done
# Extract xvlog, xelab, xsim commands with bash variable expansion
grep -E '^(xvlog|xelab|xsim) ' "$tcl_file" | while read -r cmd; do
printf 'echo " %s"\n' "$cmd"
printf '%s 2>&1\n' "$cmd"
done
} > "$tmp_script"
chmod +x "$tmp_script"
. "$tmp_script"
rm -f "$tmp_script"
}
execute_tcl "$TCL_FILE"