17 #ifndef _BUS_AXI_SIGNAL_IF_H_ 
   18 #define _BUS_AXI_SIGNAL_IF_H_ 
   20 #include <scc/signal_opt_ports.h> 
   25 const sc_core::sc_time CLK_DELAY = 1_ps;
 
   28     template <
typename T> 
using m2s_t = sc_core::sc_out<T>;
 
   29     template <
typename T> 
using s2m_t = sc_core::sc_in<T>;
 
   30     template <
typename T> 
using m2s_full_t = sc_core::sc_out<T>;
 
   31     template <
typename T> 
using s2m_full_t = sc_core::sc_in<T>;
 
   37     template <
typename T> 
using m2s_t = sc_core::sc_out<T>;
 
   38     template <
typename T> 
using s2m_t = sc_core::sc_in<T>;
 
   46     template <
typename T> 
using m2s_t = sc_core::sc_in<T>;
 
   47     template <
typename T> 
using s2m_t = sc_core::sc_out<T>;
 
   48     template <
typename T> 
using m2s_full_t = sc_core::sc_in<T>;
 
   49     template <
typename T> 
using s2m_full_t = sc_core::sc_out<T>;
 
   55     template <
typename T> 
using m2s_t = sc_core::sc_in<T>;
 
   56     template <
typename T> 
using s2m_t = sc_core::sc_out<T>;
 
   64     template <
typename T> 
using m2s_t = sc_core::sc_signal<T>;
 
   65     template <
typename T> 
using s2m_t = sc_core::sc_signal<T>;
 
   66     template <
typename T> 
using m2s_full_t = sc_core::sc_signal<T>;
 
   67     template <
typename T> 
using s2m_full_t = sc_core::sc_signal<T>;
 
   68     template <
typename T> 
using m2s_opt_t = sc_core::sc_signal<T>;
 
   69     template <
typename T> 
using s2m_opt_t = sc_core::sc_signal<T>;
 
   72 template <
bool Cond, 
class T, 
class S> 
struct select_if { 
typedef S type; };
 
   74 template <
class T, 
class S> 
struct select_if<true, T, S> { 
typedef T type; };
 
   76 template <
unsigned int BUSWDTH = 32, 
unsigned int ADDRWDTH = 32, 
unsigned int IDWDTH = 32, 
unsigned int USERWDTH = 1> 
struct axi4_cfg {
 
   77     static_assert(BUSWDTH > 0, 
"BUSWIDTH shall be larger than 0");
 
   78     static_assert(ADDRWDTH > 0, 
"ADDRWDTH shall be larger than 0");
 
   79     static_assert(IDWDTH > 0, 
"IDWDTH shall be larger than 0");
 
   80     constexpr 
static bool IS_LITE = 
false;
 
   81     constexpr 
static unsigned int BUSWIDTH = BUSWDTH;
 
   82     constexpr 
static unsigned int ADDRWIDTH = ADDRWDTH;
 
   83     constexpr 
static unsigned int IDWIDTH = IDWDTH;
 
   84     constexpr 
static unsigned int USERWIDTH = USERWDTH;
 
   87     using strb_t = 
typename select_if<(BUSWDTH / 8) <= 64, sc_dt::sc_uint<BUSWIDTH / 8>, sc_dt::sc_biguint<BUSWIDTH / 8>>::type;
 
   92 template <
unsigned int BUSWDTH = 32, 
unsigned int ADDRWDTH = 32> 
struct axi4_lite_cfg {
 
   93     static_assert(BUSWDTH > 0, 
"BUSWIDTH shall be larger than 0");
 
   94     static_assert(ADDRWDTH > 0, 
"ADDRWDTH shall be larger than 0");
 
   95     constexpr 
static bool IS_LITE = 
true;
 
   96     constexpr 
static unsigned int BUSWIDTH = BUSWDTH;
 
   97     constexpr 
static unsigned int ADDRWIDTH = ADDRWDTH;
 
   98     constexpr 
static unsigned int IDWIDTH = 0;
 
   99     constexpr 
static unsigned int USERWIDTH = 1;
 
  102     using strb_t = 
typename select_if<(BUSWDTH / 8) <= 64, sc_dt::sc_uint<BUSWIDTH / 8>, sc_dt::sc_biguint<BUSWIDTH / 8>>::type;
 
  116 template <
unsigned int BUSWDTH = 32, 
unsigned int ADDRWDTH = 32, 
unsigned int IDWDTH = 32, 
unsigned int USERWDTH = 1,
 
  117           unsigned int AWSNOOPWDTH = 3, 
unsigned int RESPWDTH = 4>
 
  120     static_assert(BUSWDTH > 0, 
"BUSWIDTH shall be larger than 0");
 
  122     static_assert(ADDRWDTH > 0, 
"ADDRWDTH shall be larger than 0");
 
  123     static_assert(IDWDTH > 0, 
"IDWDTH shall be larger than 0");
 
  124     constexpr 
static bool IS_LITE = 
false;
 
  125     constexpr 
static unsigned int BUSWIDTH = BUSWDTH;
 
  126     constexpr 
static unsigned int ADDRWIDTH = ADDRWDTH;
 
  127     constexpr 
static unsigned int IDWIDTH = IDWDTH;
 
  128     constexpr 
static unsigned int USERWIDTH = USERWDTH;
 
