From 06de17b16cf43059d6262195d9ff37c290f98666 Mon Sep 17 00:00:00 2001 From: Sebastien Bourdeauducq Date: Tue, 6 Mar 2012 14:20:26 +0100 Subject: [PATCH] sim: remove temporary files and socket --- migen/sim/generic.py | 7 +++++-- migen/sim/icarus.py | 14 ++++++++++++-- 2 files changed, 17 insertions(+), 4 deletions(-) diff --git a/migen/sim/generic.py b/migen/sim/generic.py index cb346a761..56e82f732 100644 --- a/migen/sim/generic.py +++ b/migen/sim/generic.py @@ -69,10 +69,13 @@ def __init__(self, fragment, sim_runner, top_level=None, sockaddr="simsocket"): rst_signal=rst_signal, return_ns=True) - sim_runner.start(c_top, c_fragment) - self.ipc.accept() self.cycle_counter = 0 self.interrupt = False + + self.sim_runner = sim_runner + self.sim_runner.start(c_top, c_fragment) + self.ipc.accept() + self.fragment.call_sim(self, 0) self.ipc.send(MessageGo()) diff --git a/migen/sim/icarus.py b/migen/sim/icarus.py index 558b0b3ce..680cacf1a 100644 --- a/migen/sim/icarus.py +++ b/migen/sim/icarus.py @@ -1,4 +1,5 @@ import subprocess +import os def _str2file(filename, contents): f = open(filename, "w") @@ -6,16 +7,25 @@ def _str2file(filename, contents): f.close() class Runner: - def __init__(self, top_file="migensim_top.v", dut_file="migensim_dut.v", extra_files=None, vvp_file=None): + def __init__(self, extra_files=None, top_file="migensim_top.v", dut_file="migensim_dut.v", vvp_file=None, keep_files=False): if extra_files is None: extra_files = [] if vvp_file is None: vvp_file = dut_file + "vp" + self.extra_files = extra_files self.top_file = top_file self.dut_file = dut_file - self.extra_files = extra_files self.vvp_file = vvp_file + self.keep_files = keep_files def start(self, c_top, c_dut): _str2file(self.top_file, c_top) _str2file(self.dut_file, c_dut) subprocess.check_call(["iverilog", "-o", self.vvp_file, self.top_file, self.dut_file] + self.extra_files) subprocess.Popen(["vvp", "-mmigensim", self.vvp_file]) + + def __del__(self): + if not self.keep_files: + for f in [self.top_file, self.dut_file, self.vvp_file]: + try: + os.remove(f) + except OSError: + pass