Merge branch 'master' of https://github.com/enjoy-digital/litex
[litex.git] / litex / build / sim / config.py
1 import json
2
3 class SimConfig():
4 def __init__(self, default_clk=None):
5 self.modules = []
6 self.default_clk = default_clk
7 if default_clk:
8 self.add_clocker(default_clk)
9
10 def _format_interfaces(self, interfaces):
11 if not isinstance(interfaces, list):
12 interfaces = [interfaces]
13 new = []
14 for it in interfaces:
15 obj = it
16 if isinstance(it, tuple):
17 name, index = it
18 obj = {"name": name, "index": index}
19 new.append(obj)
20 return new
21
22 def add_clocker(self, clk):
23 self.add_module("clocker", [], clocks=clk, tickfirst=True)
24
25 def add_module(self, name, interfaces, clocks=None, args=None, tickfirst=False):
26 interfaces = self._format_interfaces(interfaces)
27 if clocks:
28 interfaces += self._format_interfaces(clocks)
29 else:
30 interfaces += [self.default_clk]
31 newmod = {
32 "module": name,
33 "interface": interfaces,
34 }
35 if args:
36 newmod.update({"args": args})
37 if tickfirst:
38 newmod.update({"tickfirst": tickfirst})
39 self.modules.append(newmod)
40
41 def has_module(self, name):
42 for module in self.modules:
43 if module["module"] == name:
44 return True
45 return False
46
47 def get_json(self):
48 return json.dumps(self.modules, indent=4)