diff --git a/bin/wsim b/bin/wsim index 6bedf3fe9..487647514 100755 --- a/bin/wsim +++ b/bin/wsim @@ -63,18 +63,27 @@ for d in ["logs", "wkdir", "cov"]: # Launch selected simulator cd = "cd $WALLY/sim/" +args.sim +# ugh. can't have more than 9 arguments passed to vsim. why? I'll have to remove --lockstep when running +# functional coverage and imply it. if (args.sim == "questa"): if (args.lockstep): - Instret = str(args.locksteplog) - CovEnableStr = "1" if int(args.covlog) > 0 else "0"; - prefix ="IMPERAS_TOOLS=" + WALLY + "/sim/imperas.ic OTHERFLAGS=\"+IDV_TRACE2LOG=" + Instret + " +IDV_TRACE2COV=" + str(args.covlog) + " +TRACE2COV_ENABLE=" + CovEnableStr + "\""; - suffix = "--lockstep" + prefix = "IMPERAS_TOOLS=" + WALLY + "/sim/imperas.ic" # OTHERFLAGS=\"+IDV_TRACE2LOG=" + str(args.locksteplog) + " +IDV_TRACE2COV=" + str(args.covlog) + "\""; + if(args.fcov): + CovEnableStr = "1" if int(args.covlog) > 0 else "0"; + #ImperasPlusArgs = "+IDV_TRACE2LOG=" + str(args.locksteplog) + " +IDV_TRACE2COV=" + str(args.covlog) + " +TRACE2COV_ENABLE=" + CovEnableStr; + ImperasPlusArgs = " +IDV_TRACE2COV=" + str(args.covlog) + " +TRACE2COV_ENABLE=" + CovEnableStr; + suffix = "" + else: + CovEnableStr = "" + ImperasPlusArgs = ""; + suffix = "--lockstep" else: prefix = "" + ImperasPlusArgs = "" suffix = "" if (args.tb == "testbench_fp"): - args.args = " -GTEST=\"" + args.testsuite + "\" " + args.args - cmd = "do wally.do " + args.config + " " + args.testsuite + " " + args.tb + " " + args.args + " " + ElfFile + " " + suffix + args.args = " -GTEST=\"" + args.testsuite + "\" " + args.args + cmd = "do wally.do " + args.config + " " + args.testsuite + " " + args.tb + " " + args.args + " " + ElfFile + " " + suffix + " " + ImperasPlusArgs if (args.coverage): cmd += " --coverage" if (args.fcov): diff --git a/sim/questa/wally.do b/sim/questa/wally.do index 5c7700e37..b69f45267 100644 --- a/sim/questa/wally.do +++ b/sim/questa/wally.do @@ -65,7 +65,7 @@ set lockstep 0 set lockstepvoptstring "" set SVLib "" set SVLibPath "" -set OtherFlags "" +#set OtherFlags "" set ImperasPubInc "" set ImperasPrivInc "" set rvviFiles "" @@ -134,7 +134,9 @@ if {$FunctCoverageIndex >= 0} { } set LockStepIndex [lsearch -exact $lst "--lockstep"] -if {$LockStepIndex >= 0} { +# ugh. can't have more than 9 arguments passed to vsim. why? I'll have to remove --lockstep when running +# functional coverage and imply it. +if {$LockStepIndex >= 0 || $FunctCoverageIndex >= 0} { set lockstep 1 # ideally this would all be one or two variables, but questa is having a real hard time @@ -146,9 +148,11 @@ if {$LockStepIndex >= 0} { set idvFiles $env(IMPERAS_HOME)/ImpProprietary/source/host/idv/*.sv set SVLib "-sv_lib" set SVLibPath $env(IMPERAS_HOME)/lib/Linux64/ImperasLib/imperas.com/verification/riscv/1.0/model - set OtherFlags $env(OTHERFLAGS) + #set OtherFlags $env(OTHERFLAGS) - set lst [lreplace $lst $LockStepIndex $LockStepIndex] + if {$LockStepIndex >= 0} { + set lst [lreplace $lst $LockStepIndex $LockStepIndex] + } } # separate the +args from the -G parameters @@ -164,11 +168,26 @@ if {$DEBUG > 0} { echo "GUI = $GUI" echo "coverage = $coverage" echo "lockstep = $lockstep" - echo "remaining list = \'$lst\'" - echo "Extra +args = \'$PlusArgs\'" - echo "Extra -args = \'$ParamArgs\'" + echo "FunctCoverage = $FunctCoverage" + echo "remaining list = $lst" + echo "Extra +args = $PlusArgs" + echo "Extra -args = $ParamArgs" } +foreach x $PlusArgs { + echo "Element is $x" +} + +# need a better solution this is really ugly +# Questa really don't like passing $PlusArgs on the command line to vsim. It treats the whole things +# as one string rather than mutliple separate +args. Is there an automated way to pass these? +set temp0 [lindex $PlusArgs 0] +set temp1 [lindex $PlusArgs 1] +set temp2 [lindex $PlusArgs 2] +set temp3 [lindex $PlusArgs 3] + +#quit + # compile source files # suppress spurious warnngs about # "Extra checking for conflicts with always_comb done at vopt time" @@ -180,7 +199,9 @@ vlog -lint -work ${WKDIR} +incdir+${CONFIG}/${CFG} +incdir+${CONFIG}/deriv/${CF # remove +acc flag for faster sim during regressions if there is no need to access internal signals vopt $accFlag wkdir/${CFG}_${TESTSUITE}.${TESTBENCH} -work ${WKDIR} ${ParamArgs} -o testbenchopt ${CoverageVoptArg} -vsim -lib ${WKDIR} testbenchopt +TEST=${TESTSUITE} ${PlusArgs} -fatal 7 ${SVLib} ${SVLibPath} ${OtherFlags} -suppress 3829 ${CoverageVsimArg} +#vsim -lib ${WKDIR} testbenchopt +TEST=${TESTSUITE} ${PlusArgs} -fatal 7 ${SVLib} ${SVLibPath} ${OtherFlags} +TRACE2COV_ENABLE=1 -suppress 3829 ${CoverageVsimArg} +#vsim -lib ${WKDIR} testbenchopt +TEST=${TESTSUITE} ${PlusArgs} -fatal 7 ${SVLib} ${SVLibPath} +IDV_TRACE2COV=1 +TRACE2COV_ENABLE=1 -suppress 3829 ${CoverageVsimArg} +vsim -lib ${WKDIR} testbenchopt +TEST=${TESTSUITE} $temp0 $temp1 $temp2 $temp3 -fatal 7 ${SVLib} ${SVLibPath} -suppress 3829 ${CoverageVsimArg} # vsim -lib wkdir/work_${1}_${2} testbenchopt -fatal 7 -suppress 3829 # power add generates the logging necessary for said generation.