#!/bin/bash # run_tb.sh - Run Vivado XSIM testbench for a module # # Usage: ./run_tb.sh # ./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 " 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