bust 0.13.2__tar.gz → 0.14.0.dev0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {bust-0.13.2 → bust-0.14.0.dev0}/PKG-INFO +1 -1
- bust-0.14.0.dev0/bust/_version.py +1 -0
- {bust-0.13.2 → bust-0.14.0.dev0}/bust/bus_vhdl_gen.py +4 -4
- {bust-0.13.2 → bust-0.14.0.dev0}/bust/documentation.py +10 -10
- {bust-0.13.2 → bust-0.14.0.dev0}/bust/editor.py +23 -23
- {bust-0.13.2 → bust-0.14.0.dev0}/bust/exceptions.py +5 -5
- {bust-0.13.2 → bust-0.14.0.dev0}/bust/field.py +7 -7
- {bust-0.13.2 → bust-0.14.0.dev0}/bust/header.py +18 -22
- {bust-0.13.2 → bust-0.14.0.dev0}/bust/module.py +1 -1
- {bust-0.13.2 → bust-0.14.0.dev0}/bust/module_vhdl_gen.py +10 -10
- {bust-0.13.2 → bust-0.14.0.dev0}/bust/register.py +30 -30
- {bust-0.13.2 → bust-0.14.0.dev0}/bust/testbench.py +22 -22
- {bust-0.13.2 → bust-0.14.0.dev0}/bust.egg-info/PKG-INFO +1 -1
- {bust-0.13.2 → bust-0.14.0.dev0}/setup.py +1 -1
- {bust-0.13.2 → bust-0.14.0.dev0}/tests/test_suite.py +1 -1
- bust-0.13.2/bust/_version.py +0 -1
- {bust-0.13.2 → bust-0.14.0.dev0}/LICENSE +0 -0
- {bust-0.13.2 → bust-0.14.0.dev0}/README.md +0 -0
- {bust-0.13.2 → bust-0.14.0.dev0}/bust/__init__.py +0 -0
- {bust-0.13.2 → bust-0.14.0.dev0}/bust/__main__.py +0 -0
- {bust-0.13.2 → bust-0.14.0.dev0}/bust/bus.py +0 -0
- {bust-0.13.2 → bust-0.14.0.dev0}/bust/generation.py +0 -0
- {bust-0.13.2 → bust-0.14.0.dev0}/bust/settings.py +0 -0
- {bust-0.13.2 → bust-0.14.0.dev0}/bust/utils.py +0 -0
- {bust-0.13.2 → bust-0.14.0.dev0}/bust/vhdl.py +0 -0
- {bust-0.13.2 → bust-0.14.0.dev0}/bust.egg-info/SOURCES.txt +0 -0
- {bust-0.13.2 → bust-0.14.0.dev0}/bust.egg-info/dependency_links.txt +0 -0
- {bust-0.13.2 → bust-0.14.0.dev0}/bust.egg-info/entry_points.txt +0 -0
- {bust-0.13.2 → bust-0.14.0.dev0}/bust.egg-info/requires.txt +0 -0
- {bust-0.13.2 → bust-0.14.0.dev0}/bust.egg-info/top_level.txt +0 -0
- {bust-0.13.2 → bust-0.14.0.dev0}/setup.cfg +0 -0
- {bust-0.13.2 → bust-0.14.0.dev0}/tests/__init__.py +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
__VERSION__ = "0.14.0-dev"
|
|
@@ -475,7 +475,7 @@ class BusVHDLGen:
|
|
|
475
475
|
par += sig_name + reg.name + " <= wdata;\n"
|
|
476
476
|
elif reg.sig_type == "slv":
|
|
477
477
|
par += sig_name + reg.name + " <= wdata("
|
|
478
|
-
par += str(reg.
|
|
478
|
+
par += str(reg.width - 1) + " downto 0);\n"
|
|
479
479
|
elif reg.sig_type == "sl":
|
|
480
480
|
par += sig_name + reg.name + " <= wdata(0);\n"
|
|
481
481
|
|
|
@@ -679,7 +679,7 @@ class BusVHDLGen:
|
|
|
679
679
|
|
|
680
680
|
elif reg.sig_type == "slv":
|
|
681
681
|
par += "reg_data_out("
|
|
682
|
-
par += str(reg.
|
|
682
|
+
par += str(reg.width - 1) + " downto 0) <= "
|
|
683
683
|
if reg.mode == "rw":
|
|
684
684
|
par += "axi_rw_regs_i."
|
|
685
685
|
elif reg.mode == "ro":
|
|
@@ -862,7 +862,7 @@ class BusVHDLGen:
|
|
|
862
862
|
par += sig_name + reg.name + " <= ipb_in.ipb_wdata;\n"
|
|
863
863
|
elif reg.sig_type == "slv":
|
|
864
864
|
par += sig_name + reg.name + " <= ipb_in.ipb_wdata("
|
|
865
|
-
par += str(reg.
|
|
865
|
+
par += str(reg.width - 1) + " downto 0);\n"
|
|
866
866
|
elif reg.sig_type == "sl":
|
|
867
867
|
par += sig_name + reg.name + " <= ipb_in.ipb_wdata(0);\n"
|
|
868
868
|
if reg.stall:
|
|
@@ -972,7 +972,7 @@ class BusVHDLGen:
|
|
|
972
972
|
|
|
973
973
|
elif reg.sig_type == "slv":
|
|
974
974
|
par += "reg_data_out("
|
|
975
|
-
par += str(reg.
|
|
975
|
+
par += str(reg.width - 1) + " downto 0) <= "
|
|
976
976
|
if reg.mode == "rw":
|
|
977
977
|
par += "ipb_rw_regs_i."
|
|
978
978
|
elif reg.mode == "ro":
|
|
@@ -45,7 +45,7 @@ class Documentation(object):
|
|
|
45
45
|
+ "} & "
|
|
46
46
|
)
|
|
47
47
|
p += reg.sig_type.upper() + " & "
|
|
48
|
-
p += str(reg.
|
|
48
|
+
p += str(reg.width) + " & "
|
|
49
49
|
p += r"\texttt{"
|
|
50
50
|
p += "0x" + format(int(reg.reset, 16), "X") + "} \\\\\n"
|
|
51
51
|
p += r"\hline" + "\n"
|
|
@@ -72,16 +72,16 @@ class Documentation(object):
|
|
|
72
72
|
s += utf8tolatex(reg.description) + r" \regnewline" + "\n"
|
|
73
73
|
s += indent_string(r"\label{" + reg.name + "}\n")
|
|
74
74
|
|
|
75
|
-
if reg.
|
|
75
|
+
if reg.width < self.module.data_width:
|
|
76
76
|
p = r"\regfield{unused}{"
|
|
77
|
-
p += str(self.module.data_width - reg.
|
|
78
|
-
p += str(reg.
|
|
77
|
+
p += str(self.module.data_width - reg.width) + "}{"
|
|
78
|
+
p += str(reg.width) + "}{-}\n"
|
|
79
79
|
s += indent_string(p)
|
|
80
80
|
|
|
81
81
|
if reg.sig_type != "fields":
|
|
82
82
|
|
|
83
|
-
p = r"\regfield{}{" + str(reg.
|
|
84
|
-
if reg.
|
|
83
|
+
p = r"\regfield{}{" + str(reg.width) + "}{0}{"
|
|
84
|
+
if reg.width < 2:
|
|
85
85
|
p += str(int(reg.reset, 16))
|
|
86
86
|
else:
|
|
87
87
|
p += "{0x" + format(int(reg.reset, 16), "X") + "}"
|
|
@@ -92,9 +92,9 @@ class Documentation(object):
|
|
|
92
92
|
else:
|
|
93
93
|
for field in reversed(reg.fields):
|
|
94
94
|
p = r"\regfield{" + utf8tolatex(field.name) + "}{"
|
|
95
|
-
p += str(field.
|
|
95
|
+
p += str(field.width) + "}{"
|
|
96
96
|
p += str(field.pos_low) + "}{"
|
|
97
|
-
if field.
|
|
97
|
+
if field.width < 2:
|
|
98
98
|
p += str(int(field.reset, 16))
|
|
99
99
|
else:
|
|
100
100
|
p += "{0x" + format(int(field.reset, 16), "X") + "}"
|
|
@@ -106,7 +106,7 @@ class Documentation(object):
|
|
|
106
106
|
if reg.sig_type == "fields":
|
|
107
107
|
|
|
108
108
|
p = r"\begin{regdesc}\begin{reglist}["
|
|
109
|
-
# Get the longest field name and indent the list based on that
|
|
109
|
+
# Get the longest field name and indent the list based on that width
|
|
110
110
|
gen = [field.name for field in reg.fields]
|
|
111
111
|
longest = max(gen, key=len)
|
|
112
112
|
p += utf8tolatex(longest)
|
|
@@ -156,7 +156,7 @@ tex_table_top = r"""\begin{table}[h!]
|
|
|
156
156
|
\label{tab:table1}
|
|
157
157
|
\begin{tabularx}{\linewidth}{|l|X|l|l|l|c|l|}
|
|
158
158
|
\hline
|
|
159
|
-
\textbf{\#} & \textbf{Name} & \textbf{Mode} & \textbf{Address} & \textbf{Type} & \textbf{
|
|
159
|
+
\textbf{\#} & \textbf{Name} & \textbf{Mode} & \textbf{Address} & \textbf{Type} & \textbf{Width} &
|
|
160
160
|
\textbf{Reset} \\
|
|
161
161
|
\hline"""
|
|
162
162
|
|
|
@@ -110,7 +110,7 @@ class Editor(object):
|
|
|
110
110
|
"Mode",
|
|
111
111
|
"Address",
|
|
112
112
|
"Type",
|
|
113
|
-
"
|
|
113
|
+
"Width",
|
|
114
114
|
"Reset",
|
|
115
115
|
"Description",
|
|
116
116
|
]
|
|
@@ -122,7 +122,7 @@ class Editor(object):
|
|
|
122
122
|
reg.mode,
|
|
123
123
|
hex(reg.address),
|
|
124
124
|
reg.sig_type,
|
|
125
|
-
reg.
|
|
125
|
+
reg.width,
|
|
126
126
|
reg.reset,
|
|
127
127
|
add_line_breaks(reg.description, 25),
|
|
128
128
|
]
|
|
@@ -160,7 +160,7 @@ class Editor(object):
|
|
|
160
160
|
"Name",
|
|
161
161
|
"Type",
|
|
162
162
|
"Position",
|
|
163
|
-
"
|
|
163
|
+
"Width",
|
|
164
164
|
"Reset",
|
|
165
165
|
"Description",
|
|
166
166
|
]
|
|
@@ -172,7 +172,7 @@ class Editor(object):
|
|
|
172
172
|
field.name,
|
|
173
173
|
field.sig_type,
|
|
174
174
|
field.get_pos_str(),
|
|
175
|
-
field.
|
|
175
|
+
field.width,
|
|
176
176
|
field.reset,
|
|
177
177
|
add_line_breaks(field.description, 25),
|
|
178
178
|
]
|
|
@@ -213,8 +213,8 @@ class Editor(object):
|
|
|
213
213
|
if field_dic["type"] == "slv":
|
|
214
214
|
max_width = self.mod.data_width - width_consumed
|
|
215
215
|
|
|
216
|
-
field_dic["
|
|
217
|
-
"Field
|
|
216
|
+
field_dic["width"] = get_int(
|
|
217
|
+
"Field width: ",
|
|
218
218
|
10,
|
|
219
219
|
1,
|
|
220
220
|
max_width,
|
|
@@ -224,13 +224,13 @@ class Editor(object):
|
|
|
224
224
|
+ " consumed by other fields: "
|
|
225
225
|
+ str(max_width),
|
|
226
226
|
)
|
|
227
|
-
width_consumed += field_dic["
|
|
227
|
+
width_consumed += field_dic["width"]
|
|
228
228
|
|
|
229
229
|
else:
|
|
230
230
|
width_consumed += 1
|
|
231
|
-
field_dic["
|
|
231
|
+
field_dic["width"] = 1
|
|
232
232
|
|
|
233
|
-
max_reset = 2 ** field_dic["
|
|
233
|
+
max_reset = 2 ** field_dic["width"] - 1
|
|
234
234
|
field_dic["reset"] = hex(
|
|
235
235
|
get_int(
|
|
236
236
|
"Field reset in hex (default=0x0): ",
|
|
@@ -272,19 +272,19 @@ class Editor(object):
|
|
|
272
272
|
"Register type: ", Register.supported_types, None, 0
|
|
273
273
|
)
|
|
274
274
|
|
|
275
|
-
# Make sure reg
|
|
275
|
+
# Make sure reg width is set to help calculate max reset later
|
|
276
276
|
# Registers of field type will get an auto reset based on the field resets
|
|
277
277
|
if reg["type"] == "default":
|
|
278
|
-
reg["
|
|
278
|
+
reg["width"] = self.mod.data_width
|
|
279
279
|
elif reg["type"] == "sl":
|
|
280
|
-
reg["
|
|
280
|
+
reg["width"] = 1
|
|
281
281
|
elif reg["type"] == "slv":
|
|
282
282
|
while True:
|
|
283
283
|
try:
|
|
284
|
-
reg["
|
|
284
|
+
reg["width"] = int(input("Width: "))
|
|
285
285
|
break
|
|
286
286
|
except Exception:
|
|
287
|
-
print("That is not a valid
|
|
287
|
+
print("That is not a valid width...")
|
|
288
288
|
|
|
289
289
|
if input("Auto-assign address? (Y/n): ").upper() == "N":
|
|
290
290
|
# Make sure the address is not out of range and that it is free
|
|
@@ -325,7 +325,7 @@ class Editor(object):
|
|
|
325
325
|
|
|
326
326
|
if reg["type"] != "fields":
|
|
327
327
|
|
|
328
|
-
max_reset = 2 ** reg["
|
|
328
|
+
max_reset = 2 ** reg["width"] - 1
|
|
329
329
|
reg["reset"] = hex(
|
|
330
330
|
get_int(
|
|
331
331
|
"Register reset in hex (default=0x0): ",
|
|
@@ -347,7 +347,7 @@ class Editor(object):
|
|
|
347
347
|
"Mode",
|
|
348
348
|
"Address",
|
|
349
349
|
"Type",
|
|
350
|
-
"
|
|
350
|
+
"Width",
|
|
351
351
|
"Reset",
|
|
352
352
|
"Description",
|
|
353
353
|
]
|
|
@@ -364,11 +364,11 @@ class Editor(object):
|
|
|
364
364
|
table_type = reg["type"]
|
|
365
365
|
|
|
366
366
|
if reg["type"] == "fields":
|
|
367
|
-
|
|
368
|
-
elif "
|
|
369
|
-
|
|
367
|
+
table_width = "auto"
|
|
368
|
+
elif "width" in reg:
|
|
369
|
+
table_width = reg["width"]
|
|
370
370
|
else:
|
|
371
|
-
|
|
371
|
+
table_width = self.mod.bus.data_width
|
|
372
372
|
|
|
373
373
|
if reg["type"] == "fields":
|
|
374
374
|
table_reset = "auto"
|
|
@@ -386,7 +386,7 @@ class Editor(object):
|
|
|
386
386
|
table_mode,
|
|
387
387
|
table_address,
|
|
388
388
|
table_type,
|
|
389
|
-
|
|
389
|
+
table_width,
|
|
390
390
|
table_reset,
|
|
391
391
|
table_description,
|
|
392
392
|
]
|
|
@@ -401,7 +401,7 @@ class Editor(object):
|
|
|
401
401
|
"#",
|
|
402
402
|
"Name",
|
|
403
403
|
"Type",
|
|
404
|
-
"
|
|
404
|
+
"Width",
|
|
405
405
|
"Reset",
|
|
406
406
|
"Description",
|
|
407
407
|
]
|
|
@@ -412,7 +412,7 @@ class Editor(object):
|
|
|
412
412
|
i,
|
|
413
413
|
field["name"],
|
|
414
414
|
field["type"],
|
|
415
|
-
field["
|
|
415
|
+
field["width"],
|
|
416
416
|
field["reset"],
|
|
417
417
|
field["description"],
|
|
418
418
|
]
|
|
@@ -57,12 +57,12 @@ class InvalidResetMode(RuntimeError):
|
|
|
57
57
|
class ModuleDataBitsExceeded(Exception):
|
|
58
58
|
"""! @brief Raised when the specified module data bits are exceeded."""
|
|
59
59
|
|
|
60
|
-
def __init__(self, register,
|
|
61
|
-
msg = "Register
|
|
62
|
-
msg += str(
|
|
60
|
+
def __init__(self, register, regwidth, mod_data_width):
|
|
61
|
+
msg = "Register width exceeded module data width by "
|
|
62
|
+
msg += str(regwidth - mod_data_width)
|
|
63
63
|
msg += " in register " + register + "\n"
|
|
64
|
-
msg += "Module
|
|
65
|
-
msg += "Register
|
|
64
|
+
msg += "Module width: " + str(mod_data_width) + "\n"
|
|
65
|
+
msg += "Register width: " + str(regwidth)
|
|
66
66
|
|
|
67
67
|
super().__init__(msg)
|
|
68
68
|
|
|
@@ -8,15 +8,15 @@ class Field(object):
|
|
|
8
8
|
|
|
9
9
|
supported_types = ["slv", "sl"]
|
|
10
10
|
|
|
11
|
-
def __init__(self, name, sig_type,
|
|
11
|
+
def __init__(self, name, sig_type, width, reset, description, pos_low):
|
|
12
12
|
self.name = name
|
|
13
13
|
self.sig_type = sig_type
|
|
14
|
-
self.
|
|
14
|
+
self.width = width
|
|
15
15
|
self.reset = reset
|
|
16
16
|
self.description = description
|
|
17
17
|
self.description_with_breaks = add_line_breaks(description, 25)
|
|
18
18
|
self.pos_low = pos_low
|
|
19
|
-
self.pos_high = pos_low +
|
|
19
|
+
self.pos_high = pos_low + width - 1
|
|
20
20
|
|
|
21
21
|
def get_pos_str(self):
|
|
22
22
|
if self.sig_type == "sl":
|
|
@@ -31,13 +31,13 @@ class Field(object):
|
|
|
31
31
|
return str(self.pos_high) + " downto " + str(self.pos_low)
|
|
32
32
|
|
|
33
33
|
def get_mask(self):
|
|
34
|
-
return pow(2, self.
|
|
34
|
+
return pow(2, self.width) - 1 << self.pos_low
|
|
35
35
|
|
|
36
36
|
def get_dictionary(self, reset, description):
|
|
37
37
|
dict = OrderedDict()
|
|
38
38
|
dict["name"] = self.name
|
|
39
39
|
dict["type"] = self.sig_type
|
|
40
|
-
dict["
|
|
40
|
+
dict["width"] = self.width
|
|
41
41
|
if reset:
|
|
42
42
|
dict["reset"] = self.reset
|
|
43
43
|
if description:
|
|
@@ -50,7 +50,7 @@ class Field(object):
|
|
|
50
50
|
self.name,
|
|
51
51
|
self.sig_type,
|
|
52
52
|
self.get_pos_str,
|
|
53
|
-
self.
|
|
53
|
+
self.width,
|
|
54
54
|
self.reset,
|
|
55
55
|
self.description,
|
|
56
56
|
]
|
|
@@ -61,7 +61,7 @@ class Field(object):
|
|
|
61
61
|
dic["name"] = self.name
|
|
62
62
|
dic["type"] = self.sig_type
|
|
63
63
|
if self.sig_type == "slv":
|
|
64
|
-
dic["
|
|
64
|
+
dic["width"] = self.width
|
|
65
65
|
if self.reset != "0x0":
|
|
66
66
|
dic["reset"] = self.reset
|
|
67
67
|
if self.description != "":
|
|
@@ -17,14 +17,10 @@ class Header(object):
|
|
|
17
17
|
|
|
18
18
|
for reg in self.module.registers:
|
|
19
19
|
s += "/* Register: " + reg.name + " */\n"
|
|
20
|
-
s += (
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
+ str(hex(reg.address))
|
|
25
|
-
+ "\n"
|
|
26
|
-
)
|
|
27
|
-
s += "#define " + reg.name.upper() + "_RESET " + reg.reset + "\n"
|
|
20
|
+
s += f'#define {reg.name.upper()}_MODE "{reg.mode}";\n'
|
|
21
|
+
s += f"#define {reg.name.upper()}_WIDTH {reg.width};\n"
|
|
22
|
+
s += f"#define {reg.name.upper()}_OFFSET {str(hex(reg.address))};\n"
|
|
23
|
+
s += f"#define {reg.name.upper()}_RESET {reg.reset};\n"
|
|
28
24
|
s += "\n"
|
|
29
25
|
|
|
30
26
|
if reg.sig_type == "fields":
|
|
@@ -45,7 +41,7 @@ class Header(object):
|
|
|
45
41
|
+ field.name.upper()
|
|
46
42
|
+ "_WIDTH "
|
|
47
43
|
)
|
|
48
|
-
s += str(field.
|
|
44
|
+
s += str(field.width) + "\n"
|
|
49
45
|
s += (
|
|
50
46
|
"#define "
|
|
51
47
|
+ reg.name.upper()
|
|
@@ -61,7 +57,7 @@ class Header(object):
|
|
|
61
57
|
+ field.name.upper()
|
|
62
58
|
+ "_MASK "
|
|
63
59
|
)
|
|
64
|
-
s += str(hex(pow(2, field.
|
|
60
|
+
s += str(hex(pow(2, field.width) - 1 << field.pos_low)) + "\n"
|
|
65
61
|
s += "\n"
|
|
66
62
|
|
|
67
63
|
s += "#endif"
|
|
@@ -83,14 +79,12 @@ class Header(object):
|
|
|
83
79
|
|
|
84
80
|
for reg in self.module.registers:
|
|
85
81
|
s += "/* Register: " + reg.name + " */\n"
|
|
82
|
+
s += f'const uint32_t {reg.name.upper()}_MODE = "{reg.mode}";\n'
|
|
83
|
+
s += f"const uint32_t {reg.name.upper()}_WIDTH = {reg.width};\n"
|
|
86
84
|
s += (
|
|
87
|
-
"const uint32_t "
|
|
88
|
-
+ reg.name.upper()
|
|
89
|
-
+ "_OFFSET = "
|
|
90
|
-
+ str(hex(reg.address))
|
|
91
|
-
+ ";\n"
|
|
85
|
+
f"const uint32_t {reg.name.upper()}_OFFSET = {str(hex(reg.address))};\n"
|
|
92
86
|
)
|
|
93
|
-
s += "const uint32_t
|
|
87
|
+
s += f"const uint32_t {reg.name.upper()}_RESET = {reg.reset};\n"
|
|
94
88
|
s += "\n"
|
|
95
89
|
|
|
96
90
|
if reg.sig_type == "fields":
|
|
@@ -111,7 +105,7 @@ class Header(object):
|
|
|
111
105
|
+ field.name.upper()
|
|
112
106
|
+ "_WIDTH = "
|
|
113
107
|
)
|
|
114
|
-
s += str(field.
|
|
108
|
+
s += str(field.width) + ";\n"
|
|
115
109
|
s += (
|
|
116
110
|
"const uint32_t "
|
|
117
111
|
+ reg.name.upper()
|
|
@@ -127,7 +121,7 @@ class Header(object):
|
|
|
127
121
|
+ field.name.upper()
|
|
128
122
|
+ "_MASK = "
|
|
129
123
|
)
|
|
130
|
-
s += str(hex(pow(2, field.
|
|
124
|
+
s += str(hex(pow(2, field.width) - 1 << field.pos_low)) + ";\n"
|
|
131
125
|
s += "\n"
|
|
132
126
|
s += "};\n\n"
|
|
133
127
|
|
|
@@ -144,10 +138,12 @@ class Header(object):
|
|
|
144
138
|
for reg in self.module.registers:
|
|
145
139
|
s += "\n"
|
|
146
140
|
s += indent_string('"""Register: ' + reg.name + '"""\n', 2)
|
|
141
|
+
s += indent_string(f'{reg.name.upper()}_MODE = "{reg.mode}"\n', 2)
|
|
142
|
+
s += indent_string(f"{reg.name.upper()}_WIDTH = {reg.width}\n", 2)
|
|
147
143
|
s += indent_string(
|
|
148
|
-
reg.name.upper()
|
|
144
|
+
f"{reg.name.upper()}_OFFSET = {str(hex(reg.address))}\n", 2
|
|
149
145
|
)
|
|
150
|
-
s += indent_string(reg.name.upper()
|
|
146
|
+
s += indent_string(f"{reg.name.upper()}_RESET = {reg.reset}\n", 2)
|
|
151
147
|
|
|
152
148
|
if reg.sig_type == "fields":
|
|
153
149
|
for field in reg.fields:
|
|
@@ -160,7 +156,7 @@ class Header(object):
|
|
|
160
156
|
s += indent_string(
|
|
161
157
|
reg.name.upper() + "_" + field.name.upper() + "_WIDTH = ", 2
|
|
162
158
|
)
|
|
163
|
-
s += str(field.
|
|
159
|
+
s += str(field.width) + "\n"
|
|
164
160
|
s += indent_string(
|
|
165
161
|
reg.name.upper() + "_" + field.name.upper() + "_RESET = ", 2
|
|
166
162
|
)
|
|
@@ -168,7 +164,7 @@ class Header(object):
|
|
|
168
164
|
s += indent_string(
|
|
169
165
|
reg.name.upper() + "_" + field.name.upper() + "_MASK = ", 2
|
|
170
166
|
)
|
|
171
|
-
s += str(hex(pow(2, field.
|
|
167
|
+
s += str(hex(pow(2, field.width) - 1 << field.pos_low))
|
|
172
168
|
s += "\n"
|
|
173
169
|
|
|
174
170
|
return s
|
|
@@ -65,11 +65,11 @@ class ModuleVHDLGen:
|
|
|
65
65
|
if reg.mode == "pulse":
|
|
66
66
|
s += indent_string(reg.name, 2) + " : "
|
|
67
67
|
if reg.sig_type == "default" or (
|
|
68
|
-
reg.sig_type == "slv" and reg.
|
|
68
|
+
reg.sig_type == "slv" and reg.width == self.data_width
|
|
69
69
|
):
|
|
70
70
|
s += "t_" + self.name + "_data;\n"
|
|
71
71
|
elif reg.sig_type == "slv":
|
|
72
|
-
s += "std_logic_vector(" + str(reg.
|
|
72
|
+
s += "std_logic_vector(" + str(reg.width - 1) + " downto 0);\n"
|
|
73
73
|
elif reg.sig_type == "sl":
|
|
74
74
|
s += "std_logic;\n"
|
|
75
75
|
elif reg.sig_type == "fields":
|
|
@@ -97,7 +97,7 @@ class ModuleVHDLGen:
|
|
|
97
97
|
for field in reg.fields:
|
|
98
98
|
s += indent_string(field.name, 2) + " : "
|
|
99
99
|
if field.sig_type == "slv":
|
|
100
|
-
s += "std_logic_vector(" + str(field.
|
|
100
|
+
s += "std_logic_vector(" + str(field.width - 1)
|
|
101
101
|
s += " downto 0);\n"
|
|
102
102
|
elif field.sig_type == "sl":
|
|
103
103
|
s += "std_logic;\n"
|
|
@@ -110,11 +110,11 @@ class ModuleVHDLGen:
|
|
|
110
110
|
if reg.mode == "ro":
|
|
111
111
|
s += indent_string(reg.name, 2) + " : "
|
|
112
112
|
if reg.sig_type == "default" or (
|
|
113
|
-
reg.sig_type == "slv" and reg.
|
|
113
|
+
reg.sig_type == "slv" and reg.width == self.data_width
|
|
114
114
|
):
|
|
115
115
|
s += "t_" + self.name + "_data;\n"
|
|
116
116
|
elif reg.sig_type == "slv":
|
|
117
|
-
s += "std_logic_vector(" + str(reg.
|
|
117
|
+
s += "std_logic_vector(" + str(reg.width - 1) + " downto 0);\n"
|
|
118
118
|
elif reg.sig_type == "sl":
|
|
119
119
|
s += "std_logic;\n"
|
|
120
120
|
elif reg.sig_type == "fields":
|
|
@@ -150,7 +150,7 @@ class ModuleVHDLGen:
|
|
|
150
150
|
if field.reset == "0x0":
|
|
151
151
|
par += "(others => '0')"
|
|
152
152
|
else:
|
|
153
|
-
par += str(field.
|
|
153
|
+
par += str(field.width) + 'X"'
|
|
154
154
|
par += format(int(field.reset, 16), "X") + '"'
|
|
155
155
|
|
|
156
156
|
elif field.sig_type == "sl":
|
|
@@ -173,11 +173,11 @@ class ModuleVHDLGen:
|
|
|
173
173
|
if reg.mode == "rw":
|
|
174
174
|
s += indent_string(reg.name, 2) + " : "
|
|
175
175
|
if reg.sig_type == "default" or (
|
|
176
|
-
reg.sig_type == "slv" and reg.
|
|
176
|
+
reg.sig_type == "slv" and reg.width == self.data_width
|
|
177
177
|
):
|
|
178
178
|
s += "t_" + self.name + "_data;\n"
|
|
179
179
|
elif reg.sig_type == "slv":
|
|
180
|
-
s += "std_logic_vector(" + str(reg.
|
|
180
|
+
s += "std_logic_vector(" + str(reg.width - 1) + " downto 0);\n"
|
|
181
181
|
elif reg.sig_type == "sl":
|
|
182
182
|
s += "std_logic;\n"
|
|
183
183
|
elif reg.sig_type == "fields":
|
|
@@ -205,7 +205,7 @@ class ModuleVHDLGen:
|
|
|
205
205
|
if reg.reset == "0x0":
|
|
206
206
|
par += "(others => '0')"
|
|
207
207
|
else:
|
|
208
|
-
par += str(reg.
|
|
208
|
+
par += str(reg.width) + 'X"'
|
|
209
209
|
par += format(int(reg.reset, 16), "X") + '"'
|
|
210
210
|
|
|
211
211
|
elif reg.sig_type == "fields":
|
|
@@ -231,7 +231,7 @@ class ModuleVHDLGen:
|
|
|
231
231
|
for field in reg.fields:
|
|
232
232
|
s += indent_string(field.name, 2) + " : "
|
|
233
233
|
if field.sig_type == "slv":
|
|
234
|
-
s += "std_logic_vector(" + str(field.
|
|
234
|
+
s += "std_logic_vector(" + str(field.width - 1)
|
|
235
235
|
s += " downto 0);\n"
|
|
236
236
|
elif field.sig_type == "sl":
|
|
237
237
|
s += "std_logic;\n"
|
|
@@ -17,7 +17,7 @@ class Register:
|
|
|
17
17
|
supported_types = ["default", "slv", "sl"]
|
|
18
18
|
supported_modes = ["RW", "RO", "PULSE"]
|
|
19
19
|
|
|
20
|
-
def __init__(self, reg, address,
|
|
20
|
+
def __init__(self, reg, address, mod_data_width):
|
|
21
21
|
self.name = reg["name"]
|
|
22
22
|
self.mode = reg["mode"].lower()
|
|
23
23
|
self.description = reg["description"]
|
|
@@ -39,32 +39,32 @@ class Register:
|
|
|
39
39
|
self.stall_cycles = reg["stall_cycles"]
|
|
40
40
|
|
|
41
41
|
self.reset = "0x0"
|
|
42
|
-
self.
|
|
42
|
+
self.width = 0
|
|
43
43
|
self.fields = []
|
|
44
44
|
|
|
45
|
-
if "
|
|
46
|
-
|
|
45
|
+
if "width" in reg:
|
|
46
|
+
tmp_width = reg["width"]
|
|
47
47
|
else:
|
|
48
|
-
|
|
48
|
+
tmp_width = 1 # Setting to 1, in case std_logic
|
|
49
49
|
|
|
50
50
|
if "type" in reg:
|
|
51
51
|
self.sig_type = reg["type"]
|
|
52
52
|
else:
|
|
53
53
|
self.sig_type = "fields"
|
|
54
54
|
|
|
55
|
-
# Assign the reg type and register data
|
|
55
|
+
# Assign the reg type and register data width
|
|
56
56
|
if self.sig_type == "default":
|
|
57
|
-
self.
|
|
57
|
+
self.width = mod_data_width
|
|
58
58
|
|
|
59
59
|
elif self.sig_type == "slv":
|
|
60
|
-
self.
|
|
60
|
+
self.width = tmp_width
|
|
61
61
|
|
|
62
62
|
elif self.sig_type == "sl":
|
|
63
63
|
self.sig_type = "sl"
|
|
64
64
|
|
|
65
|
-
if
|
|
66
|
-
raise UndefinedRegisterType("SL cannot have
|
|
67
|
-
self.
|
|
65
|
+
if tmp_width != 1:
|
|
66
|
+
raise UndefinedRegisterType("SL cannot have width other than 1")
|
|
67
|
+
self.width = tmp_width
|
|
68
68
|
|
|
69
69
|
elif self.sig_type == "fields" or "fields" in reg:
|
|
70
70
|
if len(reg["fields"]) > 0:
|
|
@@ -83,9 +83,9 @@ class Register:
|
|
|
83
83
|
"Reset value is not allowed for record type register: " + self.name
|
|
84
84
|
)
|
|
85
85
|
else:
|
|
86
|
-
# Check whether reset value matches register
|
|
87
|
-
# maxvalue is given by 2^
|
|
88
|
-
maxvalue = (2**self.
|
|
86
|
+
# Check whether reset value matches register width
|
|
87
|
+
# maxvalue is given by 2^width
|
|
88
|
+
maxvalue = (2**self.width) - 1
|
|
89
89
|
if maxvalue < int(reg["reset"], 16):
|
|
90
90
|
raise InvalidRegisterFormat(
|
|
91
91
|
"Reset value does not match register: " + self.name
|
|
@@ -94,14 +94,14 @@ class Register:
|
|
|
94
94
|
self.reset = reg["reset"]
|
|
95
95
|
|
|
96
96
|
# Perform check that data bits are not exceeded
|
|
97
|
-
self.
|
|
97
|
+
self.check_register_data_width(mod_data_width)
|
|
98
98
|
|
|
99
99
|
def __str__(self):
|
|
100
100
|
string = "Name: " + self.name + "\n"
|
|
101
101
|
string += "Address: " + hex(self.address) + "\n"
|
|
102
102
|
string += "Mode: " + self.mode + "\n"
|
|
103
103
|
string += "Type: " + self.sig_type + "\n"
|
|
104
|
-
string += "
|
|
104
|
+
string += "Width: " + str(self.width) + "\n"
|
|
105
105
|
string += "Reset: " + self.reset
|
|
106
106
|
if self.sig_type == "record":
|
|
107
107
|
|
|
@@ -112,8 +112,8 @@ class Register:
|
|
|
112
112
|
+ i["name"]
|
|
113
113
|
+ " Type: "
|
|
114
114
|
+ i["type"]
|
|
115
|
-
+ "
|
|
116
|
-
+ str(i["
|
|
115
|
+
+ " Width: "
|
|
116
|
+
+ str(i["width"])
|
|
117
117
|
+ " Reset: "
|
|
118
118
|
+ i["reset"]
|
|
119
119
|
)
|
|
@@ -134,24 +134,24 @@ class Register:
|
|
|
134
134
|
is_unique(field["name"], field_names)
|
|
135
135
|
|
|
136
136
|
if field["type"] == "slv":
|
|
137
|
-
if "
|
|
137
|
+
if "width" not in field:
|
|
138
138
|
raise InvalidFieldFormat(self.name)
|
|
139
|
-
|
|
139
|
+
width = field["width"]
|
|
140
140
|
|
|
141
141
|
elif field["type"] == "sl":
|
|
142
|
-
|
|
142
|
+
width = 1
|
|
143
143
|
|
|
144
144
|
else:
|
|
145
145
|
raise UndefinedFieldType(field["type"])
|
|
146
146
|
|
|
147
|
-
# Increment register
|
|
148
|
-
self.
|
|
147
|
+
# Increment register width
|
|
148
|
+
self.width += width
|
|
149
149
|
|
|
150
150
|
if "reset" in field:
|
|
151
151
|
reset = field["reset"]
|
|
152
|
-
# Check whether reset value matches field
|
|
153
|
-
# maxvalue is given by 2^
|
|
154
|
-
maxvalue = (2**
|
|
152
|
+
# Check whether reset value matches field width
|
|
153
|
+
# maxvalue is given by 2^width
|
|
154
|
+
maxvalue = (2**width) - 1
|
|
155
155
|
if maxvalue < int(field["reset"], 16):
|
|
156
156
|
raise InvalidFieldFormat(
|
|
157
157
|
"Reset value does not match field: "
|
|
@@ -169,7 +169,7 @@ class Register:
|
|
|
169
169
|
|
|
170
170
|
next_low = self.get_next_pos_low()
|
|
171
171
|
self.fields.append(
|
|
172
|
-
Field(field["name"], field["type"],
|
|
172
|
+
Field(field["name"], field["type"], width, reset, description, next_low)
|
|
173
173
|
)
|
|
174
174
|
|
|
175
175
|
# Maintain the register reset value
|
|
@@ -178,13 +178,13 @@ class Register:
|
|
|
178
178
|
reg_reset_int += field_reset_int << next_low
|
|
179
179
|
self.reset = hex(reg_reset_int)
|
|
180
180
|
|
|
181
|
-
def
|
|
181
|
+
def check_register_data_width(self, module):
|
|
182
182
|
"""! @brief Controls that the combined data bits in fields does not
|
|
183
183
|
exceed data bits of module
|
|
184
184
|
|
|
185
185
|
"""
|
|
186
|
-
if self.
|
|
187
|
-
raise ModuleDataBitsExceeded(self.name, self.
|
|
186
|
+
if self.width > module:
|
|
187
|
+
raise ModuleDataBitsExceeded(self.name, self.width, module)
|
|
188
188
|
|
|
189
189
|
def get_next_pos_low(self):
|
|
190
190
|
if len(self.fields) > 0:
|
|
@@ -397,7 +397,7 @@ class Testbench(object):
|
|
|
397
397
|
signal = "{}_{}_regs.{}".format(self.bus.short_name, reg.mode, reg.name)
|
|
398
398
|
if reg.sig_type in ["sl", "slv", "default"]:
|
|
399
399
|
s += self.check_value(
|
|
400
|
-
signal, self.sig_value(reg.reset, reg.sig_type, reg.
|
|
400
|
+
signal, self.sig_value(reg.reset, reg.sig_type, reg.width), msg
|
|
401
401
|
)
|
|
402
402
|
elif reg.sig_type == "fields":
|
|
403
403
|
for field in reg.fields:
|
|
@@ -405,13 +405,13 @@ class Testbench(object):
|
|
|
405
405
|
signal_field = "{}.{}".format(signal, field.name)
|
|
406
406
|
s += self.check_value(
|
|
407
407
|
signal_field,
|
|
408
|
-
self.sig_value(field.reset, field.sig_type, field.
|
|
408
|
+
self.sig_value(field.reset, field.sig_type, field.width),
|
|
409
409
|
msg_field,
|
|
410
410
|
)
|
|
411
411
|
|
|
412
412
|
if reg.mode in ["rw", "ro"]:
|
|
413
413
|
c_addr = "C_ADDR_{}".format(reg.name.upper())
|
|
414
|
-
exp_value = self.sig_value(reg.reset, "default", reg.
|
|
414
|
+
exp_value = self.sig_value(reg.reset, "default", reg.width)
|
|
415
415
|
s += self.bus.uvvm_check(c_addr, exp_value, msg)
|
|
416
416
|
elif reg.mode == "pulse":
|
|
417
417
|
pass
|
|
@@ -430,14 +430,14 @@ class Testbench(object):
|
|
|
430
430
|
s += self.bus.uvvm_write(c_addr, bus_val, msg)
|
|
431
431
|
|
|
432
432
|
if reg.sig_type in ["sl", "slv", "default"]:
|
|
433
|
-
sig_val = self.sig_value("0", reg.sig_type, reg.
|
|
433
|
+
sig_val = self.sig_value("0", reg.sig_type, reg.width)
|
|
434
434
|
s += self.check_value(signal, sig_val, msg)
|
|
435
435
|
elif reg.sig_type == "fields":
|
|
436
436
|
for field in reg.fields:
|
|
437
437
|
signal_field = "{}.{}".format(signal, field.name)
|
|
438
438
|
s += self.check_value(
|
|
439
439
|
signal_field,
|
|
440
|
-
self.sig_value("0", field.sig_type, field.
|
|
440
|
+
self.sig_value("0", field.sig_type, field.width),
|
|
441
441
|
msg,
|
|
442
442
|
)
|
|
443
443
|
else:
|
|
@@ -448,7 +448,7 @@ class Testbench(object):
|
|
|
448
448
|
elif reg.mode == "ro":
|
|
449
449
|
|
|
450
450
|
if reg.sig_type in ["sl", "slv", "default"]:
|
|
451
|
-
sig_val = self.sig_value("0", reg.sig_type, reg.
|
|
451
|
+
sig_val = self.sig_value("0", reg.sig_type, reg.width)
|
|
452
452
|
s += "{} <= {};\n".format(signal, sig_val)
|
|
453
453
|
s += self.await_value(signal, sig_val, msg)
|
|
454
454
|
elif reg.sig_type == "fields":
|
|
@@ -459,7 +459,7 @@ class Testbench(object):
|
|
|
459
459
|
)
|
|
460
460
|
for field in reg.fields:
|
|
461
461
|
signal_field = "{}.{}".format(signal, field.name)
|
|
462
|
-
sig_val = self.sig_value("0", field.sig_type, field.
|
|
462
|
+
sig_val = self.sig_value("0", field.sig_type, field.width)
|
|
463
463
|
s += self.await_value(signal_field, sig_val, msg)
|
|
464
464
|
|
|
465
465
|
else:
|
|
@@ -478,15 +478,15 @@ class Testbench(object):
|
|
|
478
478
|
for field in reg.fields:
|
|
479
479
|
signal_field.append("{}.{}".format(signal, field.name))
|
|
480
480
|
for i, field in enumerate(reg.fields):
|
|
481
|
-
sig_val = self.sig_value("0", field.sig_type, field.
|
|
481
|
+
sig_val = self.sig_value("0", field.sig_type, field.width)
|
|
482
482
|
s += self.check_value(signal_field[i], sig_val, msg)
|
|
483
483
|
for i, field in enumerate(reg.fields):
|
|
484
484
|
s += self.await_stable(signal_field[i], reg.pulse_cycles, msg)
|
|
485
485
|
for i, field in enumerate(reg.fields):
|
|
486
|
-
sig_val = self.sig_value("0", field.sig_type, field.
|
|
486
|
+
sig_val = self.sig_value("0", field.sig_type, field.width)
|
|
487
487
|
s += self.check_value(signal_field[i], sig_val, msg)
|
|
488
488
|
for i, field in enumerate(reg.fields):
|
|
489
|
-
sig_val = self.sig_value(field.reset, field.sig_type, field.
|
|
489
|
+
sig_val = self.sig_value(field.reset, field.sig_type, field.width)
|
|
490
490
|
s += self.await_value(signal_field[i], sig_val, msg)
|
|
491
491
|
|
|
492
492
|
else:
|
|
@@ -495,12 +495,12 @@ class Testbench(object):
|
|
|
495
495
|
return s
|
|
496
496
|
|
|
497
497
|
def set_check_zero_pulse(self, signal, reg, msg):
|
|
498
|
-
sig_val = self.sig_value("0", reg.sig_type, reg.
|
|
498
|
+
sig_val = self.sig_value("0", reg.sig_type, reg.width)
|
|
499
499
|
s = self.check_value(signal, sig_val, msg)
|
|
500
500
|
s += self.await_stable(signal, reg.pulse_cycles, msg)
|
|
501
501
|
s += self.check_value(signal, sig_val, msg)
|
|
502
502
|
s += self.await_value(
|
|
503
|
-
signal, self.sig_value(reg.reset, reg.sig_type, reg.
|
|
503
|
+
signal, self.sig_value(reg.reset, reg.sig_type, reg.width), msg
|
|
504
504
|
)
|
|
505
505
|
return s
|
|
506
506
|
|
|
@@ -591,18 +591,18 @@ class Testbench(object):
|
|
|
591
591
|
return s
|
|
592
592
|
|
|
593
593
|
def check_bit_ro_slv(self, c_addr, signal, reg, msg, offset=0):
|
|
594
|
-
s = "for i in 0 to {} loop\n".format(reg.
|
|
594
|
+
s = "for i in 0 to {} loop\n".format(reg.width - 1)
|
|
595
595
|
if offset > 0:
|
|
596
596
|
offset = "+{}".format(offset)
|
|
597
597
|
else:
|
|
598
598
|
offset = ""
|
|
599
|
-
sig_val = "std_logic_vector(to_unsigned(1, {}) sll i)".format(reg.
|
|
599
|
+
sig_val = "std_logic_vector(to_unsigned(1, {}) sll i)".format(reg.width)
|
|
600
600
|
bus_val = "std_logic_vector(to_unsigned(1, data_width) sll i{})".format(offset)
|
|
601
601
|
par = "{} <= {};\n".format(signal, sig_val)
|
|
602
602
|
par += self.await_value(signal, sig_val, msg)
|
|
603
603
|
par += self.bus.uvvm_check(c_addr, bus_val, msg)
|
|
604
604
|
par += "-- Return to zero\n"
|
|
605
|
-
sig_val = self.sig_value("0", "slv", reg.
|
|
605
|
+
sig_val = self.sig_value("0", "slv", reg.width)
|
|
606
606
|
bus_val = self.sig_value("0", "default")
|
|
607
607
|
par += "{} <= {};\n".format(signal, sig_val)
|
|
608
608
|
par += self.await_value(signal, sig_val, msg)
|
|
@@ -612,18 +612,18 @@ class Testbench(object):
|
|
|
612
612
|
return s
|
|
613
613
|
|
|
614
614
|
def check_bit_rw_slv(self, c_addr, signal, reg, msg, offset=0):
|
|
615
|
-
s = "for i in 0 to {} loop\n".format(reg.
|
|
615
|
+
s = "for i in 0 to {} loop\n".format(reg.width - 1)
|
|
616
616
|
if offset > 0:
|
|
617
617
|
offset = "+{}".format(offset)
|
|
618
618
|
else:
|
|
619
619
|
offset = ""
|
|
620
|
-
sig_val = "std_logic_vector(to_unsigned(1, {}) sll i)".format(reg.
|
|
620
|
+
sig_val = "std_logic_vector(to_unsigned(1, {}) sll i)".format(reg.width)
|
|
621
621
|
bus_val = "std_logic_vector(to_unsigned(1, data_width) sll i{})".format(offset)
|
|
622
622
|
par = self.bus.uvvm_write(c_addr, bus_val, msg)
|
|
623
623
|
par += self.check_value(signal, sig_val, msg)
|
|
624
624
|
par += self.bus.uvvm_check(c_addr, bus_val, msg)
|
|
625
625
|
par += "-- Return to zero\n"
|
|
626
|
-
sig_val = self.sig_value("0", "slv", reg.
|
|
626
|
+
sig_val = self.sig_value("0", "slv", reg.width)
|
|
627
627
|
bus_val = self.sig_value("0", "default")
|
|
628
628
|
par += self.bus.uvvm_write(c_addr, bus_val, msg)
|
|
629
629
|
par += self.check_value(signal, sig_val, msg)
|
|
@@ -636,18 +636,18 @@ class Testbench(object):
|
|
|
636
636
|
if clk_cycles is None:
|
|
637
637
|
clk_cycles = reg.pulse_cycles
|
|
638
638
|
reset = reg.reset
|
|
639
|
-
s = "for i in 0 to {} loop\n".format(reg.
|
|
639
|
+
s = "for i in 0 to {} loop\n".format(reg.width - 1)
|
|
640
640
|
if offset > 0:
|
|
641
641
|
offset = "+{}".format(offset)
|
|
642
642
|
else:
|
|
643
643
|
offset = ""
|
|
644
|
-
sig_val = "std_logic_vector(to_unsigned(1, {}) sll i)".format(reg.
|
|
644
|
+
sig_val = "std_logic_vector(to_unsigned(1, {}) sll i)".format(reg.width)
|
|
645
645
|
bus_val = "std_logic_vector(to_unsigned(1, data_width) sll i{})".format(offset)
|
|
646
646
|
par = self.bus.uvvm_write(c_addr, bus_val, msg)
|
|
647
647
|
par += self.check_value(signal, sig_val, msg)
|
|
648
648
|
par += self.await_stable(signal, clk_cycles, msg)
|
|
649
649
|
par += self.check_value(signal, sig_val, msg)
|
|
650
|
-
sig_val = self.sig_value(reset, reg.sig_type, reg.
|
|
650
|
+
sig_val = self.sig_value(reset, reg.sig_type, reg.width)
|
|
651
651
|
par += self.await_value(signal, sig_val, msg)
|
|
652
652
|
s += indent_string(par)
|
|
653
653
|
s += "end loop;\n"
|
|
@@ -699,7 +699,7 @@ class Testbench(object):
|
|
|
699
699
|
if reg.sig_type == "sl":
|
|
700
700
|
reg_type = "std_logic"
|
|
701
701
|
elif reg.sig_type in ["slv", "default"]:
|
|
702
|
-
reg_type = "{} bit std_logic_vector".format(reg.
|
|
702
|
+
reg_type = "{} bit std_logic_vector".format(reg.width)
|
|
703
703
|
elif reg.sig_type == "fields":
|
|
704
704
|
reg_type = "fields"
|
|
705
705
|
par = "Checking Register {} - {} {}".format(
|
bust-0.13.2/bust/_version.py
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
__VERSION__ = "0.13.2"
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|