2024-04-06 17:34:21 +00:00
# wally-batch.do
2023-02-04 12:38:41 +00:00
# SPDX-License-Identifier: Apache-2.0 WITH SHL-2.1
2021-01-15 04:37:51 +00:00
#
# Modification by Oklahoma State University & Harvey Mudd College
# Use with Testbench
# James Stine, 2008; David Harris 2021
# Go Cowboys!!!!!!
#
# Takes 1:10 to run RV64IC tests using gui
2024-04-06 17:34:21 +00:00
# Usage: do wally-batch.do <config> <testcases> <testbench> [-coverage] [+acc] [any number of +value] [any number of -G VAR=VAL]
# Example: do wally-batch.do rv64gc arch64i testbench
2021-10-10 22:07:51 +00:00
2024-04-06 17:34:21 +00:00
# Use this wally-batch.do file to run this example.
2021-01-15 04:37:51 +00:00
# Either bring up ModelSim and type the following at the "ModelSim>" prompt:
2024-04-06 17:34:21 +00:00
# do wally-batch.do
2021-01-15 04:37:51 +00:00
# or, to run from a shell, type the following at the shell prompt:
2024-04-06 17:34:21 +00:00
# vsim -do wally-batch.do -c
2021-01-15 04:37:51 +00:00
# (omit the "-c" to see the GUI while running from the shell)
onbreak {resume}
2024-05-06 18:28:00 +00:00
onerror {quit -f}
2021-01-15 04:37:51 +00:00
2024-04-06 17:34:21 +00:00
set CFG ${1}
set TESTSUITE ${2}
set TESTBENCH ${3}
set WKDIR wkdir/${CFG}_${TESTSUITE}
set WALLY $::env(WALLY)
set CONFIG ${WALLY}/config
set SRC ${WALLY}/src
set TB ${WALLY}/testbench
2021-01-15 04:37:51 +00:00
# create library
2024-04-06 17:34:21 +00:00
if [file exists ${WKDIR}] {
vdel -lib ${WKDIR} -all
}
vlib ${WKDIR}
# Create directory for coverage data
mkdir -p cov
set coverage 0
set CoverageVoptArg ""
set CoverageVsimArg ""
# Need to be able to pass arguments to vopt. Unforunately argv does not work because
# it takes on different values if vsim and the do file are called from the command line or
# if the do file isd called from questa sim directly. This chunk of code uses the $4 through $n
# variables and compacts into a single list for passing to vopt.
2024-04-06 20:43:06 +00:00
set tbArgs ""
2024-04-06 17:34:21 +00:00
set from 4
set step 1
set lst {}
2024-04-06 20:43:06 +00:00
set GUI 0
2024-04-06 23:04:48 +00:00
set PlusArgs {}
set ParamArgs {}
set accFlag ""
2024-04-06 17:34:21 +00:00
for {set i 0} true {incr i} {
set x [expr {$i*$step + $from}]
if {$x > $argc} break
set arg [expr "$$x"]
lappend lst $arg
}
if {$argc >= 3} {
2024-05-10 13:50:42 +00:00
echo "got at least 3 args"
set AccPosition [lsearch $lst "+acc"]
echo $AccPosition
if {$AccPosition != -1} {
2024-04-06 20:43:06 +00:00
set GUI 1
2024-04-06 23:04:48 +00:00
set accFlag "+acc"
2024-05-10 13:50:42 +00:00
set tbArgs [lreplace $lst $AccPosition $AccPosition]
2024-04-06 23:04:48 +00:00
} else {
set tbArgs $lst
}
2024-05-10 13:50:42 +00:00
set tbArgsLst [split $tbArgs " "]
2024-04-16 15:32:24 +00:00
set index [lsearch -exact $tbArgsLst "-coverage"]
if {$index >= 0} {
set coverage 1
set CoverageVoptArg "+cover=sbecf"
set CoverageVsimArg "-coverage"
echo $tbArgsLst
set tbArgsLst [lreplace $tbArgsLst $index $index ]
2024-05-10 13:50:42 +00:00
#echo "help help help !!!!!!!!!!!!!!!!!!!!!!!!!!!"
#echo $tbArgsLst
#echo "help help help !!!!!!!!!!!!!!!!!!!!!!!!!!!"
2024-04-16 15:32:24 +00:00
}
2024-04-06 23:25:53 +00:00
# separate the +args from the -G parameters
2024-04-06 23:04:48 +00:00
foreach otherArg $tbArgsLst {
if {[string index $otherArg 0] eq "+"} {
lappend PlusArgs $otherArg
} else {
lappend ParamArgs $otherArg
}
}
2021-01-15 04:37:51 +00:00
}
2024-05-10 13:50:42 +00:00
# helpful debug code remove later
#echo "help me!!!!!!! GUI ="
#echo $GUI
#echo "help me!!!!!!! lst ="
#echo $lst
#echo "help me!!!!!!! = accFlag ="
#echo $accFlag
#echo "help me!!!!!!! PlusArgs ="
#echo $PlusArgs
#echo "help me!!!!!!! ParamArgs ="
#echo $ParamArgs
#echo "help me!!!!!!!"
2021-01-15 04:37:51 +00:00
# compile source files
# suppress spurious warnngs about
# "Extra checking for conflicts with always_comb done at vopt time"
# because vsim will run vopt
2024-04-16 15:32:24 +00:00
vlog -lint -work ${WKDIR} +incdir+${CONFIG}/${CFG} +incdir+${CONFIG}/deriv/${CFG} +incdir+${CONFIG}/shared ${SRC}/cvw.sv ${TB}/${TESTBENCH}.sv ${TB}/common/*.sv ${SRC}/*/*.sv ${SRC}/*/*/*.sv -suppress 2583 -suppress 7063,2596,13286
2024-04-06 17:34:21 +00:00
2021-01-15 04:37:51 +00:00
# start and run simulation
# remove +acc flag for faster sim during regressions if there is no need to access internal signals
2024-04-16 15:32:24 +00:00
vopt $accFlag wkdir/${CFG}_${TESTSUITE}.${TESTBENCH} -work ${WKDIR} ${tbArgsLst} -o testbenchopt ${CoverageVoptArg}
2024-05-06 18:28:00 +00:00
2024-04-06 20:43:06 +00:00
# *** tbArgs producees a warning that TEST not found in design when running sim-testfloat-batch. Need to separate -G and + arguments to pass separately to vopt and vsim
2024-04-06 23:25:53 +00:00
vsim -lib ${WKDIR} testbenchopt +TEST=${TESTSUITE} ${PlusArgs} -fatal 7 -suppress 3829 ${CoverageVsimArg}
2024-04-06 17:34:21 +00:00
# vsim -lib wkdir/work_${1}_${2} testbenchopt -fatal 7 -suppress 3829
# power add generates the logging necessary for said generation.
# power add -r /dut/core/*
2024-04-06 20:43:06 +00:00
if { ${GUI} } {
add log -recursive /*
if { ${TESTBENCH} eq "testbench_fp" } {
do wave-fpu.do
} else {
do wave.do
}
}
2024-04-06 17:34:21 +00:00
run -all
# power off -r /dut/core/*
if {$coverage} {
set UCDB cov/${CFG}_${TESTSUITE}.ucdb
echo "Saving coverage to ${UCDB}"
do coverage-exclusions-rv64gc.do # beware: this assumes testing the rv64gc configuration
coverage save -instance /testbench/dut/core ${UCDB}
2022-02-05 05:28:40 +00:00
}
2024-04-06 17:34:21 +00:00
# These aren't doing anything helpful
#profile report -calltree -file wally-calltree.rpt -cutoff 2
#power report -all -bsaif power.saif
2024-04-06 20:43:06 +00:00
# terminate simulation unless we need to keep the GUI running
if { ${GUI} == 0} {
quit
}