Skip to content

Commit d8f5c4c

Browse files
committed
csr.bus: drop CSR prefix from class names.
Application code should use Python imports similar to: from nmigen_soc import csr ... decoder = csr.Decoder(...) thus achieving the same effect with less namespace pollution.
1 parent 5520e0d commit d8f5c4c

File tree

3 files changed

+47
-46
lines changed

3 files changed

+47
-46
lines changed

nmigen_soc/csr/__init__.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
from .bus import *

nmigen_soc/csr/bus.py

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,10 @@
33
from nmigen import tracer
44

55

6-
__all__ = ["CSRElement", "CSRInterface", "CSRDecoder"]
6+
__all__ = ["Element", "Interface", "Decoder"]
77

88

9-
class CSRElement(Record):
9+
class Element(Record):
1010
"""Peripheral-side CSR interface.
1111
1212
A low-level interface to a single atomically readable and writable register in a peripheral.
@@ -57,7 +57,7 @@ def __init__(self, width, access, *, name=None, src_loc_at=0):
5757
super().__init__(layout, name=name, src_loc_at=1)
5858

5959

60-
class CSRInterface(Record):
60+
class Interface(Record):
6161
"""CPU-side CSR interface.
6262
6363
A low-level interface to a set of atomically readable and writable peripheral CSR registers.
@@ -123,7 +123,7 @@ def __init__(self, *, addr_width, data_width, name=None):
123123
], name=name, src_loc_at=1)
124124

125125

126-
class CSRDecoder(Elaboratable):
126+
class Decoder(Elaboratable):
127127
"""CSR bus decoder.
128128
129129
An address-based multiplexer for CSR registers implementing atomic updates.
@@ -159,20 +159,20 @@ class CSRDecoder(Elaboratable):
159159
Parameters
160160
----------
161161
addr_width : int
162-
Address width. See :class:`CSRInterface`.
162+
Address width. See :class:`Interface`.
163163
data_width : int
164-
Data width. See :class:`CSRInterface`.
164+
Data width. See :class:`Interface`.
165165
alignment : int
166166
Register alignment. The address assigned to each register will be a multiple of
167167
``2 ** alignment``.
168168
169169
Attributes
170170
----------
171-
bus : :class:`CSRInterface`
171+
bus : :class:`Interface`
172172
CSR bus providing access to registers.
173173
"""
174174
def __init__(self, *, addr_width, data_width, alignment=0):
175-
self.bus = CSRInterface(addr_width=addr_width, data_width=data_width)
175+
self.bus = Interface(addr_width=addr_width, data_width=data_width)
176176

