Grep pattern [A-Z_]+ rejected variable names containing digits like SHA3_DIR, SHA3C_DIR, NTT_DIR, etc. Changed to [A-Z0-9_]+.
84 lines
2.1 KiB
Bash
Executable File
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"
|