#!/bin/sh

FILENAME=$1
BASENAME=`basename $1`
DUMPFILE=$BASENAME.vcd
PREPROCFILE=$BASENAME.preproc
OUTFILE=$BASENAME.out

echo "\n"

# modul nevének kinyerése
MODULENAME=$(grep -E "^module (.)+" "$FILENAME" | cut -d\; -f1 | awk '{print $2}')

echo "Module: '$MODULENAME'"

# szimulációban szerepeltetendő jelek kinyerése
SIMSIGNALS=$(grep -E '^([^/]+)( `s )' "$FILENAME" | sed 's/[#(;][.]*//' | awk '{print $NF}')

if [ "$SIMSIGNALS" ] # ha vannak kiválasztott jelek
then 
    VARSTODUMP=""

    # szimulálandó jelek összeírása a $dumpvars-hoz
    for SIGNAME in $SIMSIGNALS
    do
        if [ "$VARSTODUMP" ]
        then
            VARSTODUMP="$VARSTODUMP, $MODULENAME.$SIGNAME"
        else
            VARSTODUMP="$MODULENAME.$SIGNAME"
        fi
    done

    echo "Signals to display: $VARSTODUMP"

else # ha nincsenek
    echo "No signals marked explicitly to simulate. Dumping all."

    VARSTODUMP=$MODULENAME
fi

# szimulációs kiírási sorrend kinyerése
SIGSORT=$(grep -E '^(//# )' "$FILENAME" | sed 's|//# ||' | sed 's/, /,/g')

if [ "$SIGSORT" ] # ha meg van adva lista, akkor TCL-scriptet generál belőle
then
    TCLSCRIPT="gtkwave::deleteSignalsFromListIncludingDuplicates [ gtkwave::getDisplayedSignals ]\n\n"

    for line in $SIGSORT # parancs generálása soronként
    do
        TCLSCRIPT="$TCLSCRIPT gtkwave::addSignalsFromList [split \"$line\" ,]\n"
    done

    TCLFILENAME="$BASENAME.tcl"; 

    # TCL-script kimentése
    echo "$TCLSCRIPT" > "sims/$TCLFILENAME"

    echo "Signal sorting TCL-file saved in 'sims/$TCLFILENAME'"
fi


# $dumpvars(...) beírása a fájlba
sed "/initial begin/a \$dumpfile(\"$DUMPFILE\");\n \$dumpvars(0, $VARSTODUMP);" "$FILENAME" > "$PREPROCFILE"

echo "\n"

# Verilog-fájl fordítása
iverilog -Wall "$PREPROCFILE" -o "sims/$OUTFILE"

rm "$PREPROCFILE"

#cd sims

# szimuláció futtatása
vvp "sims/$OUTFILE"

mv $DUMPFILE "sims/$DUMPFILE"

#cd -