  129     constexpr 
static unsigned int AWSNOOPWIDTH = AWSNOOPWDTH;
 
  130     constexpr 
static unsigned int RESPWIDTH = RESPWDTH;
 
  133     using strb_t = 
typename select_if<(BUSWDTH / 8) <= 64, sc_dt::sc_uint<BUSWIDTH / 8>, sc_dt::sc_biguint<BUSWIDTH / 8>>::type;
 
  138 inline std::string concat(
const char* prefix, 
const char* name) { 
return std::string(prefix) + name; }
 
  141 template <
typename CFG, 
typename TYPES = master_types> 
struct aw_axi_lite;
 
  142 template <
typename CFG, 
typename TYPES = master_types> 
struct aw_axi {
 
  143     typename TYPES::template m2s_full_t<sc_dt::sc_uint<CFG::IDWIDTH>> aw_id{
"aw_id"};
 
  144     typename TYPES::template m2s_t<sc_dt::sc_uint<CFG::ADDRWIDTH>> aw_addr{
"aw_addr"};
 
  145     typename TYPES::template s2m_t<bool> aw_ready{
"aw_ready"};
 
  146     typename TYPES::template m2s_full_t<bool> aw_lock{
"aw_lock"}; 
 
  147     typename TYPES::template m2s_t<bool> aw_valid{
"aw_valid"};
 
  148     typename TYPES::template m2s_t<sc_dt::sc_uint<3>> aw_prot{
"aw_prot"};
 
  149     typename TYPES::template m2s_full_t<sc_dt::sc_uint<3>> aw_size{
"aw_size"};
 
  150     typename TYPES::template m2s_full_t<sc_dt::sc_uint<4>> aw_cache{
"aw_cache"};
 
  151     typename TYPES::template m2s_full_t<sc_dt::sc_uint<2>> aw_burst{
"aw_burst"};
 
  152     typename TYPES::template m2s_full_t<sc_dt::sc_uint<4>> aw_qos{
"aw_qos"};
 
  153     typename TYPES::template m2s_full_t<sc_dt::sc_uint<4>> aw_region{
"aw_region"};
 
  154     typename TYPES::template m2s_full_t<sc_dt::sc_uint<8>> aw_len{
"aw_len"};
 
  155     typename TYPES::template m2s_opt_t<typename CFG::user_t> aw_user{
"aw_user"};
 
  158     aw_axi(
const char* prefix)
 
  159     : aw_id{concat(prefix, 
"_id").c_str()}
 
  160     , aw_addr{concat(prefix, 
"_addr").c_str()}
 
  161     , aw_ready{concat(prefix, 
"_ready").c_str()}
 
  162     , aw_lock{concat(prefix, 
"_lock").c_str()}
 
  163     , aw_valid{concat(prefix, 
"_valid").c_str()}
 
  164     , aw_prot{concat(prefix, 
"_prot").c_str()}
 
  165     , aw_size{concat(prefix, 
"_size").c_str()}
 
  166     , aw_cache{concat(prefix, 
"_cache").c_str()}
 
  167     , aw_burst{concat(prefix, 
"_burst").c_str()}
 
  168     , aw_qos{concat(prefix, 
"_qos").c_str()}
 
  169     , aw_region{concat(prefix, 
"_region").c_str()}
 
  170     , aw_len{concat(prefix, 
"_len").c_str()}
 
  171     , aw_user{concat(prefix, 
"_user").c_str()} {}
 
  175         aw_addr.bind(o.aw_addr);
 
  176         aw_ready.bind(o.aw_ready);
 
  177         aw_lock.bind(o.aw_lock); 
 
  178         aw_valid.bind(o.aw_valid);
 
  179         aw_prot.bind(o.aw_prot);
 
  180         aw_size.bind(o.aw_size);
 
  181         aw_cache.bind(o.aw_cache);
 
  182         aw_burst.bind(o.aw_burst);
 
  183         aw_qos.bind(o.aw_qos);
 
  184         aw_region.bind(o.aw_region);
 
  185         aw_len.bind(o.aw_len);
 
  186         aw_user.bind(o.aw_user);
 
  192 template <
typename CFG, 
typename TYPES = master_types> 
struct wdata_axi_lite;
 
  193 template <
typename CFG, 
typename TYPES = master_types> 
struct wdata_axi {
 
  194     typename TYPES::template m2s_opt_t<sc_dt::sc_uint<CFG::IDWIDTH>> w_id{
"w_id"};
 
  195     typename TYPES::template m2s_t<typename CFG::data_t> w_data{
"w_data"};
 
  196     typename TYPES::template m2s_t<typename CFG::strb_t> w_strb{
"w_strb"};
 
  197     typename TYPES::template m2s_full_t<bool> w_last{
"w_last"};
 
  198     typename TYPES::template m2s_t<bool> w_valid{
"w_valid"};
 
  199     typename TYPES::template s2m_t<bool> w_ready{
"w_ready"};
 
  200     typename TYPES::template m2s_opt_t<typename CFG::user_t> w_user{
"w_user"};
 
  201     typename TYPES::template m2s_full_t<bool> w_ack{
"w_ack"}; 
 
  202     typename TYPES::template m2s_opt_t<bool> w_trace{
"w_trace"};
 
  206     : w_id{concat(prefix, 
"_id").c_str()}
 
  207     , w_data{concat(prefix, 
"_data").c_str()}
 
