From e9433dddac3ae61451a5747fa70c6ed6b5f49611 Mon Sep 17 00:00:00 2001 From: Tim Newsome Date: Thu, 30 Nov 2017 11:50:18 -0800 Subject: [PATCH] Clean up VcsSim init() Use a unique log file, so you can run multiple instances at once. Add time out to waiting for the simulator to be ready. --- debug/testlib.py | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/debug/testlib.py b/debug/testlib.py index 5fc384a..21eeb3d 100644 --- a/debug/testlib.py +++ b/debug/testlib.py @@ -142,9 +142,10 @@ class Spike(object): return self.process.wait(*args, **kwargs) class VcsSim(object): - logname = "simv.log" + logfile = tempfile.NamedTemporaryFile(prefix='simv', suffix='.log') + logname = logfile.name - def __init__(self, sim_cmd=None, debug=False): + def __init__(self, sim_cmd=None, debug=False, timeout=300): if sim_cmd: cmd = shlex.split(sim_cmd) else: @@ -153,14 +154,19 @@ class VcsSim(object): if debug: cmd[0] = cmd[0] + "-debug" cmd += ["+vcdplusfile=output/gdbserver.vpd"] + logfile = open(self.logname, "w") + if print_log_names: + real_stdout.write("Temporary VCS log: %s\n" % self.logname) logfile.write("+ %s\n" % " ".join(cmd)) logfile.flush() + listenfile = open(self.logname, "r") listenfile.seek(0, 2) self.process = subprocess.Popen(cmd, stdin=subprocess.PIPE, stdout=logfile, stderr=logfile) done = False + start = time.time() while not done: # Fail if VCS exits early exit_code = self.process.poll() @@ -177,6 +183,10 @@ class VcsSim(object): self.port = int(match.group(1)) os.environ['JTAG_VPI_PORT'] = str(self.port) + if (time.time() - start) > timeout: + raise Exception("Timed out waiting for VCS to listen for JTAG " + "vpi") + def __del__(self): try: self.process.kill() -- 2.30.2