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