fix(tb): fix Vivado 2019.2 compatibility and add run_tb.sh

- Replace -include_dirs . with -i . (Vivado 2019.2 syntax)
- Add --timescale 1ns/1ps to all xelab commands
- Add LD_PRELOAD comment for ncurses compatibility
- Add run_tb.sh convenience script
  Usage: ./run_tb.sh mod_add
         ./run_tb.sh --list
- Update spec with Vivado 2019.2 compatibility notes
This commit is contained in:
2026-06-25 20:53:47 +08:00
parent 52c625b3ef
commit 79653ac3a5
13 changed files with 181 additions and 27 deletions

82
run_tb.sh Executable file
View File

@@ -0,0 +1,82 @@
#!/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 "========================================"
# Run xvlog + xelab + xsim commands directly (not via vivado batch)
# Extract and execute xvlog, xelab, xsim lines from the TCL
grep -E '^xvlog ' "$TCL_FILE" | while read -r cmd; do
if [[ "$cmd" != \#* ]]; then
echo " $cmd"
eval "$cmd" 2>&1 | grep -E "ERROR|WARNING|analyzing|Compiling|Built" || true
fi
done
grep -E '^xelab ' "$TCL_FILE" | while read -r cmd; do
if [[ "$cmd" != \#* ]]; then
echo " $cmd"
eval "$cmd" 2>&1 | grep -E "ERROR|WARNING|Compiling|Built" || true
fi
done
echo ""
echo "--- Running simulation ---"
grep -E '^xsim ' "$TCL_FILE" | while read -r cmd; do
if [[ "$cmd" != \#* ]]; then
eval "$cmd" 2>&1
fi
done