MatchLib
Public Types | Public Member Functions | Public Attributes | Static Public Attributes | List of all members
AxiArbiter< axiCfg, numMasters, maxOutstandingRequests > Class Template Reference

An n-way arbiter that connects multiple AXI master ports to a single AXI slave port. More...

#include <AxiArbiter.h>

Inheritance diagram for AxiArbiter< axiCfg, numMasters, maxOutstandingRequests >:

Public Types

typedef axi::axi4< axiCfg > axi_
 
typedef axi_::read::template slave::ARPort axi_rd_slave_ar
 
typedef axi_::read::template slave::RPort axi_rd_slave_r
 
typedef axi_::write::template slave::AWPort axi_wr_slave_aw
 
typedef axi_::write::template slave::WPort axi_wr_slave_w
 
typedef axi_::write::template slave::BPort axi_wr_slave_b
 

Public Member Functions

typedef NVUINTW (numMasters_width) inFlight_t
 
 SC_HAS_PROCESS (AxiArbiter)
 
 AxiArbiter (sc_module_name name)
 
void run_ar ()
 
void run_r ()
 
void run_aw ()
 
void run_w ()
 
void run_b ()
 

Public Attributes

sc_in< bool > clk
 
sc_in< bool > reset_bar
 
nvhls::nv_array< axi_rd_slave_ar, numMasters > axi_rd_m_ar
 
nvhls::nv_array< axi_rd_slave_r, numMasters > axi_rd_m_r
 
nvhls::nv_array< axi_wr_slave_aw, numMasters > axi_wr_m_aw
 
nvhls::nv_array< axi_wr_slave_w, numMasters > axi_wr_m_w
 
nvhls::nv_array< axi_wr_slave_b, numMasters > axi_wr_m_b
 
axi_::read::template master axi_rd_s
 
axi_::write::template master axi_wr_s
 
FIFO< inFlight_t, maxOutstandingRequests > readQ
 
Connections::Combinational< inFlight_t > read_in_flight
 
FIFO< inFlight_t, maxOutstandingRequests > writeQ
 
Connections::Combinational< inFlight_t > write_in_flight
 
Connections::Combinational< inFlight_t > active_write_master
 
Connections::Combinational< NVUINT1 > w_last
 

Static Public Attributes

static const int kDebugLevel = 5
 
static const int numMasters_width = nvhls::log2_ceil<numMasters>::val
 

Detailed Description

template<typename axiCfg, int numMasters, int maxOutstandingRequests>
class AxiArbiter< axiCfg, numMasters, maxOutstandingRequests >

An n-way arbiter that connects multiple AXI master ports to a single AXI slave port.

Template Parameters
axiCfgA valid AXI config.
numMastersThe number of masters to arbitrate between.
maxOutstandingRequestsThe number of oustanding read or write requests that can be tracked with internal state.
Overview
AxiArbiter connects one or more AXI masters to a single AXI slave. In the case of contention, a round-robin Arbiter selects the next request to pass through.
  • The arbiter assumes that responses are returned in the order that requests are sent. Downstream request reordering is currently not supported.
  • The AXI configs of all ports must be the same.
Usage Guidelines

This module sets the stall mode to flush by default to mitigate possible RTL bugs that can occur in the default stall mode. If you are confident that this class of bugs will not occur in your use case, you can change the stall mode via TCL directive:

directive set /path/to/AxiArbiter/run_ar/while -PIPELINE_STALL_MODE stall

This may reduce area/power.

Definition at line 58 of file AxiArbiter.h.


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