|
CIRCT 23.0.0git
|


Public Member Functions | |
| generate (ports, esi._ServiceGeneratorBundles bundles) | |
Static Public Member Functions | |
| Tuple[Dict[int, AssignableSignal], int] | build_table (bundles) |
| build_read (ports, int manifest_loc, Dict[int, AssignableSignal] table) | |
| Tuple[BitsSignal, ChannelSignal] | build_addr_read (ChannelSignal read_addr_chan, int num_clients, int manifest_loc) |
Static Public Attributes | |
| clk = Clock() | |
| rst = Input(Bits(1)) | |
| cmd = Input(esi.MMIO.read_write.type) | |
| reset_request = Output(Bits(1)) | |
| int | RegisterSpace = 0x400 |
| int | RegisterSpaceBits = RegisterSpace.bit_length() - 1 |
| int | AddressMask = 0x3FF |
| int | initial_offset = RegisterSpace |
MMIO service implementation with MMIO bundle interfaces. Should be
relatively easy to adapt to physical interfaces by wrapping the wires to
channels then bundles. Allows the implementation to be shared and (hopefully)
platform independent.
Whether or not to support unaligned accesses is up to the clients. The header
and manifest do not support unaligned accesses and throw away the lower three
bits.
Only allows for one outstanding request at a time. If a client doesn't return
a response, the MMIO service will hang. TODO: add some kind of timeout.
Implementation-defined MMIO layout:
- 0x0: 0 constant
- 0x8: Magic number (0x207D98E5_E5100E51)
- 0x12: ESI version number (0)
- 0x18: Location of the manifest ROM (absolute address)
- 0x400: Start of MMIO space for requests. Mapping is contained in the
manifest so can be dynamically queried.
- addr(Manifest ROM) + 0: Size of compressed manifest
- addr(Manifest ROM) + 8: Start of compressed manifest
This layout _should_ be pretty standard, but different BSPs may have various
different restrictions. Any BSP which uses this service implementation will
have this layout, possibly with an offset or address window.
|
static |
|
static |
Builds the read side of the MMIO service.
Definition at line 511 of file common.py.
References esiaccel.bsp.common.ChannelDemuxTree_HalfStage_ReadyBlocking(), and esiaccel.bsp.common.HeaderMMIO().
|
static |
| esiaccel.bsp.common.ChannelMMIO.generate | ( | ports, | |
| esi._ServiceGeneratorBundles | bundles | ||
| ) |
|
static |
|
static |
Definition at line 452 of file common.py.
Referenced by esiaccel.bsp.common.ESI_Manifest_ROM_Wrapper.build().
|
static |
|
static |
|
static |
|
static |
|
static |
|
static |