diff --git a/bin/wsim b/bin/wsim index acb5cec76..3c7bdc554 100755 --- a/bin/wsim +++ b/bin/wsim @@ -81,6 +81,7 @@ def prepSim(args, ElfFile): paramsList = [] argsList = [] flagsList = [] + defineList = [] if args.vcd: paramsList.append("MAKE_VCD=1") if args.rvvi: @@ -95,15 +96,19 @@ def prepSim(args, ElfFile): flagsList.append("--ccov") if args.fcov: flagsList.append("--fcov") + defineList.append("+define+INCLUDE_TRACE2COV", "+define+IDV_INCLUDE_TRACE2COV", "+define+COVER_BASE_RV32I") # COVER_BASE_RV32I is just needed to keep riscvISACOV happy, but does not affect tests + argsList.append("+TRACE2COV_ENABLE=1", "+IDV_TRACE2COV=1") if args.gui: flagsList.append("--gui") if args.lockstep or args.lockstepverbose: flagsList.append("--lockstep") if args.lockstep or args.lockstepverbose or args.fcov: prefix = lockstepSetup(args) + defineList.append("+define+USE_IMPERAS_DV") # Combine into a single string args.args += " ".join(argsList) args.params += " ".join(paramsList) + args.define += " ".join(defineList) flags = " ".join(flagsList) return flags, prefix @@ -140,7 +145,7 @@ def runQuesta(args, flags, prefix): if args.define != "": args.define = fr'--define \"{args.define}\"' # Questa cannot accept more than 9 arguments. fcov implies lockstep - cmd = f"do wally.do {args.config} {args.testsuite} {args.tb} {args.args} {args.params} {flags}" + cmd = f"do wally.do {args.config} {args.testsuite} {args.tb} {args.args} {args.params} {args.define} {flags}" cmd = f'cd $WALLY/sim/questa; {prefix} vsim {"-c" if not args.gui else ""} -do "{cmd}"' print(f"Running Questa with command: {cmd}") os.system(cmd) @@ -157,13 +162,13 @@ def runVCS(args, flags, prefix): args.params = f'--params "{args.params}"' if args.define != "": args.define = f'--define "{args.define}"' - cmd = f"cd $WALLY/sim/vcs; {prefix} ./run_vcs {args.config} {args.testsuite} --tb {args.tb} {args.args} {args.params} {flags}" + cmd = f"cd $WALLY/sim/vcs; {prefix} ./run_vcs {args.config} {args.testsuite} --tb {args.tb} {args.args} {args.params} {args.define} {flags}" print(cmd) os.system(cmd) def main(args): validateArgs(args) - print(f"Config={args.config} tests={args.testsuite} sim={args.sim} gui={args.gui} args='{args.args}' params='{args.params}'") + print(f"Config={args.config} tests={args.testsuite} sim={args.sim} gui={args.gui} args='{args.args}' params='{args.params}' define='{args.define}'") ElfFile = elfFileCheck(args) flags, prefix = prepSim(args, ElfFile) createDirs(args.sim) diff --git a/sim/questa/wally.do b/sim/questa/wally.do index 639539e02..34cafeb77 100644 --- a/sim/questa/wally.do +++ b/sim/questa/wally.do @@ -62,7 +62,6 @@ set CoverageVsimArg "" set FunctCoverage 0 set FCvlog "" -set FCvopt "" set lockstep 0 set lockstepvlog "" @@ -105,20 +104,14 @@ if {[lcheck lst "--ccov"]} { # if --fcov found set flag and remove from list if {[lcheck lst "--fcov"]} { set FunctCoverage 1 - # COVER_BASE_RV32I is just needed to keep riscvISACOV happy, but no longer affects tests - set FCvlog "+define+INCLUDE_TRACE2COV \ - +define+IDV_INCLUDE_TRACE2COV \ - +define+COVER_BASE_RV32I \ - +incdir+$env(WALLY)/addins/cvw-arch-verif/riscvISACOV/source" - set FCvopt "+TRACE2COV_ENABLE=1 +IDV_TRACE2COV=1" + set FCvlog "+incdir+$env(WALLY)/addins/cvw-arch-verif/riscvISACOV/source" } # if --lockstep or --fcov found set flag and remove from list if {[lcheck lst "--lockstep"] || $FunctCoverage == 1} { set IMPERAS_HOME $::env(IMPERAS_HOME) set lockstep 1 - set lockstepvlog "+define+USE_IMPERAS_DV \ - +incdir+${IMPERAS_HOME}/ImpPublic/include/host \ + set lockstepvlog "+incdir+${IMPERAS_HOME}/ImpPublic/include/host \ +incdir+${IMPERAS_HOME}/ImpProprietary/include/host \ ${IMPERAS_HOME}/ImpPublic/source/host/rvvi/*.sv \ ${IMPERAS_HOME}/ImpProprietary/source/host/idv/*.sv" @@ -174,7 +167,7 @@ vlog -permissive -lint -work ${WKDIR} {*}${INC_DIRS} {*}{$DefineArgs} {*}${FCvlo # 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} {*}${ExpandedParamArgs} -o testbenchopt ${CoverageVoptArg} -vsim -lib ${WKDIR} testbenchopt +TEST=${TESTSUITE} {*}${PlusArgs} -fatal 7 {*}${SVLib} {*}${FCvopt} -suppress 3829 ${CoverageVsimArg} +vsim -lib ${WKDIR} testbenchopt +TEST=${TESTSUITE} {*}${PlusArgs} -fatal 7 {*}${SVLib} -suppress 3829 ${CoverageVsimArg} # power add generates the logging necessary for saif generation. # power add -r /dut/core/* diff --git a/sim/vcs/run_vcs b/sim/vcs/run_vcs index 7e2c7aca8..e062205ae 100755 --- a/sim/vcs/run_vcs +++ b/sim/vcs/run_vcs @@ -59,7 +59,7 @@ INCLUDE_PATH="+incdir+" + cfgdir + "/" + args.config + " +incdir+" + cfgdir + "/ # lockstep mode if (args.lockstep): - LOCKSTEP_OPTIONS = " +define+USE_IMPERAS_DV +incdir+$IMPERAS_HOME/ImpPublic/include/host +incdir+$IMPERAS_HOME/ImpProprietary/include/host $IMPERAS_HOME/ImpPublic/source/host/rvvi/*.sv $IMPERAS_HOME/ImpProprietary/source/host/idv/*.sv " + tbdir + "/common/wallyTracer.sv" + LOCKSTEP_OPTIONS = " +incdir+$IMPERAS_HOME/ImpPublic/include/host +incdir+$IMPERAS_HOME/ImpProprietary/include/host $IMPERAS_HOME/ImpPublic/source/host/rvvi/*.sv $IMPERAS_HOME/ImpProprietary/source/host/idv/*.sv " + tbdir + "/common/wallyTracer.sv" LOCKSTEP_SIMV = "-sv_lib $IMPERAS_HOME/lib/Linux64/ImperasLib/imperas.com/verification/riscv/1.0/model" else: LOCKSTEP_OPTIONS = ""