  208     , w_strb{concat(prefix, 
"_strb").c_str()}
 
  209     , w_last{concat(prefix, 
"_last").c_str()}
 
  210     , w_valid{concat(prefix, 
"_valid").c_str()}
 
  211     , w_ready{concat(prefix, 
"_ready").c_str()}
 
  212     , w_user{concat(prefix, 
"_user").c_str()}
 
  213     , w_ack{concat(prefix, 
"_ack").c_str()} 
 
  214     , w_trace{concat(prefix, 
"_trace").c_str()} {}
 
  218         w_data.bind(o.w_data);
 
  219         w_strb.bind(o.w_strb);
 
  220         w_last.bind(o.w_last);
 
  221         w_valid.bind(o.w_valid);
 
  222         w_ready.bind(o.w_ready);
 
  223         w_user.bind(o.w_user);
 
  225         w_trace.bind(o.w_trace);
 
  233 template <
typename CFG, 
typename TYPES = master_types> 
struct b_axi_lite;
 
  234 template <
typename CFG, 
typename TYPES = master_types> 
struct b_axi {
 
  235     typename TYPES::template s2m_t<bool> b_valid{
"b_valid"};
 
  236     typename TYPES::template m2s_t<bool> b_ready{
"b_ready"};
 
  237     typename TYPES::template s2m_full_t<sc_dt::sc_uint<CFG::IDWIDTH>> b_id{
"b_id"};
 
  238     typename TYPES::template s2m_t<sc_dt::sc_uint<2>> b_resp{
"b_resp"};
 
  239     typename TYPES::template s2m_opt_t<typename CFG::user_t> b_user{
"b_user"};
 
  240     typename TYPES::template s2m_opt_t<bool> b_trace{
"b_trace"};
 
  243     b_axi(
const char* prefix)
 
  244     : b_valid{concat(prefix, 
"_valid").c_str()}
 
  245     , b_ready{concat(prefix, 
"_ready").c_str()}
 
  246     , b_id{concat(prefix, 
"_id").c_str()}
 
  247     , b_resp{concat(prefix, 
"_resp").c_str()}
 
  248     , b_user{concat(prefix, 
"_user").c_str()}
 
  249     , b_trace{concat(prefix, 
"_trace").c_str()} {}
 
  252         b_valid.bind(o.b_valid);
 
  253         b_ready.bind(o.b_ready);
 
  255         b_resp.bind(o.b_resp);
 
  256         b_user.bind(o.b_user);
 
  257         b_trace.bind(o.b_trace);
 
  263 template <
typename CFG, 
typename TYPES = master_types> 
struct ar_axi_lite;
 
  264 template <
typename CFG, 
typename TYPES = master_types> 
struct ar_axi {
 
  265     typename TYPES::template m2s_full_t<sc_dt::sc_uint<CFG::IDWIDTH>> ar_id{
"ar_id"};
 
  266     typename TYPES::template m2s_t<sc_dt::sc_uint<CFG::ADDRWIDTH>> ar_addr{
"ar_addr"};
 
  267     typename TYPES::template m2s_full_t<sc_dt::sc_uint<8>> ar_len{
"ar_len"};
 
  268     typename TYPES::template m2s_full_t<sc_dt::sc_uint<3>> ar_size{
"ar_size"};
 
  269     typename TYPES::template m2s_full_t<sc_dt::sc_uint<2>> ar_burst{
"ar_burst"};
 
  270     typename TYPES::template m2s_full_t<bool> ar_lock{
"ar_lock"}; 
 
  271     typename TYPES::template m2s_full_t<sc_dt::sc_uint<4>> ar_cache{
"ar_cache"};
 
  272     typename TYPES::template m2s_t<sc_dt::sc_uint<3>> ar_prot{
"ar_prot"};
 
  273     typename TYPES::template m2s_full_t<sc_dt::sc_uint<4>> ar_qos{
"ar_qos"};
 
  274     typename TYPES::template m2s_full_t<sc_dt::sc_uint<4>> ar_region{
"ar_region"};
 
  275     typename TYPES::template m2s_t<bool> ar_valid{
"ar_valid"};
 
  276     typename TYPES::template s2m_t<bool> ar_ready{
"ar_ready"};
 
  277     typename TYPES::template m2s_opt_t<typename CFG::user_t> ar_user{
"ar_user"};
 
  280     ar_axi(
const char* prefix)
 
  281     : ar_id{concat(prefix, 
"_id").c_str()}
 
  282     , ar_addr{concat(prefix, 
"_addr").c_str()}
 
  283     , ar_len{concat(prefix, 
"_len").c_str()}
 
  284     , ar_size{concat(prefix, 
"_size").c_str()}
 
  285     , ar_burst{concat(prefix, 
"_burst").c_str()}
 
  286     , ar_lock{concat(prefix, 
"_lock").c_str()} 
 
  287     , ar_cache{concat(prefix, 
"_cache").c_str()}
 
  288     , ar_prot{concat(prefix, 
"_prot").c_str()}
 
  289     , ar_qos{concat(prefix, 
"_qos").c_str()}
 
  290     , ar_region{concat(prefix, 
"_region").c_str()}
 
  291     , ar_valid{concat(prefix, 
"_valid").c_str()}
 
  292     , ar_ready{concat(prefix, 
"_ready").c_str()}
 
