sim: remove temporary files and socket
authorSebastien Bourdeauducq <sebastien@milkymist.org>
Tue, 6 Mar 2012 13:20:26 +0000 (14:20 +0100)
committerSebastien Bourdeauducq <sebastien@milkymist.org>
Tue, 6 Mar 2012 13:20:26 +0000 (14:20 +0100)
migen/sim/generic.py
migen/sim/icarus.py

index cb346a7618b83cac0bc4b9dcf3b33680a9c9e3a7..56e82f732032fb2eed960457dbf2586b2f1f63ca 100644 (file)
@@ -69,10 +69,13 @@ class Simulator:
                        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())
        
index 558b0b3cec3f044c61f19e928b05033c551d8d30..680cacf1a2d6cb6f3304d5108f68faee07ba6245 100644 (file)
@@ -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