From e0089990306bd06dd9208bb1780636fe91f5613e Mon Sep 17 00:00:00 2001 From: Rose Thompson Date: Fri, 17 May 2024 17:10:15 -0500 Subject: [PATCH] wsim now supports lockstep and single elf example wsim rv64gc ../../tests/riscof/work/riscv-arch-test/rv64i_m/I/src/add-01.S/ref/ref.elf --elf --lockstep --- bin/wsim | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/bin/wsim b/bin/wsim index 531c6825c..4a4103242 100755 --- a/bin/wsim +++ b/bin/wsim @@ -25,9 +25,12 @@ parser.add_argument("--gui", "-g", help="Simulate with GUI", action="store_true" parser.add_argument("--coverage", "-c", help="Code & Functional Coverage", action="store_true") parser.add_argument("--args", "-a", help="Optional arguments passed to simulator via $value$plusargs", default="") parser.add_argument("--vcd", "-v", help="Generate testbench.vcd", action="store_true") +parser.add_argument("--lockstep", "-l", help="Run ImperasDV lock, step, and compare.", action="store_true") +parser.add_argument("--locksteplog", "-b", help="Retired instruction number to be begin logging.", default=0) args = parser.parse_args() print("Config=" + args.config + " tests=" + args.testsuite + " sim=" + args.sim + " gui=" + str(args.gui) + " args='" + args.args + "'") ElfFile="" + if(args.elf): ElfFile = "+ElfFile=" + args.testsuite args.testsuite = "none" @@ -55,21 +58,29 @@ for d in ["logs", "wkdir", "cov"]: except: pass + # Launch selected simulator cd = "cd $WALLY/sim/" +args.sim if (args.sim == "questa"): + if (args.lockstep): + Instret = str(args.locksteplog) + prefix ="IMPERAS_TOOLS=" + WALLY + "/sim/imperas.ic OTHERFLAGS=\"+IDV_TRACE2LOG=" + Instret + " +IDV_TRACE2COV=" + Instret + "\" "; + suffix = "--lockstep" + else: + prefix = "" + 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 + cmd = "do wally.do " + args.config + " " + args.testsuite + " " + args.tb + " " + args.args + " " + ElfFile + " " + suffix if (args.coverage): cmd += " --coverage" if (args.gui): # launch Questa with GUI; add +acc to keep variables accessible if(args.tb == "testbench"): - cmd = cd + "; vsim -do \"" + cmd + " +acc -GDEBUG=1\"" + cmd = cd + "; " + prefix + " vsim -do \"" + cmd + " +acc -GDEBUG=1\"" elif(args.tb == "testbench_fp"): - cmd = cd + "; vsim -do \"" + cmd + " +acc\"" + cmd = cd + "; " + prefix + " vsim -do \"" + cmd + " +acc\"" else: # launch Questa in batch mode - cmd = cd + "; vsim -c -do \"" + cmd + "\"" + cmd = cd + "; " + prefix + " vsim -c -do \"" + cmd + "\"" print("Running Questa with command: " + cmd) os.system(cmd) elif (args.sim == "verilator"):