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.
Files changed (32) hide show
  1. {bust-0.13.2 → bust-0.14.0.dev0}/PKG-INFO +1 -1
  2. bust-0.14.0.dev0/bust/_version.py +1 -0
  3. {bust-0.13.2 → bust-0.14.0.dev0}/bust/bus_vhdl_gen.py +4 -4
  4. {bust-0.13.2 → bust-0.14.0.dev0}/bust/documentation.py +10 -10
  5. {bust-0.13.2 → bust-0.14.0.dev0}/bust/editor.py +23 -23
  6. {bust-0.13.2 → bust-0.14.0.dev0}/bust/exceptions.py +5 -5
  7. {bust-0.13.2 → bust-0.14.0.dev0}/bust/field.py +7 -7
  8. {bust-0.13.2 → bust-0.14.0.dev0}/bust/header.py +18 -22
  9. {bust-0.13.2 → bust-0.14.0.dev0}/bust/module.py +1 -1
  10. {bust-0.13.2 → bust-0.14.0.dev0}/bust/module_vhdl_gen.py +10 -10
  11. {bust-0.13.2 → bust-0.14.0.dev0}/bust/register.py +30 -30
  12. {bust-0.13.2 → bust-0.14.0.dev0}/bust/testbench.py +22 -22
  13. {bust-0.13.2 → bust-0.14.0.dev0}/bust.egg-info/PKG-INFO +1 -1
  14. {bust-0.13.2 → bust-0.14.0.dev0}/setup.py +1 -1
  15. {bust-0.13.2 → bust-0.14.0.dev0}/tests/test_suite.py +1 -1
  16. bust-0.13.2/bust/_version.py +0 -1
  17. {bust-0.13.2 → bust-0.14.0.dev0}/LICENSE +0 -0
  18. {bust-0.13.2 → bust-0.14.0.dev0}/README.md +0 -0
  19. {bust-0.13.2 → bust-0.14.0.dev0}/bust/__init__.py +0 -0
  20. {bust-0.13.2 → bust-0.14.0.dev0}/bust/__main__.py +0 -0
  21. {bust-0.13.2 → bust-0.14.0.dev0}/bust/bus.py +0 -0
  22. {bust-0.13.2 → bust-0.14.0.dev0}/bust/generation.py +0 -0
  23. {bust-0.13.2 → bust-0.14.0.dev0}/bust/settings.py +0 -0
  24. {bust-0.13.2 → bust-0.14.0.dev0}/bust/utils.py +0 -0
  25. {bust-0.13.2 → bust-0.14.0.dev0}/bust/vhdl.py +0 -0
  26. {bust-0.13.2 → bust-0.14.0.dev0}/bust.egg-info/SOURCES.txt +0 -0
  27. {bust-0.13.2 → bust-0.14.0.dev0}/bust.egg-info/dependency_links.txt +0 -0
  28. {bust-0.13.2 → bust-0.14.0.dev0}/bust.egg-info/entry_points.txt +0 -0
  29. {bust-0.13.2 → bust-0.14.0.dev0}/bust.egg-info/requires.txt +0 -0
  30. {bust-0.13.2 → bust-0.14.0.dev0}/bust.egg-info/top_level.txt +0 -0
  31. {bust-0.13.2 → bust-0.14.0.dev0}/setup.cfg +0 -0
  32. {bust-0.13.2 → bust-0.14.0.dev0}/tests/__init__.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: bust
3
- Version: 0.13.2
3
+ Version: 0.14.0.dev0
4
4
  Summary: Utility for simply creating and modifying VHDL bus slave modules
5
5
  Home-page: http://github.com/olagrottvik/bust
6
6
  Author: Ola Groettvik
@@ -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.length - 1) + " downto 0);\n"
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.length - 1) + " downto 0) <= "
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.length - 1) + " downto 0);\n"
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.length - 1) + " downto 0) <= "
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.length) + " & "
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.length < self.module.data_width:
75
+ if reg.width < self.module.data_width:
76
76
  p = r"\regfield{unused}{"
77
- p += str(self.module.data_width - reg.length) + "}{"
78
- p += str(reg.length) + "}{-}\n"
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.length) + "}{0}{"
84
- if reg.length < 2:
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.length) + "}{"
95
+ p += str(field.width) + "}{"
96
96
  p += str(field.pos_low) + "}{"
