07a2be57403a881092ccaf30d5a14ee6fe4e2270
[litex.git] / litex / build / sim / config.py
1 # This file is Copyright (c) 2017 Pierre-Olivier Vauboin <po@lambdaconcept>
2 # This file is Copyright (c) 2018 Florent Kermarrec <florent@enjoy-digital.fr>
3 # License: BSD
4
5 import json
6
7 class SimConfig():
8 def __init__(self, default_clk=None):
9 self.modules = []
10 self.default_clk = default_clk
11 if default_clk:
12 self.add_clocker(default_clk)
13
14 def _format_interfaces(self, interfaces):
15 if not isinstance(interfaces, list):
16 interfaces = [interfaces]
17 new = []
18 for it in interfaces:
19 obj = it
20 if isinstance(it, tuple):
21 name, index = it
22 obj = {"name": name, "index": index}
23 new.append(obj)
24 return new
25
26 def add_clocker(self, clk):
27 self.add_module("clocker", [], clocks=clk, tickfirst=True)
28
29 def add_module(self, name, interfaces, clocks=None, args=None, tickfirst=False):
30 interfaces = self._format_interfaces(interfaces)
31 if clocks:
32 interfaces += self._format_interfaces(clocks)
33 else:
34 interfaces += [self.default_clk]
35 newmod = {
36 "module": name,
37 "interface": interfaces,
38 }
39 if args:
40 newmod.update({"args": args})
41 if tickfirst:
42 newmod.update({"tickfirst": tickfirst})
43 self.modules.append(newmod)
44
45 def has_module(self, name):
46 for module in self.modules:
47 if module["module"] == name:
48 return True
49 return False
50
51 def get_json(self):
52 return json.dumps(self.modules, indent=4)