mirror of
https://github.com/openhwgroup/cvw
synced 2025-02-11 06:05:49 +00:00
Got the directory mode wsim working!
This commit is contained in:
parent
224b8469ab
commit
2382677f8f
112
bin/wsim
112
bin/wsim
@ -14,52 +14,7 @@
|
||||
import argparse
|
||||
import os
|
||||
|
||||
# Parse arguments
|
||||
parser = argparse.ArgumentParser()
|
||||
parser.add_argument("config", help="Configuration file")
|
||||
parser.add_argument("testsuite", help="Test suite or ELF file")
|
||||
parser.add_argument("--sim", "-s", help="Simulator", choices=["questa", "verilator", "vcs"], default="questa")
|
||||
parser.add_argument("--tb", "-t", help="Testbench", choices=["testbench", "testbench_fp"], default="testbench")
|
||||
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("--fcov", "-f", 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)
|
||||
parser.add_argument("--covlog", "-d", help="Log coverage after n instructions.", 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(os.path.isfile(args.testsuite)):
|
||||
ElfFile = "+ElfFile=" + args.testsuite
|
||||
args.testsuite = "none"
|
||||
|
||||
# Validate arguments
|
||||
if (args.gui):
|
||||
if args.sim not in ["questa", "vcs"]:
|
||||
print("GUI option only supported for Questa and VCS")
|
||||
exit(1)
|
||||
|
||||
if (args.coverage):
|
||||
if args.sim not in ["questa", "vcs"]:
|
||||
print("Coverage option only available for Questa and VCS")
|
||||
exit(1)
|
||||
|
||||
if (args.vcd):
|
||||
args.args += " -DMAKEVCD=1"
|
||||
|
||||
# create the output sub-directories.
|
||||
WALLY = os.environ.get('WALLY')
|
||||
regressionDir = WALLY + '/sim/'
|
||||
for d in ["logs", "wkdir", "cov"]:
|
||||
try:
|
||||
os.mkdir(regressionDir+args.sim+"/"+d)
|
||||
except:
|
||||
pass
|
||||
|
||||
|
||||
def LaunchSim(ElfFile):
|
||||
# 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
|
||||
@ -119,3 +74,68 @@ elif (args.sim == "vcs"):
|
||||
cmd = cd + "; ./run_vcs " + args.config + " " + args.testsuite + " " + args.args
|
||||
print(cmd)
|
||||
os.system(cmd)
|
||||
|
||||
|
||||
# Parse arguments
|
||||
parser = argparse.ArgumentParser()
|
||||
parser.add_argument("config", help="Configuration file")
|
||||
parser.add_argument("testsuite", help="Test suite or ELF file")
|
||||
parser.add_argument("--sim", "-s", help="Simulator", choices=["questa", "verilator", "vcs"], default="questa")
|
||||
parser.add_argument("--tb", "-t", help="Testbench", choices=["testbench", "testbench_fp"], default="testbench")
|
||||
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("--fcov", "-f", 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)
|
||||
parser.add_argument("--covlog", "-d", help="Log coverage after n instructions.", default=0)
|
||||
parser.add_argument("--elfext", "-e", help="When searching for elf files only includes ones which end in this extension", default=".elf")
|
||||
args = parser.parse_args()
|
||||
print("Config=" + args.config + " tests=" + args.testsuite + " sim=" + args.sim + " gui=" + str(args.gui) + " args='" + args.args + "'")
|
||||
ElfFile=""
|
||||
DirectorMode = 0
|
||||
ElfList = []
|
||||
|
||||
if(os.path.isfile(args.testsuite)):
|
||||
ElfFile = "+ElfFile=" + args.testsuite
|
||||
args.testsuite = "none"
|
||||
ElfList.append("+ElfFile=" + args.testsuite)
|
||||
elif(os.path.isdir(args.testsuite)):
|
||||
DirectorMode = 1
|
||||
for dirpath, dirnames, filenames in os.walk(args.testsuite):
|
||||
for file in filenames:
|
||||
if file.endswith(args.elfext):
|
||||
ElfList.append("+ElfFile=" + os.path.join(dirpath, file))
|
||||
args.testsuite = "none"
|
||||
print(ElfList)
|
||||
|
||||
# Validate arguments
|
||||
if (args.gui):
|
||||
if args.sim not in ["questa", "vcs"]:
|
||||
print("GUI option only supported for Questa and VCS")
|
||||
exit(1)
|
||||
|
||||
if (args.coverage):
|
||||
if args.sim not in ["questa", "vcs"]:
|
||||
print("Coverage option only available for Questa and VCS")
|
||||
exit(1)
|
||||
|
||||
if (args.vcd):
|
||||
args.args += " -DMAKEVCD=1"
|
||||
|
||||
# create the output sub-directories.
|
||||
WALLY = os.environ.get('WALLY')
|
||||
regressionDir = WALLY + '/sim/'
|
||||
for d in ["logs", "wkdir", "cov"]:
|
||||
try:
|
||||
os.mkdir(regressionDir+args.sim+"/"+d)
|
||||
except:
|
||||
pass
|
||||
|
||||
if(DirectorMode):
|
||||
for ElfFile in ElfList:
|
||||
LaunchSim(ElfFile)
|
||||
|
||||
else:
|
||||
LaunchSim(ElfFile)
|
||||
|
Loading…
Reference in New Issue
Block a user