-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathload_json.py
More file actions
65 lines (57 loc) · 2.13 KB
/
load_json.py
File metadata and controls
65 lines (57 loc) · 2.13 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
def get_clock(clocks, clock_name):
if clocks is not None:
return next((clock for clock in clocks if clock.name == clock_name), None)
else:
return None
class Clock:
def __init__(self, clock):
self.name = clock.get("name")
self.desc = clock.get("desc")
self.period = clock.get("period")
def __repr__(self):
return ' {:10} {:5} ns'.format(self.name, self.period)
class Field:
def __init__(self, field, access, attr, clock, clocks):
self.name = field.get("name")
self.desc = field.get("desc")
if field.get("access") is not None:
self.access = field.get("access")
else:
self.access = access
if field.get("attr") is not None:
self.attr = field.get("attr")
else:
self.attr = attr
if field.get("clock") is not None:
self.clock = get_clock(clocks, field.get("clock"))
else:
self.clock = clock
self.msb = field.get("msb")
self.lsb = field.get("lsb")
def __repr__(self):
bits = ' [{:2}]'.format(self.lsb) if self.lsb == self.msb else '[{:2}:{:2}]'.format(self.msb, self.lsb)
attr = '' if self.attr is None else self.attr
return ' {} {:5} {:4} {:10} {}\n'.format(bits, self.access, attr, self.clock.name, self.name)
class Reg:
def __init__(self, reg, clocks):
self.component = "Register"
self.name = reg.get("name")
self.desc = reg.get("desc")
self.placcess = reg.get("placcess")
self.fields = []
if reg.get("fields") is not None:
for f in reg.get("fields"):
self.fields.append(Field(f, reg.get("access"), reg.get("attr"),
get_clock(clocks, reg.get("clock")), clocks))
def __repr__(self):
return '{}\n{}'.format(self.name, '\n'.join([repr(f) for f in self.fields]))
def get_clocks(data):
clocks = []
for clock in data["clocks"]:
clocks.append(Clock(clock))
return clocks
def get_regs(data, clocks):
regs = []
for reg in data["regs"]:
regs.append(Reg(reg, clocks))
return regs