  293     , ar_user{concat(prefix, 
"_user").c_str()} {}
 
  297         ar_addr.bind(o.ar_addr);
 
  298         ar_len.bind(o.ar_len);
 
  299         ar_size.bind(o.ar_size);
 
  300         ar_burst.bind(o.ar_burst);
 
  301         ar_lock.bind(o.ar_lock); 
 
  302         ar_cache.bind(o.ar_cache);
 
  303         ar_prot.bind(o.ar_prot);
 
  304         ar_qos.bind(o.ar_qos);
 
  305         ar_region.bind(o.ar_region);
 
  306         ar_valid.bind(o.ar_valid);
 
  307         ar_ready.bind(o.ar_ready);
 
  308         ar_user.bind(o.ar_user);
 
  314 template <
typename CFG, 
typename TYPES = master_types> 
struct rresp_axi_lite;
 
  315 template <
typename CFG, 
typename TYPES = master_types> 
struct rresp_axi {
 
  316     typename TYPES::template s2m_full_t<sc_dt::sc_uint<CFG::IDWIDTH>> r_id{
"r_id"};
 
  317     typename TYPES::template s2m_t<typename CFG::data_t> r_data{
"r_data"};
 
  318     typename TYPES::template s2m_t<sc_dt::sc_uint<2>> r_resp{
"r_resp"};
 
  319     typename TYPES::template s2m_full_t<bool> r_last{
"r_last"};
 
  320     typename TYPES::template s2m_t<bool> r_valid{
"r_valid"};
 
  321     typename TYPES::template m2s_t<bool> r_ready{
"r_ready"};
 
  322     typename TYPES::template s2m_opt_t<typename CFG::user_t> r_user{
"r_user"};
 
  323     typename TYPES::template s2m_opt_t<bool> r_trace{
"r_trace"};
 
  327     : r_id{concat(prefix, 
"_id").c_str()}
 
  328     , r_data{concat(prefix, 
"_data").c_str()}
 
  329     , r_resp{concat(prefix, 
"_resp").c_str()}
 
  330     , r_last{concat(prefix, 
"_last").c_str()}
 
  331     , r_valid{concat(prefix, 
"_valid").c_str()}
 
  332     , r_ready{concat(prefix, 
"_ready").c_str()}
 
  333     , r_user{concat(prefix, 
"_user").c_str()}
 
  334     , r_trace{concat(prefix, 
"_trace").c_str()} {}
 
  338         r_data.bind(o.r_data);
 
  339         r_resp.bind(o.r_resp);
 
  340         r_last.bind(o.r_last);
 
  341         r_valid.bind(o.r_valid);
 
  342         r_ready.bind(o.r_ready);
 
  343         r_user.bind(o.r_user);
 
  344         r_trace.bind(o.r_trace);
 
  351 template <
typename CFG, 
typename TYPES = master_types> 
struct rresp_ace {
 
  352     typename TYPES::template s2m_full_t<sc_dt::sc_uint<CFG::IDWIDTH>> r_id{
"r_id"};
 
  353     typename TYPES::template s2m_t<typename CFG::data_t> r_data{
"r_data"};
 
  354     typename TYPES::template s2m_t<sc_dt::sc_uint<CFG::RESPWIDTH>> r_resp{
"r_resp"}; 
 
  355     typename TYPES::template s2m_full_t<bool> r_last{
"r_last"};
 
  356     typename TYPES::template s2m_t<bool> r_valid{
"r_valid"};
 
  357     typename TYPES::template m2s_t<bool> r_ready{
"r_ready"};
 
  358     typename TYPES::template s2m_opt_t<typename CFG::user_t> r_user{
"r_user"};
 
  359     typename TYPES::template s2m_opt_t<bool> r_trace{
"r_trace"}; 
 
  360     typename TYPES::template m2s_t<bool> r_ack{
"r_ack"};         
 
  364     : r_id{concat(prefix, 
"_id").c_str()}
 
  365     , r_data{concat(prefix, 
"_data").c_str()}
 
  366     , r_resp{concat(prefix, 
"_resp").c_str()}
 
  367     , r_last{concat(prefix, 
"_last").c_str()}
 
  368     , r_valid{concat(prefix, 
"_valid").c_str()}
 
  369     , r_ready{concat(prefix, 
"_ready").c_str()}
 
  370     , r_user{concat(prefix, 
"_user").c_str()}
 
  371     , r_trace{concat(prefix, 
"_trace").c_str()}
 
  372     , r_ack{concat(prefix, 
"_ack").c_str()} {}
 
  376         r_data.bind(o.r_data);
 
  377         r_resp.bind(o.r_resp);
 
  378         r_last.bind(o.r_last);
 
  379         r_valid.bind(o.r_valid);
 
  380         r_ready.bind(o.r_ready);
 
  381         r_user.bind(o.r_user);
 
  383         r_trace.bind(o.r_trace);
 
  390     typename TYPES::template m2s_t<sc_dt::sc_uint<CFG::ADDRWIDTH>> aw_addr{
"aw_addr"};
 
  391     typename TYPES::template s2m_t<bool> aw_ready{
"aw_ready"};
 
  392     typename TYPES::template m2s_t<bool> aw_valid{
"aw_valid"};
 
  393     typename TYPES::template m2s_t<sc_dt::sc_uint<3>> aw_prot{
"aw_prot"};
 