97
- if field.length < 2:
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 length
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{Length} &
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
- "Length",
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.length,
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
- "Length",
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.length,
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["length"] = get_int(
217
- "Field length: ",
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["length"]
227
+ width_consumed += field_dic["width"]
228
228
 
229
229
  else:
230
230
  width_consumed += 1
231
- field_dic["length"] = 1
231
+ field_dic["width"] = 1
232
232
 
233
- max_reset = 2 ** field_dic["length"] - 1
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 length is set to help calculate max reset later
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["length"] = self.mod.data_width
278
+ reg["width"] = self.mod.data_width
279
279
  elif reg["type"] == "sl":
280
- reg["length"] = 1
280
+ reg["width"] = 1
281
281
  elif reg["type"] == "slv":
282
282
  while True:
283
283
  try:
284
- reg["length"] = int(input("Length: "))
284
+ reg["width"] = int(input("Width: "))
285
285
  break
286
286
  except Exception:
287
- print("That is not a valid length...")
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["length"] - 1
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
- "Length",
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
- table_length = "auto"
368
- elif "length" in reg:
369
- table_length = reg["length"]
367
+ table_width = "auto"
368
+ elif "width" in reg:
369
+ table_width = reg["width"]
370
370
  else:
371
- table_length = self.mod.bus.data_width
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
- table_length,
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
- "Length",
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["length"],
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, reglength, mod_data_length):
61
- msg = "Register length exceeded module data length by "
62
- msg += str(reglength - mod_data_length)
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 length: " + str(mod_data_length) + "\n"
65
- msg += "Register length: " + str(reglength)
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, length, reset, description, pos_low):
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.length = length
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 + length - 1
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.length) - 1 << self.pos_low
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["length"] = self.length
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.length,
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["length"] = self.length
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
- "#define "
22
- + reg.name.upper()
23
- + "_OFFSET "
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.length) + "\n"
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.length) - 1 << field.pos_low)) + "\n"
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 " + reg.name.upper() + "_RESET = " + reg.reset + ";\n"
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.length) + ";\n"
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.length) - 1 << field.pos_low)) + ";\n"
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() + "_OFFSET = " + str(hex(reg.address)) + "\n", 2
144
+ f"{reg.name.upper()}_OFFSET = {str(hex(reg.address))}\n", 2
149
145
  )
150
- s += indent_string(reg.name.upper() + "_RESET = " + reg.reset + "\n", 2)
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.length) + "\n"
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.length) - 1 << field.pos_low))
167
+ s += str(hex(pow(2, field.width) - 1 << field.pos_low))
172
168
  s += "\n"
173
169
 
174
170
  return s
@@ -216,7 +216,7 @@ class Module:
216
216
  and reg.sig_type != "fields"
217
217
  and reg.sig_type != "sl"
218
218
  ):
219
- reg_dic["length"] = reg.length
219
+ reg_dic["width"] = reg.width
220
220
 
221
221
  if reg.sig_type != "fields":
222
222
  reg_dic["reset"] = reg.reset
@@ -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.length == self.data_width
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.length - 1) + " downto 0);\n"
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.length - 1)
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.length == self.data_width
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.length - 1) + " downto 0);\n"
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.length) + 'X"'
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.length == self.data_width
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.length - 1) + " downto 0);\n"
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.length) + 'X"'
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.length - 1)
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, mod_data_length):
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.length = 0
42
+ self.width = 0
43
43
  self.fields = []
44
44
 
45
- if "length" in reg:
46
- tmp_length = reg["length"]
45
+ if "width" in reg:
46
+ tmp_width = reg["width"]
47
47
  else:
48
- tmp_length = 1 # Setting to 1, in case std_logic
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 length
55
+ # Assign the reg type and register data width
56
56
  if self.sig_type == "default":
57
- self.length = mod_data_length
57
+ self.width = mod_data_width
58
58
 
59
59
  elif self.sig_type == "slv":
60
- self.length = tmp_length
60
+ self.width = tmp_width
61
61
 
62
62
  elif self.sig_type == "sl":
63
63
  self.sig_type = "sl"
64
64
 
65
- if tmp_length != 1:
66
- raise UndefinedRegisterType("SL cannot have length other than 1")
67
- self.length = tmp_length
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 length
87
- # maxvalue is given by 2^length
88
- maxvalue = (2**self.length) - 1
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.check_register_data_length(mod_data_length)
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 += "Length: " + str(self.length) + "\n"
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
- + " Length: "
116
- + str(i["length"])
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 "length" not in field:
137
+ if "width" not in field:
138
138
  raise InvalidFieldFormat(self.name)
139
- length = field["length"]
139
+ width = field["width"]
140
140
 
141
141
  elif field["type"] == "sl":
142
- length = 1
142
+ width = 1
143
143
 
144
144
  else:
145
145
  raise UndefinedFieldType(field["type"])
146
146
 
147
- # Increment register length
148
- self.length += length
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 length
153
- # maxvalue is given by 2^length
154
- maxvalue = (2**length) - 1
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"], length, reset, description, next_low)
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 check_register_data_length(self, module):
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.length > module:
187
- raise ModuleDataBitsExceeded(self.name, self.length, module)
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.length), msg
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.length),
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.length)
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.length)
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.length),
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.length)
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.length)
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.length)
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.length)
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.length)
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.length)
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.length), msg
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.length - 1)
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.length)
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.length)
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.length - 1)
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.length)
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.length)
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.length - 1)
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.length)
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.length)
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.length)
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(
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: bust
3
- Version: 0.13.2
3
+ Version: 0.14.0.dev0
4
4
  Summary: Utility for simply creating and modifying VHDL bus slave modules
5
5
  Home-page: http://github.com/olagrottvik/bust
6
6
  Author: Ola Groettvik
@@ -26,7 +26,7 @@ class clean(Command):
26
26
 
27
27
  setup(
28
28
  name="bust",
29
- version="0.13.2",
29
+ version="0.14.0-dev",
30
30
  packages=find_packages(),
31
31
  license="MIT",
32
32
  install_requires=[
@@ -218,7 +218,7 @@ class Test_Suite(unittest.TestCase):
218
218
  ) as f:
219
219
  string = f.read()
220
220
  self.assertEqual(
221
- holder.doc.return_tex_documentation("0.9.4"),
221
+ holder.doc.return_tex_documentation("0.14.0-dev"),
222
222
  string,
223
223
  "doc must match manual file",
224
224
  )
@@ -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