Memory Types
Memory Types.
Classes:
| Name | Description |
|---|---|
MemIoType |
Memory IO-Type. |
Functions:
| Name | Description |
|---|---|
calc_slicewidths |
Calculate slicewidths. |
Attributes:
| Name | Type | Description |
|---|---|---|
SliceWidths |
TypeAlias
|
Word Slice Widths. |
Addressing |
TypeAlias
|
Address Mode. |
MemIoType
Bases: AStructType
Memory IO-Type.
Attributes:
| Name | Type | Description |
|---|---|---|
datawidth |
int | Expr
|
Data Width in Bits |
addrwidth |
int | Expr
|
Address Width in Bits |
writable |
bool
|
Read-Only or Read/Writable Memory |
slicewidths |
SliceWidths | None
|
Word Slices for Modification, Sum MUST be identical to datawidth |
err |
bool
|
Report Access Error |
addressing |
Addressing
|
Addressing Mode |
ROM Example:
>>> from ucdp_glbl.mem import MemIoType
>>> iotype = MemIoType(datawidth=32, addrwidth=8, writable=False)
>>> iotype
MemIoType(datawidth=32, addrwidth=8, writable=False)
>>> for item in iotype.values(): print(item)
StructItem('ena', EnaType(), doc=Doc(title='Memory Access Enable'))
StructItem('addr', UintType(8), doc=Doc(title='Memory Address'))
StructItem('rdata', UintType(32), orientation=BWD, doc=Doc(title='Memory Read Data'))
RAM Example:
>>> from ucdp_glbl.mem import MemIoType
>>> iotype = MemIoType(datawidth=32, addrwidth=8, writable=True)
>>> iotype
MemIoType(datawidth=32, addrwidth=8, writable=True)
>>> for item in iotype.values(): print(item)
StructItem('ena', EnaType(), doc=Doc(title='Memory Access Enable'))
StructItem('addr', UintType(8), doc=Doc(title='Memory Address'))
StructItem('wena', EnaType(), doc=Doc(title='Memory Write Enable'))
StructItem('wdata', UintType(32), doc=Doc(title='Memory Write Data'))
StructItem('rdata', UintType(32), orientation=BWD, doc=Doc(title='Memory Read Data'))
RAM Example with Byte Access and error:
>>> from ucdp_glbl.mem import MemIoType
>>> iotype = MemIoType.with_slicewidth(datawidth=32, addrwidth=8, writable=True, slicewidth=8, err=True)
>>> iotype
MemIoType(datawidth=32, addrwidth=8, writable=True, slicewidths=(8, 8, 8, 8), err=True)
>>> for item in iotype.values(): print(item)
StructItem('ena', EnaType(), doc=Doc(title='Memory Access Enable'))
StructItem('addr', UintType(8), doc=Doc(title='Memory Address'))
StructItem('wena', EnaType(), doc=Doc(title='Memory Write Enable'))
StructItem('wdata', UintType(32), doc=Doc(title='Memory Write Data'))
StructItem('rdata', UintType(32), orientation=BWD, doc=Doc(title='Memory Read Data'))
StructItem('sel', UintType(4), doc=Doc(title='Slice Selects'))
StructItem('err', BitType(), orientation=BWD, doc=Doc(title='Memory Access Failed.'))
Non-Slicable:
>>> MemIoType.with_slicewidth(datawidth=31, addrwidth=8, writable=True, slicewidth=8)
Traceback (most recent call last):
...
ValueError: Cannot split 31 bits into slices of 8 bits
Methods:
| Name | Description |
|---|---|
with_slicewidth |
Create |
calc_slicewidths
Calculate slicewidths.
>>> calc_slicewidths(32) is None
True
>>> calc_slicewidths(32, slicewidth=8)
(8, 8, 8, 8)
>>> calc_slicewidths(32, slicewidth=5)
Traceback (most recent call last):
...
ValueError: Cannot split 32 bits into slices of 5 bits