  397     : aw_addr{concat(prefix, 
"_addr").c_str()}
 
  398     , aw_ready{concat(prefix, 
"_ready").c_str()}
 
  399     , aw_valid{concat(prefix, 
"_valid").c_str()}
 
  400     , aw_prot{concat(prefix, 
"_prot").c_str()} {}
 
  403         aw_addr.bind(o.aw_addr);
 
  404         aw_ready.bind(o.aw_ready);
 
  405         aw_valid.bind(o.aw_valid);
 
  406         aw_prot.bind(o.aw_prot);
 
  412     typename TYPES::template m2s_t<typename CFG::data_t> w_data{
"w_data"};
 
  413     typename TYPES::template m2s_t<typename CFG::strb_t> w_strb{
"w_strb"};
 
  414     typename TYPES::template m2s_t<bool> w_valid{
"w_valid"};
 
  415     typename TYPES::template s2m_t<bool> w_ready{
"w_ready"};
 
  419     : w_data{concat(prefix, 
"_data").c_str()}
 
  420     , w_strb{concat(prefix, 
"_strb").c_str()}
 
  421     , w_valid{concat(prefix, 
"_valid").c_str()}
 
  422     , w_ready{concat(prefix, 
"_ready").c_str()} {}
 
  425         w_data.bind(o.w_data);
 
  426         w_strb.bind(o.w_strb);
 
  427         w_valid.bind(o.w_valid);
 
  428         w_ready.bind(o.w_ready);
 
  434     typename TYPES::template s2m_t<bool> b_valid{
"b_valid"};
 
  435     typename TYPES::template m2s_t<bool> b_ready{
"b_ready"};
 
  436     typename TYPES::template s2m_t<sc_dt::sc_uint<2>> b_resp{
"b_resp"};
 
  440     : b_valid{concat(prefix, 
"_valid").c_str()}
 
  441     , b_ready{concat(prefix, 
"_ready").c_str()}
 
  442     , b_resp{concat(prefix, 
"_resp").c_str()} {}
 
  445         b_valid.bind(o.b_valid);
 
  446         b_ready.bind(o.b_ready);
 
  447         b_resp.bind(o.b_resp);
 
  453     typename TYPES::template m2s_t<sc_dt::sc_uint<CFG::ADDRWIDTH>> ar_addr{
"ar_addr"};
 
  454     typename TYPES::template m2s_t<sc_dt::sc_uint<3>> ar_prot{
"ar_prot"};
 
  455     typename TYPES::template m2s_t<bool> ar_valid{
"ar_valid"};
 
  456     typename TYPES::template s2m_t<bool> ar_ready{
"ar_ready"};
 
  460     : ar_addr{concat(prefix, 
"_addr").c_str()}
 
  461     , ar_prot{concat(prefix, 
"_prot").c_str()}
 
  462     , ar_valid{concat(prefix, 
"_valid").c_str()}
 
  463     , ar_ready{concat(prefix, 
"_ready").c_str()} {}
 
  466         ar_addr.bind(o.ar_addr);
 
  467         ar_prot.bind(o.ar_prot);
 
  468         ar_valid.bind(o.ar_valid);
 
  469         ar_ready.bind(o.ar_ready);
 
  475     typename TYPES::template s2m_t<typename CFG::data_t> r_data{
"r_data"};
 
  476     typename TYPES::template s2m_t<sc_dt::sc_uint<2>> r_resp{
"r_resp"};
 
  477     typename TYPES::template s2m_t<bool> r_valid{
"r_valid"};
 
  478     typename TYPES::template m2s_t<bool> r_ready{
"r_ready"};
 
  482     : r_data{concat(prefix, 
"_data").c_str()}
 
  483     , r_resp{concat(prefix, 
"_resp").c_str()}
 
  484     , r_valid{concat(prefix, 
"_valid").c_str()}
 
  485     , r_ready{concat(prefix, 
"_ready").c_str()} {}
 
  488         r_data.bind(o.r_data);
 
  489         r_resp.bind(o.r_resp);
 
  490         r_valid.bind(o.r_valid);
 
  491         r_ready.bind(o.r_ready);
 
  495 template <
typename CFG, 
typename TYPES = master_types> 
struct ar_ace {
 
  496     typename TYPES::template m2s_full_t<sc_dt::sc_uint<CFG::IDWIDTH>> ar_id{
"ar_id"};
 
  497     typename TYPES::template m2s_t<sc_dt::sc_uint<CFG::ADDRWIDTH>> ar_addr{
"ar_addr"};
 
  498     typename TYPES::template m2s_full_t<sc_dt::sc_uint<8>> ar_len{
"ar_len"};
 
  499     typename TYPES::template m2s_full_t<sc_dt::sc_uint<3>> ar_size{
"ar_size"};
 
  500     typename TYPES::template m2s_full_t<sc_dt::sc_uint<2>> ar_burst{
"ar_burst"};
 
  501     typename TYPES::template m2s_t<bool> ar_lock{
"ar_lock"};
 
  502     typename TYPES::template m2s_full_t<sc_dt::sc_uint<4>> ar_cache{
"ar_cache"};
 
  503     typename TYPES::template m2s_t<sc_dt::sc_uint<3>> ar_prot{
"ar_prot"};
 
  504     typename TYPES::template m2s_full_t<sc_dt::sc_uint<4>> ar_qos{
"ar_qos"};
 