177177
if not isinstance(alignment, int) or alignment < 0:
178178
raise ValueError("Alignment must be a non-negative integer, not {!r}"
@@ -187,7 +187,7 @@ def add(self, element):
187187
188188
Arguments
189189
---------
190-
element : CSRElement
190+
element : :class:`Element`
191191
Interface of the register.
192192
193193
Return value
@@ -196,8 +196,8 @@ def add(self, element):
196196
the register, and ``size`` is the amount of chunks it takes, which may be greater than
197197
``element.size // self.data_width`` due to alignment.
198198
"""
199-
if not isinstance(element, CSRElement):
200-
raise TypeError("Element must be an instance of CSRElement, not {!r}"
199+
if not isinstance(element, Element):
200+
raise TypeError("Element must be an instance of csr.Element, not {!r}"
201201
.format(element))
202202

203203
addr = self.align_to(self.alignment)

nmigen_soc/test/test_csr_bus.py

Lines changed: 35 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,9 @@
66
from ..csr.bus import *
77

88

9-
class CSRElementTestCase(unittest.TestCase):
9+
class ElementTestCase(unittest.TestCase):
1010
def test_layout_1_ro(self):
11-
elem = CSRElement(1, "r")
11+
elem = Element(1, "r")
1212
self.assertEqual(elem.width, 1)
1313
self.assertEqual(elem.access, "r")
1414
self.assertEqual(elem.layout, Layout.cast([
@@ -17,7 +17,7 @@ def test_layout_1_ro(self):
1717
]))
1818

1919
def test_layout_8_rw(self):
20-
elem = CSRElement(8, access="rw")
20+
elem = Element(8, access="rw")
2121
self.assertEqual(elem.width, 8)
2222
self.assertEqual(elem.access, "rw")
2323
self.assertEqual(elem.layout, Layout.cast([
@@ -28,7 +28,7 @@ def test_layout_8_rw(self):
2828
]))
2929

3030
def test_layout_10_wo(self):
31-
elem = CSRElement(10, "w")
31+
elem = Element(10, "w")
3232
self.assertEqual(elem.width, 10)
3333
self.assertEqual(elem.access, "w")
3434
self.assertEqual(elem.layout, Layout.cast([
@@ -37,7 +37,7 @@ def test_layout_10_wo(self):
3737
]))
3838

3939
def test_layout_0_rw(self): # degenerate but legal case
40-
elem = CSRElement(0, access="rw")
40+
elem = Element(0, access="rw")
4141
self.assertEqual(elem.width, 0)
4242
self.assertEqual(elem.access, "rw")
4343
self.assertEqual(elem.layout, Layout.cast([
@@ -50,17 +50,17 @@ def test_layout_0_rw(self): # degenerate but legal case
5050
def test_width_wrong(self):
5151
with self.assertRaisesRegex(ValueError,
5252
r"Width must be a non-negative integer, not -1"):
53-
CSRElement(-1, "rw")
53+
Element(-1, "rw")
5454

5555
def test_access_wrong(self):
5656
with self.assertRaisesRegex(ValueError,
5757
r"Access mode must be one of \"r\", \"w\", or \"rw\", not 'wo'"):
58-
CSRElement(1, "wo")
58+
Element(1, "wo")
5959

6060

61-
class CSRInterfaceTestCase(unittest.TestCase):
61+
class InterfaceTestCase(unittest.TestCase):
6262
def test_layout(self):
63-
iface = CSRInterface(addr_width=12, data_width=8)
63+
iface = Interface(addr_width=12, data_width=8)
6464
self.assertEqual(iface.addr_width, 12)
6565
self.assertEqual(iface.data_width, 8)
6666
self.assertEqual(iface.layout, Layout.cast([
@@ -74,68 +74,68 @@ def test_layout(self):
7474
def test_addr_width_wrong(self):
7575
with self.assertRaisesRegex(ValueError,
7676
r"Address width must be a positive integer, not -1"):
77-
CSRInterface(addr_width=-1, data_width=8)
77+
Interface(addr_width=-1, data_width=8)
7878

7979
def test_data_width_wrong(self):
8080
with self.assertRaisesRegex(ValueError,
8181
r"Data width must be a positive integer, not -1"):
82-
CSRInterface(addr_width=16, data_width=-1)
82+
Interface(addr_width=16, data_width=-1)
8383

8484

85-
class CSRDecoderTestCase(unittest.TestCase):
85+
class DecoderTestCase(unittest.TestCase):
8686
def setUp(self):
87-
self.dut = CSRDecoder(addr_width=16, data_width=8)
87+
self.dut = Decoder(addr_width=16, data_width=8)
8888

8989
def test_alignment_wrong(self):
9090
with self.assertRaisesRegex(ValueError,
9191
r"Alignment must be a non-negative integer, not -1"):
92-
CSRDecoder(addr_width=16, data_width=8, alignment=-1)
92+
Decoder(addr_width=16, data_width=8, alignment=-1)
9393

9494
def test_attrs(self):
9595
self.assertEqual(self.dut.alignment, 0)
9696

9797
def test_add_4b(self):
98-
self.assertEqual(self.dut.add(CSRElement(4, "rw")),
98+
self.assertEqual(self.dut.add(Element(4, "rw")),
9999
(0, 1))
100100

101101
def test_add_8b(self):
102-
self.assertEqual(self.dut.add(CSRElement(8, "rw")),
102+
self.assertEqual(self.dut.add(Element(8, "rw")),
103103
(0, 1))
104104

105105
def test_add_12b(self):
106-
self.assertEqual(self.dut.add(CSRElement(12, "rw")),
106+
self.assertEqual(self.dut.add(Element(12, "rw")),
107107
(0, 2))
108108

109109
def test_add_16b(self):
110-
self.assertEqual(self.dut.add(CSRElement(16, "rw")),
110+
self.assertEqual(self.dut.add(Element(16, "rw")),
111111
(0, 2))
112112

113113
def test_add_two(self):
114-
self.assertEqual(self.dut.add(CSRElement(16, "rw")),
114+
self.assertEqual(self.dut.add(Element(16, "rw")),
115115
(0, 2))
116-
self.assertEqual(self.dut.add(CSRElement(8, "rw")),
116+
self.assertEqual(self.dut.add(Element(8, "rw")),
117117
(2, 1))
118118

119119
def test_add_wrong(self):
120120
with self.assertRaisesRegex(ValueError,
121121
r"Width must be a non-negative integer, not -1"):
122-
CSRElement(-1, "rw")
122+
Element(-1, "rw")
123123

124124
def test_align_to(self):
125-
self.assertEqual(self.dut.add(CSRElement(8, "rw")),
125+
self.assertEqual(self.dut.add(Element(8, "rw")),
126126
(0, 1))
127127
self.assertEqual(self.dut.align_to(2), 4)
128-
self.assertEqual(self.dut.add(CSRElement(8, "rw")),
128+
self.assertEqual(self.dut.add(Element(8, "rw")),
129129
(4, 1))
130130

131131
def test_sim(self):
132132
bus = self.dut.bus
133133

134-
elem_4_r = CSRElement(4, "r")
134+
elem_4_r = Element(4, "r")
135135
self.dut.add(elem_4_r)
136-
elem_8_w = CSRElement(8, "w")
136+
elem_8_w = Element(8, "w")
137137
self.dut.add(elem_8_w)
138-
elem_16_rw = CSRElement(16, "rw")
138+
elem_16_rw = Element(16, "rw")
139139
self.dut.add(elem_16_rw)
140140

141141
def sim_test():
@@ -202,37 +202,37 @@ def sim_test():
202202
sim.run()
203203

204204

205-
class CSRDecoderAlignedTestCase(unittest.TestCase):
205+
class DecoderAlignedTestCase(unittest.TestCase):
206206
def setUp(self):
207-
self.dut = CSRDecoder(addr_width=16, data_width=8, alignment=2)
207+
self.dut = Decoder(addr_width=16, data_width=8, alignment=2)
208208

209209
def test_attrs(self):
210210
self.assertEqual(self.dut.alignment, 2)
211211

212212
def test_add_two(self):
213-
self.assertEqual(self.dut.add(CSRElement(8, "rw")),
213+
self.assertEqual(self.dut.add(Element(8, "rw")),
214214
(0, 4))
215-
self.assertEqual(self.dut.add(CSRElement(16, "rw")),
215+
self.assertEqual(self.dut.add(Element(16, "rw")),
216216
(4, 4))
217217

218218
def test_over_align_to(self):
219-
self.assertEqual(self.dut.add(CSRElement(8, "rw")),
219+
self.assertEqual(self.dut.add(Element(8, "rw")),
220220
(0, 4))
221221
self.assertEqual(self.dut.align_to(3), 8)
222-
self.assertEqual(self.dut.add(CSRElement(8, "rw")),
222+
self.assertEqual(self.dut.add(Element(8, "rw")),
223223
(8, 4))
224224

225225
def test_under_align_to(self):
226-
self.assertEqual(self.dut.add(CSRElement(8, "rw")),
226+
self.assertEqual(self.dut.add(Element(8, "rw")),
227227
(0, 4))
228228
self.assertEqual(self.dut.align_to(1), 4)
229-
self.assertEqual(self.dut.add(CSRElement(8, "rw")),
229+
self.assertEqual(self.dut.add(Element(8, "rw")),
230230
(4, 4))
231231

232232
def test_sim(self):
233233
bus = self.dut.bus
234234

235-
elem_20_rw = CSRElement(20, "rw")
235+
elem_20_rw = Element(20, "rw")
236236
self.dut.add(elem_20_rw)
237237

238238
def sim_test():

0 commit comments

Comments
 (0)