CIRCT 24.0.0git
Loading...
Searching...
No Matches
Public Member Functions | Static Public Member Functions | Static Public Attributes | List of all members
esiaccel.bsp.common.ChannelMMIO Class Reference
Inheritance diagram for esiaccel.bsp.common.ChannelMMIO:
Inheritance graph
[legend]
Collaboration diagram for esiaccel.bsp.common.ChannelMMIO:
Collaboration graph
[legend]

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)
  - 0x12: ESI version number (0)
  - 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 586 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 700 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 645 of file common.py.

◆ generate()

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

Definition at line 639 of file common.py.

Member Data Documentation

◆ clk

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

Definition at line 622 of file common.py.

Referenced by esiaccel.bsp.common.ESI_Manifest_ROM_Wrapper.build().

◆ cmd

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

Definition at line 625 of file common.py.

◆ DefaultRegionSpace

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

Definition at line 633 of file common.py.

◆ initial_offset

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

Definition at line 636 of file common.py.

◆ reset_request

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

Definition at line 629 of file common.py.

◆ rst

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

Definition at line 623 of file common.py.


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