  505     typename TYPES::template m2s_full_t<sc_dt::sc_uint<4>> ar_region{
"ar_region"};
 
  506     typename TYPES::template m2s_t<bool> ar_valid{
"ar_valid"};
 
  507     typename TYPES::template s2m_t<bool> ar_ready{
"ar_ready"};
 
  508     typename TYPES::template m2s_full_t<sc_dt::sc_uint<2>> ar_domain{
"ar_domain"};
 
  509     typename TYPES::template m2s_full_t<sc_dt::sc_uint<4>> ar_snoop{
"ar_snoop"};
 
  510     typename TYPES::template m2s_full_t<sc_dt::sc_uint<2>> ar_bar{
"ar_bar"};
 
  511     typename TYPES::template m2s_opt_t<typename CFG::user_t> ar_user{
"ar_user"};
 
  512     typename TYPES::template m2s_opt_t<bool> ar_trace{
"ar_trace"};
 
  513     typename TYPES::template m2s_opt_t<sc_dt::sc_uint<4>> ar_vmidext{
"ar_vmidext"}; 
 
  516     ar_ace(
const char* prefix)
 
  517     : ar_id{concat(prefix, 
"_id").c_str()}
 
  518     , ar_addr{concat(prefix, 
"_addr").c_str()}
 
  519     , ar_len{concat(prefix, 
"_len").c_str()}
 
  520     , ar_size{concat(prefix, 
"_size").c_str()}
 
  521     , ar_burst{concat(prefix, 
"_burst").c_str()}
 
  522     , ar_lock{concat(prefix, 
"_lock").c_str()} 
 
  523     , ar_cache{concat(prefix, 
"_cache").c_str()}
 
  524     , ar_prot{concat(prefix, 
"_prot").c_str()}
 
  525     , ar_qos{concat(prefix, 
"_qos").c_str()}
 
  526     , ar_region{concat(prefix, 
"_region").c_str()}
 
  527     , ar_valid{concat(prefix, 
"_valid").c_str()}
 
  528     , ar_ready{concat(prefix, 
"_ready").c_str()}
 
  529     , ar_domain{concat(prefix, 
"_domain").c_str()}
 
  530     , ar_snoop{concat(prefix, 
"_snoop").c_str()}
 
  531     , ar_bar{concat(prefix, 
"_bar").c_str()}
 
  532     , ar_user{concat(prefix, 
"_user").c_str()}
 
  533     , ar_trace{concat(prefix, 
"_trace").c_str()}
 
  534     , ar_vmidext{concat(prefix, 
"_vmidext").c_str()} {}
 
  538         ar_addr.bind(o.ar_addr);
 
  539         ar_len.bind(o.ar_len);
 
  540         ar_size.bind(o.ar_size);
 
  541         ar_burst.bind(o.ar_burst);
 
  542         ar_lock.bind(o.ar_lock); 
 
  543         ar_cache.bind(o.ar_cache);
 
  544         ar_prot.bind(o.ar_prot);
 
  545         ar_qos.bind(o.ar_qos);
 
  546         ar_region.bind(o.ar_region);
 
  547         ar_valid.bind(o.ar_valid);
 
  548         ar_ready.bind(o.ar_ready);
 
  549         ar_domain.bind(o.ar_domain);
 
  550         ar_snoop.bind(o.ar_snoop);
 
  551         ar_bar.bind(o.ar_bar); 
 
  552         ar_user.bind(o.ar_user);
 
  553         ar_trace.bind(o.ar_trace);
 
  557 template <
typename CFG, 
typename TYPES = master_types> 
struct aw_ace {
 
  558     typename TYPES::template m2s_full_t<sc_dt::sc_uint<CFG::IDWIDTH>> aw_id{
"aw_id"};
 
  559     typename TYPES::template m2s_t<sc_dt::sc_uint<CFG::ADDRWIDTH>> aw_addr{
"aw_addr"};
 
  560     typename TYPES::template s2m_t<bool> aw_ready{
"aw_ready"};
 
  561     typename TYPES::template m2s_t<bool> aw_lock{
"aw_lock"};
 
  562     typename TYPES::template m2s_t<bool> aw_valid{
"aw_valid"};
 
  563     typename TYPES::template m2s_t<sc_dt::sc_uint<3>> aw_prot{
"aw_prot"};
 
  564     typename TYPES::template m2s_full_t<sc_dt::sc_uint<3>> aw_size{
"aw_size"};
 
  565     typename TYPES::template m2s_full_t<sc_dt::sc_uint<4>> aw_cache{
"aw_cache"};
 
  566     typename TYPES::template m2s_full_t<sc_dt::sc_uint<2>> aw_burst{
"aw_burst"};
 
  567     typename TYPES::template m2s_full_t<sc_dt::sc_uint<4>> aw_qos{
"aw_qos"};
 
  568     typename TYPES::template m2s_full_t<sc_dt::sc_uint<4>> aw_region{
"aw_region"};
 
  569     typename TYPES::template m2s_full_t<sc_dt::sc_uint<8>> aw_len{
"aw_len"};
 
  570     typename TYPES::template m2s_full_t<sc_dt::sc_uint<2>> aw_domain{
"aw_domain"};               
 
  571     typename TYPES::template m2s_full_t<sc_dt::sc_uint<CFG::AWSNOOPWIDTH>> aw_snoop{
"aw_snoop"}; 
 
