CIRCT 24.0.0git
Loading...
Searching...
No Matches
esiaccel.bsp.common.ChannelMMIO Class Reference
Inheritance diagram for esiaccel.bsp.common.ChannelMMIO:
Collaboration diagram for esiaccel.bsp.common.ChannelMMIO:

Public Member Functions

 generate (ports, esi._ServiceGeneratorBundles bundles)

Static Public Member Functions

Tuple[Dict[int, Tuple[Optional[int], AssignableSignal]], int] build_table (bundles)
 build_read (ports, int manifest_loc, Dict[int, Tuple[Optional[int], AssignableSignal]] table)

Static Public Attributes

 clk = Clock()
 rst = Input(Bits(1))
 cmd = Input(esi.MMIO.read_write.type)
 reset_request = Output(Bits(1))
int DefaultRegionSpace = 0x100
int initial_offset = DefaultRegionSpace

Detailed Description

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 one outstanding request at a time. This is enforced in hardware
by a `MaxOutstandingLimiter` on the command channel, which stalls incoming
commands until the previous response has been consumed. If a client fails to
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)
  - 0x10: ESI version number (1)
  - 0x18: Location of the manifest ROM (absolute address)

  - 0x100: Start of MMIO space for requests. Mapping is contained in the
           manifest so can be dynamically queried.

  - Directly above the last client allocation (rounded up to a power of two):
    Start of the manifest ROM. It matches any address with a bit set above
    the client space, so it is never truncated by its window.
  - 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.

Definition at line 587 of file common.py.

Member Function Documentation

◆ build_read()

esiaccel.bsp.common.ChannelMMIO.build_read ( ports,
int manifest_loc,
Dict[int, Tuple[Optional[int], AssignableSignal]] table )
static
Builds the read side of the MMIO service.

Definition at line 701 of file common.py.

References esiaccel.bsp.common.HeaderMMIO(), and esiaccel.bsp.common.MMIOPrefixRouter().

◆ build_table()

Tuple[Dict[int, Tuple[Optional[int], AssignableSignal]], int] esiaccel.bsp.common.ChannelMMIO.build_table ( bundles)
static
Build a table of read and write addresses to BundleSignals.

Definition at line 646 of file common.py.

◆ generate()

esiaccel.bsp.common.ChannelMMIO.generate ( ports,
esi._ServiceGeneratorBundles bundles )

Definition at line 640 of file common.py.

Member Data Documentation

◆ clk

esiaccel.bsp.common.ChannelMMIO.clk = Clock()
static

Definition at line 623 of file common.py.

◆ cmd

esiaccel.bsp.common.ChannelMMIO.cmd = Input(esi.MMIO.read_write.type)
static

Definition at line 626 of file common.py.

◆ DefaultRegionSpace

int esiaccel.bsp.common.ChannelMMIO.DefaultRegionSpace = 0x100
static

Definition at line 634 of file common.py.

◆ initial_offset

int esiaccel.bsp.common.ChannelMMIO.initial_offset = DefaultRegionSpace
static

Definition at line 637 of file common.py.

◆ reset_request

esiaccel.bsp.common.ChannelMMIO.reset_request = Output(Bits(1))
static

Definition at line 630 of file common.py.

◆ rst

esiaccel.bsp.common.ChannelMMIO.rst = Input(Bits(1))
static

Definition at line 624 of file common.py.


The documentation for this class was generated from the following file: