Update copyright notices
[litex.git] / migen / sim / icarus.py
1 # Copyright (C) 2012 Vermeer Manufacturing Co.
2 # License: GPLv3 with additional permissions (see README).
3
4 import subprocess
5 import os
6
7 def _str2file(filename, contents):
8 f = open(filename, "w")
9 f.write(contents)
10 f.close()
11
12 class Runner:
13 def __init__(self, extra_files=None, top_file="migensim_top.v", dut_file="migensim_dut.v", vvp_file=None, keep_files=False):
14 if extra_files is None: extra_files = []
15 if vvp_file is None: vvp_file = dut_file + "vp"
16 self.extra_files = extra_files
17 self.top_file = top_file
18 self.dut_file = dut_file
19 self.vvp_file = vvp_file
20 self.keep_files = keep_files
21
22 def start(self, c_top, c_dut):
23 _str2file(self.top_file, c_top)
24 _str2file(self.dut_file, c_dut)
25 subprocess.check_call(["iverilog", "-o", self.vvp_file, self.top_file, self.dut_file] + self.extra_files)
26 self.process = subprocess.Popen(["vvp", "-mmigensim", self.vvp_file])
27
28 def __del__(self):
29 if hasattr(self, "process"):
30 self.process.wait()
31 if not self.keep_files:
32 for f in [self.top_file, self.dut_file, self.vvp_file]:
33 try:
34 os.remove(f)
35 except OSError:
36 pass