CIRCT 23.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, 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)
 
int RegisterSpace = 0x400
 
int RegisterSpaceBits = RegisterSpace.bit_length() - 1
 
int AddressMask = 0x3FF
 
int initial_offset = RegisterSpace
 

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 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.

Definition at line 319 of file common.py.

Member Function Documentation

◆ build_addr_read()

Tuple[BitsSignal, ChannelSignal] esiaccel.bsp.common.ChannelMMIO.build_addr_read ( ChannelSignal  read_addr_chan,
int  num_clients,
int  manifest_loc 
)
static
Build a channel for the address read request. Returns the index to select
the client and a channel for the masked address to be passed to the
clients.

Definition at line 468 of file common.py.

References wrap().

◆ build_read()

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

Definition at line 404 of file common.py.

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

◆ build_table()

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

Definition at line 376 of file common.py.

◆ generate()

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

Definition at line 370 of file common.py.

Member Data Documentation

◆ AddressMask

int esiaccel.bsp.common.ChannelMMIO.AddressMask = 0x3FF
static

Definition at line 364 of file common.py.

◆ clk

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

Definition at line 349 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 352 of file common.py.

◆ initial_offset

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

Definition at line 367 of file common.py.

◆ RegisterSpace

int esiaccel.bsp.common.ChannelMMIO.RegisterSpace = 0x400
static

Definition at line 362 of file common.py.

◆ RegisterSpaceBits

int esiaccel.bsp.common.ChannelMMIO.RegisterSpaceBits = RegisterSpace.bit_length() - 1
static

Definition at line 363 of file common.py.

◆ rst

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

Definition at line 350 of file common.py.


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