  572     typename TYPES::template m2s_full_t<sc_dt::sc_uint<2>> aw_bar{
"aw_bar"};                     
 
  573     typename TYPES::template m2s_t<bool> aw_unique{
"aw_unique"};                                 
 
  574     typename TYPES::template m2s_full_t<typename CFG::user_t> aw_user{
"aw_user"};
 
  575     typename TYPES::template m2s_t<bool> aw_stashniden{
"aw_stashniden"}; 
 
  576     typename TYPES::template m2s_full_t<sc_dt::sc_uint<11>> aw_stashnid{
"aw_stashnid"};
 
  577     typename TYPES::template m2s_t<bool> aw_stashlpiden{
"aw_stashlpiden"};
 
  578     typename TYPES::template m2s_full_t<sc_dt::sc_uint<5>> aw_stashlpid{
"aw_stashlpid"};
 
  579     typename TYPES::template m2s_opt_t<sc_dt::sc_uint<6>> aw_atop{
"aw_atop"}; 
 
  580     typename TYPES::template m2s_opt_t<bool> aw_trace{
"aw_trace"};
 
  583     aw_ace(
const char* prefix)
 
  584     : aw_id{concat(prefix, 
"_id").c_str()}
 
  585     , aw_addr{concat(prefix, 
"_addr").c_str()}
 
  586     , aw_ready{concat(prefix, 
"_ready").c_str()}
 
  587     , aw_lock{concat(prefix, 
"_lock").c_str()}
 
  588     , aw_valid{concat(prefix, 
"_valid").c_str()}
 
  589     , aw_prot{concat(prefix, 
"_prot").c_str()}
 
  590     , aw_size{concat(prefix, 
"_size").c_str()}
 
  591     , aw_cache{concat(prefix, 
"_cache").c_str()}
 
  592     , aw_burst{concat(prefix, 
"_burst").c_str()}
 
  593     , aw_qos{concat(prefix, 
"_qos").c_str()}
 
  594     , aw_region{concat(prefix, 
"_region").c_str()}
 
  595     , aw_len{concat(prefix, 
"_len").c_str()}
 
  596     , aw_domain{concat(prefix, 
"_domain").c_str()}
 
  597     , aw_snoop{concat(prefix, 
"_snoop").c_str()}
 
  598     , aw_bar{concat(prefix, 
"_bar").c_str()}
 
  599     , aw_unique{concat(prefix, 
"_unique").c_str()}
 
  600     , aw_user{concat(prefix, 
"_user").c_str()}
 
  601     , aw_stashniden{concat(prefix, 
"_stashniden").c_str()}
 
  602     , aw_stashnid{concat(prefix, 
"_stashnid").c_str()}
 
  603     , aw_stashlpiden{concat(prefix, 
"_stashlpiden").c_str()}
 
  604     , aw_stashlpid{concat(prefix, 
"_stashlpid").c_str()}
 
  605     , aw_atop{concat(prefix, 
"_atop").c_str()}
 
  606     , aw_trace{concat(prefix, 
"_trace").c_str()} {}
 
  610         aw_addr.bind(o.aw_addr);
 
  611         aw_ready.bind(o.aw_ready);
 
  612         aw_lock.bind(o.aw_lock); 
 
  613         aw_valid.bind(o.aw_valid);
 
  614         aw_prot.bind(o.aw_prot);
 
  615         aw_size.bind(o.aw_size);
 
  616         aw_cache.bind(o.aw_cache);
 
  617         aw_burst.bind(o.aw_burst);
 
  618         aw_qos.bind(o.aw_qos);
 
  619         aw_region.bind(o.aw_region);
 
  620         aw_len.bind(o.aw_len);
 
  621         aw_domain.bind(o.aw_domain);
 
  622         aw_snoop.bind(o.aw_snoop);
 
  623         aw_bar.bind(o.aw_bar);
 
  624         aw_unique.bind(o.aw_unique);
 
  625         aw_user.bind(o.aw_user);
 
  626         aw_stashniden.bind(o.aw_stashniden);
 
  627         aw_stashnid.bind(o.aw_stashnid);
 
  628         aw_stashlpiden.bind(o.aw_stashlpiden);
 
  629         aw_stashlpid.bind(o.aw_stashlpid);
 
  630         aw_atop.bind(o.aw_atop);
 
  631         aw_trace.bind(o.aw_trace);
 
  636 template <
typename CFG, 
typename TYPES = master_types> 
struct ac_ace {
 
  637     typename TYPES::template s2m_t<bool> ac_valid{
"ac_valid"};
 
  638     typename TYPES::template m2s_t<bool> ac_ready{
"ac_ready"};
 
  639     typename TYPES::template s2m_t<sc_dt::sc_uint<CFG::ADDRWIDTH>> ac_addr{
"ac_addr"};
 
  640     typename TYPES::template s2m_full_t<sc_dt::sc_uint<4>> ac_snoop{
"ac_snoop"};
 
  641     typename TYPES::template s2m_full_t<sc_dt::sc_uint<3>> ac_prot{
"ac_prot"};
 
  642     typename TYPES::template s2m_opt_t<sc_dt::sc_uint<4>> ac_vmidext{
"ac_vmidext"}; 
 
