MatchLib
All Classes Namespaces Files Functions Modules Pages
Public Types | Public Member Functions | Public Attributes | Static Public Attributes | List of all members
AxiArbiter< axiCfg, numManagers, maxOutstandingRequests > Class Template Reference

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

#include <AxiArbiter.h>

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

Public Types

typedef axi::axi4< axiCfg > axi_
 
typedef axi_::read::template subordinate ::ARPort axi_rd_subordinate_ar
 
typedef axi_::read::template subordinate ::RPort axi_rd_subordinate_r
 
typedef axi_::write::template subordinate ::AWPort axi_wr_subordinate_aw
 
typedef axi_::write::template subordinate ::WPort axi_wr_subordinate_w
 
typedef axi_::write::template subordinate ::BPort axi_wr_subordinate_b
 

Public Member Functions

typedef NVUINTW (numManagers_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_subordinate_ar, numManagers > axi_rd_m_ar
 
nvhls::nv_array< axi_rd_subordinate_r, numManagers > axi_rd_m_r
 
nvhls::nv_array< axi_wr_subordinate_aw, numManagers > axi_wr_m_aw
 
nvhls::nv_array< axi_wr_subordinate_w, numManagers > axi_wr_m_w
 
nvhls::nv_array< axi_wr_subordinate_b, numManagers > axi_wr_m_b
 
axi_::read::template manager axi_rd_s
 
axi_::write::template manager 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_manager
 
Connections::Combinational< NVUINT1 > w_last
 

Static Public Attributes

static const int kDebugLevel = 5
 
static const int numManagers_width = nvhls::log2_ceil<numManagers>::val
 

Detailed Description

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

An n-way arbiter that connects multiple AXI manager ports to a single AXI subordinate port.

Template Parameters
axiCfgA valid AXI config.
numManagersThe number of managers 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 managers to a single AXI subordinate. 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
An n-way arbiter that connects multiple AXI manager ports to a single AXI subordinate port.
Definition AxiArbiter.h:58

This may reduce area/power.

Definition at line 58 of file AxiArbiter.h.

Member Typedef Documentation

◆ axi_

template<typename axiCfg , int numManagers, int maxOutstandingRequests>
typedef axi::axi4<axiCfg> AxiArbiter< axiCfg, numManagers, maxOutstandingRequests >::axi_

Definition at line 64 of file AxiArbiter.h.

◆ axi_rd_subordinate_ar

template<typename axiCfg , int numManagers, int maxOutstandingRequests>
typedef axi_::read::template subordinate ::ARPort AxiArbiter< axiCfg, numManagers, maxOutstandingRequests >::axi_rd_subordinate_ar

Definition at line 67 of file AxiArbiter.h.

◆ axi_rd_subordinate_r

template<typename axiCfg , int numManagers, int maxOutstandingRequests>
typedef axi_::read::template subordinate ::RPort AxiArbiter< axiCfg, numManagers, maxOutstandingRequests >::axi_rd_subordinate_r

Definition at line 68 of file AxiArbiter.h.

◆ axi_wr_subordinate_aw

template<typename axiCfg , int numManagers, int maxOutstandingRequests>
typedef axi_::write::template subordinate ::AWPort AxiArbiter< axiCfg, numManagers, maxOutstandingRequests >::axi_wr_subordinate_aw

Definition at line 69 of file AxiArbiter.h.

◆ axi_wr_subordinate_w

template<typename axiCfg , int numManagers, int maxOutstandingRequests>
typedef axi_::write::template subordinate ::WPort AxiArbiter< axiCfg, numManagers, maxOutstandingRequests >::axi_wr_subordinate_w

Definition at line 70 of file AxiArbiter.h.

◆ axi_wr_subordinate_b

template<typename axiCfg , int numManagers, int maxOutstandingRequests>
typedef axi_::write::template subordinate ::BPort AxiArbiter< axiCfg, numManagers, maxOutstandingRequests >::axi_wr_subordinate_b

Definition at line 71 of file AxiArbiter.h.

Constructor & Destructor Documentation

◆ AxiArbiter()

template<typename axiCfg , int numManagers, int maxOutstandingRequests>
AxiArbiter< axiCfg, numManagers, maxOutstandingRequests >::AxiArbiter ( sc_module_name  name)
inline

Definition at line 94 of file AxiArbiter.h.

Member Function Documentation

◆ run_ar()

template<typename axiCfg , int numManagers, int maxOutstandingRequests>
void AxiArbiter< axiCfg, numManagers, maxOutstandingRequests >::run_ar ( )
inline

Definition at line 127 of file AxiArbiter.h.

◆ run_r()

template<typename axiCfg , int numManagers, int maxOutstandingRequests>
void AxiArbiter< axiCfg, numManagers, maxOutstandingRequests >::run_r ( )
inline

Definition at line 170 of file AxiArbiter.h.

◆ run_aw()

template<typename axiCfg , int numManagers, int maxOutstandingRequests>
void AxiArbiter< axiCfg, numManagers, maxOutstandingRequests >::run_aw ( )
inline

Definition at line 215 of file AxiArbiter.h.

◆ run_w()

template<typename axiCfg , int numManagers, int maxOutstandingRequests>
void AxiArbiter< axiCfg, numManagers, maxOutstandingRequests >::run_w ( )
inline

Definition at line 269 of file AxiArbiter.h.

◆ run_b()

template<typename axiCfg , int numManagers, int maxOutstandingRequests>
void AxiArbiter< axiCfg, numManagers, maxOutstandingRequests >::run_b ( )
inline

Definition at line 294 of file AxiArbiter.h.

Member Data Documentation

◆ kDebugLevel

template<typename axiCfg , int numManagers, int maxOutstandingRequests>
const int AxiArbiter< axiCfg, numManagers, maxOutstandingRequests >::kDebugLevel = 5
static

Definition at line 60 of file AxiArbiter.h.

◆ clk

template<typename axiCfg , int numManagers, int maxOutstandingRequests>
sc_in<bool> AxiArbiter< axiCfg, numManagers, maxOutstandingRequests >::clk

Definition at line 61 of file AxiArbiter.h.

◆ reset_bar

template<typename axiCfg , int numManagers, int maxOutstandingRequests>
sc_in<bool> AxiArbiter< axiCfg, numManagers, maxOutstandingRequests >::reset_bar

Definition at line 62 of file AxiArbiter.h.

◆ numManagers_width

template<typename axiCfg , int numManagers, int maxOutstandingRequests>
const int AxiArbiter< axiCfg, numManagers, maxOutstandingRequests >::numManagers_width = nvhls::log2_ceil<numManagers>::val
static

Definition at line 65 of file AxiArbiter.h.

◆ axi_rd_m_ar

template<typename axiCfg , int numManagers, int maxOutstandingRequests>
nvhls::nv_array<axi_rd_subordinate_ar, numManagers> AxiArbiter< axiCfg, numManagers, maxOutstandingRequests >::axi_rd_m_ar

Definition at line 76 of file AxiArbiter.h.

◆ axi_rd_m_r

template<typename axiCfg , int numManagers, int maxOutstandingRequests>
nvhls::nv_array<axi_rd_subordinate_r, numManagers> AxiArbiter< axiCfg, numManagers, maxOutstandingRequests >::axi_rd_m_r

Definition at line 77 of file AxiArbiter.h.

◆ axi_wr_m_aw

template<typename axiCfg , int numManagers, int maxOutstandingRequests>
nvhls::nv_array<axi_wr_subordinate_aw, numManagers> AxiArbiter< axiCfg, numManagers, maxOutstandingRequests >::axi_wr_m_aw

Definition at line 78 of file AxiArbiter.h.

◆ axi_wr_m_w

template<typename axiCfg , int numManagers, int maxOutstandingRequests>
nvhls::nv_array<axi_wr_subordinate_w, numManagers> AxiArbiter< axiCfg, numManagers, maxOutstandingRequests >::axi_wr_m_w

Definition at line 79 of file AxiArbiter.h.

◆ axi_wr_m_b

template<typename axiCfg , int numManagers, int maxOutstandingRequests>
nvhls::nv_array<axi_wr_subordinate_b, numManagers> AxiArbiter< axiCfg, numManagers, maxOutstandingRequests >::axi_wr_m_b

Definition at line 80 of file AxiArbiter.h.

◆ axi_rd_s

template<typename axiCfg , int numManagers, int maxOutstandingRequests>
axi_::read::template manager AxiArbiter< axiCfg, numManagers, maxOutstandingRequests >::axi_rd_s

Definition at line 81 of file AxiArbiter.h.

◆ axi_wr_s

template<typename axiCfg , int numManagers, int maxOutstandingRequests>
axi_::write::template manager AxiArbiter< axiCfg, numManagers, maxOutstandingRequests >::axi_wr_s

Definition at line 82 of file AxiArbiter.h.

◆ readQ

template<typename axiCfg , int numManagers, int maxOutstandingRequests>
FIFO<inFlight_t, maxOutstandingRequests> AxiArbiter< axiCfg, numManagers, maxOutstandingRequests >::readQ

Definition at line 85 of file AxiArbiter.h.

◆ read_in_flight

template<typename axiCfg , int numManagers, int maxOutstandingRequests>
Connections::Combinational<inFlight_t> AxiArbiter< axiCfg, numManagers, maxOutstandingRequests >::read_in_flight

Definition at line 86 of file AxiArbiter.h.

◆ writeQ

template<typename axiCfg , int numManagers, int maxOutstandingRequests>
FIFO<inFlight_t, maxOutstandingRequests> AxiArbiter< axiCfg, numManagers, maxOutstandingRequests >::writeQ

Definition at line 87 of file AxiArbiter.h.

◆ write_in_flight

template<typename axiCfg , int numManagers, int maxOutstandingRequests>
Connections::Combinational<inFlight_t> AxiArbiter< axiCfg, numManagers, maxOutstandingRequests >::write_in_flight

Definition at line 88 of file AxiArbiter.h.

◆ active_write_manager

template<typename axiCfg , int numManagers, int maxOutstandingRequests>
Connections::Combinational<inFlight_t> AxiArbiter< axiCfg, numManagers, maxOutstandingRequests >::active_write_manager

Definition at line 89 of file AxiArbiter.h.

◆ w_last

template<typename axiCfg , int numManagers, int maxOutstandingRequests>
Connections::Combinational<NVUINT1> AxiArbiter< axiCfg, numManagers, maxOutstandingRequests >::w_last

Definition at line 90 of file AxiArbiter.h.


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