Skip to content

Address Information

Address Information.

Access can be done to addrspaces, words, fields and addresses in a single, burst or scatter flavour using offsets, masks, etc. create takes all these variants into account and serves a normalized information set as AddrInfo.

Classes:

Name Description
AddrInfo

Address Info.

AddrInfo

Bases: Object

Address Info.

Methods:

Name Description
create

Create AddrInfo.

iter

Iteratate over address ranges.

create staticmethod

create(addrmap, item, offset=None, mask=None)

Create AddrInfo.

Parameters:

Name Type Description Default
addrmap AddrMap

Address Map

required
item ToAddrMapRef

Thing to be resolved

required

Other Parameters:

Name Type Description
offset int | None

address offset in bytes

mask int | None

Value Mask (not allowed for fields)

Example Address Map:

>>> import ucdp as u
>>> from ucdp_addr import Addrspace, Word, Field, AddrMap
>>> addrmap = AddrMap()
>>> for idx, aname in enumerate(("uart", "spi", "owi")):
...     addrspace = Addrspace(name=aname, width=32, depth=8, baseaddr=8*4*idx)
...     addrmap.add(addrspace)
...     word = addrspace.add_word("ctrl")
...     field = word.add_field("ena", u.BitType(), "RW")
...     word = addrspace.add_word("stat")
...     field = word.add_field("bsy", u.BitType(), "RO", offset=9)

Addrspace:

>>> addrinfo = AddrInfo.create(addrmap, "spi")
>>> str(addrinfo)
'spi [0x20 8x32 (32 bytes)]'
>>> addrinfo.ref
AddrMapRef(..., addrspace=Addrspace(name='spi', baseaddr=Hex('0x20'), size=Bytesize('32 bytes')))
>>> addrinfo.mask
>>> tuple(addrinfo.iter())
(Hex('0x20'), Hex('0x24'), Hex('0x28'), Hex('0x2C'), Hex('0x30'), Hex('0x34'), Hex('0x38'), Hex('0x3C'))

>>> addrinfo = AddrInfo.create(addrmap, "spi", offset=8, mask=0xF0)
>>> str(addrinfo)
'spi [0x28 6x32 (24 bytes)] mask=0xF0'
>>> addrinfo.mask
Hex('0xF0')
>>> tuple(addrinfo.iter())
(Hex('0x28'), Hex('0x2C'), Hex('0x30'), Hex('0x34'), Hex('0x38'), Hex('0x3C'))

Word:

>>> addrinfo = AddrInfo.create(addrmap, "spi.stat")
>>> str(addrinfo)
'spi.stat [0x24 1x32 (4 bytes)]'
>>> addrinfo.ref
AddrMapRef(..., addrspace=Addrspace(name='spi', baseaddr=Hex('0x20'), ..., word=Word(name='stat', ...)
>>> addrinfo.mask
>>> tuple(addrinfo.iter())
(Hex('0x24'),)

>>> AddrInfo.create(addrmap, "spi.stat", offset=8)
Traceback (most recent call last):
  ...
ValueError: 'offset' is not allowed for words and fields

Field:

>>> addrinfo = AddrInfo.create(addrmap, "spi.stat.bsy")
>>> str(addrinfo)
'spi.stat.bsy [0x24 1x32 (4 bytes)] mask=0x200'
>>> addrinfo.ref
AddrMapRef(...Hex('0x20'), ... word=Word(name='stat', ...(name='bsy', type_=BitType(), bus=RO, offset=9))
>>> addrinfo.mask
Hex('0x200')
>>> tuple(addrinfo.iter())
(Hex('0x24'),)

>>> AddrInfo.create(addrmap, "spi.stat.bsy", offset=8)
Traceback (most recent call last):
  ...
ValueError: 'offset' is not allowed for words and fields
>>> AddrInfo.create(addrmap, "spi.stat.bsy", mask=8)
Traceback (most recent call last):
  ...
ValueError: 'mask' is not allowed for fields

iter

iter()

Iteratate over address ranges.