  643     typename TYPES::template s2m_opt_t<bool> ac_trace{
"ac_trace"};                  
 
  646     ac_ace(
const char* prefix)
 
  647     : ac_valid{concat(prefix, 
"_valid").c_str()}
 
  648     , ac_ready{concat(prefix, 
"_ready").c_str()}
 
  649     , ac_addr{concat(prefix, 
"_addr").c_str()}
 
  650     , ac_snoop{concat(prefix, 
"_snoop").c_str()}
 
  651     , ac_prot{concat(prefix, 
"_prot").c_str()}
 
  652     , ac_vmidext{concat(prefix, 
"avmidext").c_str()}
 
  653     , ac_trace{concat(prefix, 
"_trace").c_str()} {}
 
  656         ac_valid.bind(o.ac_valid);
 
  657         ac_ready.bind(o.ac_ready);
 
  658         ac_addr.bind(o.ac_addr);
 
  659         ac_snoop.bind(o.ac_snoop);
 
  660         ac_prot.bind(o.ac_prot);
 
  665 template <
typename CFG, 
typename TYPES = master_types> 
struct cd_ace {
 
  666     typename TYPES::template m2s_t<bool> cd_valid{
"cd_valid"};
 
  667     typename TYPES::template s2m_t<bool> cd_ready{
"cd_ready"};
 
  668     typename TYPES::template m2s_t<typename CFG::data_t> cd_data{
"cd_data"};
 
  669     typename TYPES::template m2s_full_t<bool> cd_last{
"cd_last"};
 
  672     cd_ace(
const char* prefix)
 
  673     : cd_valid{concat(prefix, 
"_valid").c_str()}
 
  674     , cd_ready{concat(prefix, 
"_ready").c_str()}
 
  675     , cd_data{concat(prefix, 
"_data").c_str()}
 
  676     , cd_last{concat(prefix, 
"_last").c_str()} {}
 
  679         cd_valid.bind(o.cd_valid);
 
  680         cd_ready.bind(o.cd_ready);
 
  681         cd_data.bind(o.cd_data);
 
  682         cd_last.bind(o.cd_last);
 
  687 template <
typename CFG, 
typename TYPES = master_types> 
struct cr_ace {
 
  688     typename TYPES::template m2s_t<bool> cr_valid{
"cr_valid"};
 
  689     typename TYPES::template s2m_t<bool> cr_ready{
"cr_ready"};
 
  690     typename TYPES::template m2s_t<sc_dt::sc_uint<5>> cr_resp{
"cr_resp"};
 
  691     typename TYPES::template m2s_opt_t<bool> cr_trace{
"cr_trace"}; 
 
  694     cr_ace(
const char* prefix)
 
  695     : cr_valid{concat(prefix, 
"_valid").c_str()}
 
  696     , cr_ready{concat(prefix, 
"_ready").c_str()}
 
  697     , cr_resp{concat(prefix, 
"_resp").c_str()}
 
  698     , cr_trace{concat(prefix, 
"_trace").c_str()} {}
 
  701         cr_valid.bind(o.cr_valid);
 
  702         cr_ready.bind(o.cr_ready);
 
  703         cr_resp.bind(o.cr_resp);
 
  716     ar_addr.bind(o.ar_addr);
 
  717     ar_prot.bind(o.ar_prot);
 
  718     ar_valid.bind(o.ar_valid);
 
  719     ar_ready.bind(o.ar_ready);
 
  722 template <
typename CFG, 
typename TYPES>
 
  723 template <
typename OTYPES>
 
  724 inline void rresp_axi<CFG, TYPES>::bind_r(rresp_axi_lite<CFG, OTYPES>& o) {
 
  725     r_data.bind(o.r_data);
 
  726     r_resp.bind(o.r_resp);
 
  727     r_valid.bind(o.r_valid);
 
  728     r_ready.bind(o.r_ready);
 
  731 template <
typename CFG, 
typename TYPES> 
template <
typename OTYPES> 
inline void aw_axi<CFG, TYPES>::bind_aw(aw_axi_lite<CFG, OTYPES>& o) {
 
  732     aw_addr.bind(o.aw_addr);
 
  733     aw_ready.bind(o.aw_ready);
 
  734     aw_valid.bind(o.aw_valid);
 
  735     aw_prot.bind(o.aw_prot);
 
  738 template <
typename CFG, 
typename TYPES>
 
  739 template <
typename OTYPES>
 
  740 inline void wdata_axi<CFG, TYPES>::bind_w(wdata_axi_lite<CFG, OTYPES>& o) {
 
  741     w_data.bind(o.w_data);
 
  742     w_strb.bind(o.w_strb);
 
  743     w_valid.bind(o.w_valid);
 
  744     w_ready.bind(o.w_ready);
 
  747 template <
typename CFG, 
typename TYPES> 
template <
typename OTYPES> 
inline void b_axi<CFG, TYPES>::bind_b(b_axi_lite<CFG, OTYPES>& o) {
 
  748     b_valid.bind(o.b_valid);
 
  749     b_ready.bind(o.b_ready);
 
  750     b_resp.bind(o.b_resp);
 
TLM2.0 components modeling AHB.
 
snoop address(AC) channel signals
 
read address channel signals
 
Write address channel signals.
 
write response channel signals
 
snoop data(cd) channel signals
 
snoop response(cr) channel signals
 
Read data channel signals.
 
write data channel signals