AXI muckbucket
axi_if.sv
Go to the documentation of this file.
1 //
3 // Copyright (C) 2017, Matt Dew @ Dew Technologies, LLC
4 //
5 // This program is free software (logic verification): you can redistribute it
6 // and/or modify it under the terms of the GNU Lesser General Public License (LGPL)
7 // as published by the Free Software Foundation, either version 3 of the License,
8 // or (at your option) any later version.
9 //
10 // This program is distributed in the hope that it will be useful, but WITHOUT
11 // ANY WARRANTY; without even the implied warranty of MERCHANTIBILITY or
12 // FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License
13 // for more details.
14 //
15 // License: LGPL, v3, as defined and found on www.gnu.org,
16 // http://www.gnu.org/licenses/lgpl.html
17 //
18 //
19 // Author's intent: If you use this AXI verification code and find or fix bugs
20 // or make improvements, then share those fixes or improvements.
21 // If you use this in a bigger project, I don't care about,
22 // or want, any changes or code outside this block.
23 // Example: If you use this in an SoC simulation/testbench
24 // I don't want, or care about, your SoC or other blocks.
25 // I just care about the enhancements to these AXI files.
26 // That's why I have choosen the LGPL instead of the GPL.
29 template <
35  parameter C_AXI_ID_WIDTH = 6,
36  parameter C_AXI_ADDR_WIDTH = 32,
37  parameter C_AXI_DATA_WIDTH = 32,
38  parameter C_AXI_LEN_WIDTH = 8
39  > interface axi_if (
40  input wire clk,
41  input wire reset,
42 
43  inout wire awready, // Slave is ready to accept
44  inout wire <C_AXI_ID_WIDTH-1:0> awid, // Write ID
45  inout wire <C_AXI_ADDR_WIDTH-1:0> awaddr, // Write address
46  inout wire <C_AXI_LEN_WIDTH-1:0> awlen, // Write Burst Length
47  inout wire <2:0> awsize, // Write Burst size
48  inout wire <1:0> awburst, // Write Burst type
49  inout wire <0:0> awlock, // Write lock type
50  inout wire <3:0> awcache, // Write Cache type
51  inout wire <2:0> awprot, // Write Protection type
52  inout wire <3:0> awqos, // Write Quality of Svc
53  inout wire awvalid, // Write address valid
54 
55  // AXI write data channel signals
56  inout wire wready, // Write data ready
57  inout wire <C_AXI_DATA_WIDTH-1:0> wdata, // Write data
58  inout wire <C_AXI_DATA_WIDTH/8-1:0> wstrb, // Write strobes
59  inout wire wlast, // Last write transaction
60  inout wire wvalid, // Write valid
61 
62  // AXI write response channel signals
63  inout wire <C_AXI_ID_WIDTH-1:0> bid, // Response ID
64  inout wire <1:0> bresp, // Write response
65  inout wire bvalid, // Write reponse valid
66  inout wire bready, // Response ready
67 
68  // AXI read address channel signals
69  inout wire arready, // Read address ready
70  inout wire <C_AXI_ID_WIDTH-1:0> arid, // Read ID
71  inout wire <C_AXI_ADDR_WIDTH-1:0> araddr, // Read address
72  inout wire <C_AXI_LEN_WIDTH-1:0> arlen, // Read Burst Length
73  inout wire <2:0> arsize, // Read Burst size
74  inout wire <1:0> arburst, // Read Burst type
75  inout wire <0:0> arlock, // Read lock type
76  inout wire <3:0> arcache, // Read Cache type
77  inout wire <2:0> arprot, // Read Protection type
78  inout wire <3:0> arqos, // Read Protection type
79  inout wire arvalid, // Read address valid
80 
81  // AXI read data channel signals
82  inout wire <C_AXI_ID_WIDTH-1:0> rid, // Response ID
83  inout wire <1:0> rresp, // Read response
84  inout wire rvalid, // Read reponse valid
85  inout wire <C_AXI_DATA_WIDTH-1:0> rdata, // Read data
86  inout wire rlast, // Read last
87  inout wire rready // Read Response ready
88  ) {
89 
90 
91 
92 
93  logic <C_AXI_ID_WIDTH-1:0> iawid;
94  logic <C_AXI_ADDR_WIDTH-1:0> iawaddr;
95  logic iawvalid;
96  logic iawready;
97  logic <C_AXI_LEN_WIDTH-1:0> iawlen;
98  logic <2:0> iawsize;
99  logic <1:0> iawburst;
100  logic <0:0> iawlock;
101  logic <3:0> iawcache;
102  logic <2:0> iawprot;
103  logic <3:0> iawqos;
104 
105  // AXI write data channel signals
106  logic iwready;
107  logic <C_AXI_DATA_WIDTH-1:0> iwdata;
108  logic <C_AXI_DATA_WIDTH/8-1:0> iwstrb;
109  logic iwlast;
110  logic iwvalid;
111 
112  // AXI write response channel signals
113  logic <C_AXI_ID_WIDTH-1:0> ibid;
114  logic <1:0> ibresp;
115  logic ibvalid;
116  logic ibready;
117 
118  // AXI read address channel signals
119  logic iarready;
120  logic <C_AXI_ID_WIDTH-1:0> iarid;
121  logic <C_AXI_ADDR_WIDTH-1:0> iaraddr;
122  logic <C_AXI_LEN_WIDTH-1:0> iarlen;
123  logic <2:0> iarsize;
124  logic <1:0> iarburst;
125  logic <0:0> iarlock;
126  logic <3:0> iarcache;
127  logic <2:0> iarprot;
128  logic <3:0> iarqos;
129  logic iarvalid;
130 
131  // AXI read data channel signals
132  logic <C_AXI_ID_WIDTH-1:0> irid;
133  logic <1:0> irresp;
134  logic irvalid;
135  logic <C_AXI_DATA_WIDTH-1:0> irdata;
136  logic irlast;
137  logic irready;
138 
139 
140  logic <31:0> awready_toggle_pattern;
141  bit awready_toggle_pattern_enable=0;
142 
143  logic <31:0> wready_toggle_pattern;
144  bit wready_toggle_pattern_enable=0;
145 
146  logic <31:0> bready_toggle_pattern;
147  bit bready_toggle_pattern_enable=0;
148 
149  logic <31:0> arready_toggle_pattern;
150  bit arready_toggle_pattern_enable=0;
151 
152  logic <31:0> rready_toggle_pattern;
153  bit rready_toggle_pattern_enable=0;
154 
155  assign awid = iawid;
156  assign awaddr = iawaddr;
157  assign awvalid = iawvalid;
158  assign awready = iawready;
159  assign awlen = iawlen;
160  assign awsize = iawsize;
161  assign awburst = iawburst;
162  assign awlock = iawlock;
163  assign awcache = iawcache;
164  assign awprot = iawprot;
165  assign awqos = iawqos;
166 
167  assign wready = iwready;
168  assign wdata = iwdata;
169  assign wstrb = iwstrb;
170  assign wlast = iwlast;
171  assign wvalid = iwvalid;
172 
173  assign bid = ibid;
174  assign bresp = ibresp;
175  assign bvalid = ibvalid;
176  assign bready = ibready;
177 
178  assign arready = iarready;
179  assign arid = iarid;
180  assign araddr = iaraddr;
181  assign arlen = iarlen;
182  assign arsize = iarsize;
183  assign arburst = iarburst;
184  assign arlock = iarlock;
185  assign arcache = iarcache;
186  assign arprot = iarprot;
187  assign arqos = iarqos;
188  assign arvalid = iarvalid;
189 
190  assign rid = irid;
191  assign rresp = irresp;
192  assign rvalid = irvalid;
193  assign rdata = irdata;
194  assign rlast = irlast;
195  assign rready = irready;
196 
197 
198  {
199  iawid = z;
200  iawaddr = z;
201  iawvalid = z;
202  iawready = z;
203  iawlen = z;
204  iawsize = z;
205  iawburst = z;
206  iawlock = z;
207  iawcache = z;
208  iawprot = z;
209  iawqos = z;
210 
211  iwready = z;
212  iwdata = z;
213  iwstrb = z;
214  iwlast = z;
215  iwvalid = z;
216 
217  ibid = z;
218  ibresp = z;
219  ibvalid = z;
220  ibready = z;
221 
222  iarready = z;
223  iarid = z;
224  iaraddr = z;
225  iarlen = z;
226  iarsize = z;
227  iarburst = z;
228  iarlock = z;
229  iarcache = z;
230  iarprot = z;
231  iarqos = z;
232  iarvalid = z;
233 
234  irid = z;
235  irresp = z;
236  irvalid = z;
237  irdata = z;
238  irlast = z;
239  irready = z;
240 
241  }
242 
243 
244 
245 // extern task write(bit [63:0] addr, bit [63:0] data);
246 
247  // driver_type_t m_type;
248 
249 
250 #include "uvm_macros.svh"
251 
252 class axi_if_concrete : public axi_if_abstract { public:
253  uvm_object_utils(axi_if_concrete)
254 
255  new (string name="axi_if_concrete") {
256  super.new(name);
257 }
258 
259  int get_data_bus_width() {
260  return C_AXI_DATA_WIDTH;
261 }
262 
263 // wait for n clock cycles. Default: 1
264 task wait_for_clks(int cnt=1) {
265  if (cnt==0) return;
266 
267  repeat (cnt) @(posedge clk);
268 }
269 
270 task wait_for_not_in_reset() {
271  wait (reset == 0b0);
272 }
273 
274 task wait_for_awready_awvalid() {
275 
276  if (awready == 0b1 && awvalid == 10b1)
277  return;
278  else if (awvalid == 0b1)
279  @(posedge awready);
280  else if (awready == 0b1)
281  @(posedge awvalid);
282  else
283  @(posedge awvalid or posedge awready) wait_for_awready_awvalid();
284 
285 }
286 
287 task wait_for_awvalid() {
288  @(posedge awvalid);
289 }
290 
291 task wait_for_wready() {
292  while (wready != 0b1)
293  wait_for_clks(.cnt(1));
294 }
295 
296 task wait_for_bvalid() {
297  @(posedge bvalid);
298 }
299 
300 task wait_for_write_address(output axi_seq_item_aw_vector_s s) {
301  //wait_for_awready_awvalid();
302  forever {
303  @(posedge clk) {
304  if (awready == 0b1 && awvalid== 10b1) {
305  read_aw(.s(s));
306  return;
307  }
308  }
309  }
310 }
311 
312 task wait_for_write_data(output axi_seq_item_w_vector_s s) {
313 
314  forever {
315  @(posedge clk) {
316  if (wready == 0b1 && wvalid== 10b1) {
317  read_w(.s(s));
318  return;
319  }
320  }
321  }
322 }
323 
324 task wait_for_write_response(output axi_seq_item_b_vector_s s) {
325 
326  forever {
327  @(posedge clk) {
328  if (bready == 0b1 && bvalid== 10b1) {
329  read_b(.s(s));
330  return;
331  }
332  }
333  }
334 }
335 
336 task wait_for_read_address(output axi_seq_item_ar_vector_s s) {
337  //wait_for_awready_awvalid();
338  forever {
339  @(posedge clk) {
340  if (arready == 0b1 && arvalid== 10b1) {
341  read_ar(.s(s));
342  return;
343  }
344  }
345  }
346 }
347 
348 task wait_for_read_data(output axi_seq_item_r_vector_s s) {
349 
350  forever {
351  @(posedge clk) {
352  if (rready == 0b1 && rvalid== 10b1) {
353  read_r(.s(s));
354  return;
355  }
356  }
357  }
358 }
359 
360  bit get_awready_awvalid() {
361  return awready & awvalid;
362 }
363 
364  bit get_awready() {
365  return awready;
366 }
367 
368  bit get_wready_wvalid() {
369  return wvalid & wready;
370 }
371 
372  bit get_wvalid() {
373  return wvalid;
374 }
375 
376  bit get_wready() {
377  return wready;
378 }
379 
380  bit get_bready_bvalid() {
381  return bready & bvalid;
382 }
383 
384  bit get_bvalid() {
385  return bvalid;
386 }
387 
388  bit get_bready() {
389  return bready;
390 }
391 
392  bit get_arready_arvalid() {
393  return arready & arvalid;
394 }
395 
396  bit get_arready() {
397  return arready;
398 }
399 
400  bit get_rready_rvalid() {
401  return rvalid & rready;
402 }
403 
404  bit get_rvalid() {
405  return rvalid;
406 }
407 
408  bit get_rready() {
409  return rready;
410 }
411 
412 task set_awvalid(bit state) {
413  wait_for_clks(.cnt(1));
414  iawvalid <= state;
415 }
416 
417 task set_awready(bit state) {
418  wait_for_clks(.cnt(1));
419  iawready <= state;
420 }
421 
422 task set_wvalid(bit state) {
423  wait_for_clks(.cnt(1));
424  iwvalid <= state;
425 }
426 
427 task set_wready(bit state) {
428  wait_for_clks(.cnt(1));
429  iwready <= state;
430 }
431 
432 task set_bvalid(bit state) {
433  wait_for_clks(.cnt(1));
434  ibvalid <= state;
435 }
436 
437 task set_bready(bit state) {
438  wait_for_clks(.cnt(1));
439  ibready <= state;
440 }
441 
442 task set_arvalid(bit state) {
443  wait_for_clks(.cnt(1));
444  iarvalid <= state;
445 }
446 
447 task set_rvalid(bit state) {
448  wait_for_clks(.cnt(1));
449  irvalid <= state;
450 }
451 
452 task set_rready(bit state) {
453  wait_for_clks(.cnt(1));
454  irready <= state;
455 }
456 
457  void enable_awready_toggle_pattern(bit <31:0> pattern) {
458  awready_toggle_pattern=pattern;
459  awready_toggle_pattern_enable=1;
460 }
461 
462  void disable_awready_toggle_pattern() {
463  awready_toggle_pattern_enable = 0;
464 }
465 
466  void enable_wready_toggle_pattern(bit <31:0> pattern) {
467  wready_toggle_pattern=pattern;
468  wready_toggle_pattern_enable=1;
469 }
470 
471  void disable_wready_toggle_pattern() {
472  wready_toggle_pattern_enable = 0;
473 }
474 
475  void enable_bready_toggle_pattern(bit <31:0> pattern) {
476  bready_toggle_pattern=pattern;
477  bready_toggle_pattern_enable=1;
478 }
479 
480  void disable_bready_toggle_pattern() {
481  bready_toggle_pattern_enable = 0;
482 }
483 
484  void enable_arready_toggle_pattern(bit <31:0> pattern) {
485  arready_toggle_pattern=pattern;
486  arready_toggle_pattern_enable=1;
487 }
488 
489  void disable_arready_toggle_pattern() {
490  arready_toggle_pattern_enable = 0;
491 }
492 
493  void enable_rready_toggle_pattern(bit <31:0> pattern) {
494  rready_toggle_pattern=pattern;
495  rready_toggle_pattern_enable=1;
496 }
497 
498  void disable_rready_toggle_pattern() {
499  rready_toggle_pattern_enable = 0;
500 }
501 
502 
503  void write_aw(axi_seq_item_aw_vector_s s, bit valid=0b1) {
504 
505  iawvalid <= valid;
506  iawid <= s.awid;
507  iawaddr <= s.awaddr;
508  iawlen <= s.awlen;
509  iawsize <= s.awsize;
510  iawburst <= s.awburst;
511  iawlock <= s.awlock;
512  iawcache <= s.awcache;
513  iawprot <= s.awprot;
514  iawqos <= s.awqos;
515 
516 
517 }
518 
519 
520  void write_w(axi_seq_item_w_vector_s s) {
521 
522  iwvalid <= s.wvalid;
523  iwdata <= s.wdata;
524  iwstrb <= s.wstrb;
525  iwlast <= s.wlast;
526 
527 }
528 
529  void write_b(axi_seq_item_b_vector_s s, bit valid=0b1) {
530 
531  ibvalid <= valid;
532  ibid <= s.bid;
533  ibresp <= s.bresp;
534 
535 }
536 
537  void read_aw(output axi_seq_item_aw_vector_s s) {
538 
539  s.awvalid = awvalid;
540  s.awid = awid;
541  s.awaddr = awaddr;
542  s.awlen = awlen;
543  s.awsize = awsize;
544  s.awburst = awburst;
545  s.awlock = awlock;
546  s.awcache = awcache;
547  s.awprot = awprot;
548  s.awqos = awqos;
549 
550 }
551 
552 
553  void read_w(output axi_seq_item_w_vector_s s) {
554 
555  s.wvalid = wvalid;
556  s.wdata = wdata;
557  s.wstrb = wstrb;
558  s.wlast = wlast;
559 
560 }
561 
562  void read_b(output axi_seq_item_b_vector_s s) {
563  s.bid = bid;
564  s.bresp = bresp;
565 }
566 
567 
568  void write_ar(axi_seq_item_ar_vector_s s, bit valid=0b1) {
569 
570  iarvalid <= valid;
571  iarid <= s.arid;
572  iaraddr <= s.araddr;
573  iarlen <= s.arlen;
574  iarsize <= s.arsize;
575  iarburst <= s.arburst;
576  iarlock <= s.arlock;
577  iarcache <= s.arcache;
578  iarprot <= s.arprot;
579  iarqos <= s.arqos;
580 
581 
582 }
583 
584  void write_r(axi_seq_item_r_vector_s s) {
585 
586  irvalid <= s.rvalid;
587  irdata <= s.rdata;
588  //irstrb <= s.rstrb;
589  irlast <= s.rlast;
590  irid <= s.rid;
591 
592 }
593 
594 
595  void read_ar(output axi_seq_item_ar_vector_s s) {
596 
597  s.arvalid = arvalid;
598  s.arid = arid;
599  s.araddr = araddr;
600  s.arlen = arlen;
601  s.arsize = arsize;
602  s.arburst = arburst;
603  s.arlock = arlock;
604  s.arcache = arcache;
605  s.arprot = arprot;
606  s.arqos = arqos;
607 
608 }
609 
610  void read_r(output axi_seq_item_r_vector_s s) {
611 
612  s.rvalid = rvalid;
613  s.rdata = rdata;
614  s.rlast = rlast;
615  s.rid = rid;
616  s.rresp = rresp;
617 
618 }
619 
620 };
621 
622 
623 // *ready toggling
624  {
625  forever {
626  @(posedge clk) {
627  if (awready_toggle_pattern_enable == 0b1) {
628  awready_toggle_pattern[31:0] <= {awready_toggle_pattern[30:0], awready_toggle_pattern[31]};
629  iawready <= awready_toggle_pattern[31];
630  }
631  }
632  }
633 }
634 
635 
636  {
637  forever {
638  @(posedge clk) {
639  if (wready_toggle_pattern_enable == 0b1) {
640  wready_toggle_pattern[31:0] <= {wready_toggle_pattern[30:0], wready_toggle_pattern[31]};
641  iwready <= wready_toggle_pattern[31];
642  }
643  }
644  }
645 }
646 
647  {
648  forever {
649  @(posedge clk) {
650  if (bready_toggle_pattern_enable == 0b1) {
651  bready_toggle_pattern[31:0] <= {bready_toggle_pattern[30:0], bready_toggle_pattern[31]};
652  ibready <= bready_toggle_pattern[31];
653  }
654  }
655  }
656 }
657 
658 
659 
660  {
661  forever {
662  @(posedge clk) {
663  if (arready_toggle_pattern_enable == 0b1) {
664  arready_toggle_pattern[31:0] <= {arready_toggle_pattern[30:0],
665  arready_toggle_pattern[31]};
666 
667  iarready <= arready_toggle_pattern[31];
668  }
669  }
670  }
671 }
672 
673  {
674  forever {
675  @(posedge clk) {
676  if (rready_toggle_pattern_enable == 0b1) {
677  rready_toggle_pattern[31:0] <= {rready_toggle_pattern[30:0],
678  rready_toggle_pattern[31]};
679 
680  irready <= rready_toggle_pattern[31];
681  }
682  }
683  }
684 }
685 
686 
687  void use_concrete_class() { //axi_pkg::driver_type_t drv_type);
688 
689 // m_type=drv_type;
690 
691  axi_if_abstract::type_id::set_type_override( axi_if_concrete::get_type());
692  // `uvm_info("blah", $sformatf("%m -- HEY, running set_inst_override in _if"), UVM_INFO)
693 
694 }
695 
696 
697 }
698 
699 
logic< 2:0 > awprot
Definition: axi_pkg.sv:123
parameter C_AXI_LEN_WIDTH
Definition: axi_pkg.sv:65
logic< 1:0 > arburst
Definition: axi_pkg.sv:185
logic< C_AXI_ID_WIDTH-1:0 > bid
Definition: axi_pkg.sv:163
logic< C_AXI_ID_WIDTH-1:0 > awid
Definition: axi_pkg.sv:114
logic< 2:0 > arsize
Definition: axi_pkg.sv:184
logic< C_AXI_DATA_WIDTH/8-1:0 > wstrb
Definition: axi_pkg.sv:143
logic< 3:0 > awqos
Definition: axi_pkg.sv:124
This packed struct is used to send read data channel information between the DUT and TB...
Definition: axi_pkg.sv:205
logic< 0:0 > awlock
Definition: axi_pkg.sv:121
This packed struct is used to send write address channel information between the DUT and TB...
Definition: axi_pkg.sv:113
logic< 1:0 > bresp
Definition: axi_pkg.sv:164
logic< 2:0 > awsize
Definition: axi_pkg.sv:119
logic< C_AXI_DATA_WIDTH-1:0 > wdata
Definition: axi_pkg.sv:142
logic< C_AXI_DATA_WIDTH-1:0 > rdata
Definition: axi_pkg.sv:206
parameter C_AXI_ID_WIDTH
Definition: axi_pkg.sv:41
logic< 2:0 > arprot
Definition: axi_pkg.sv:188
logic< 3:0 > arcache
Definition: axi_pkg.sv:187
logic< 3:0 > arqos
Definition: axi_pkg.sv:189
logic< C_AXI_ID_WIDTH-1:0 > arid
Definition: axi_pkg.sv:179
abstract base class for polymorphic interface class (axi_if_concrete) for AXI UVM environment ...
logic< 3:0 > awcache
Definition: axi_pkg.sv:122
parameter C_AXI_DATA_WIDTH
Definition: axi_pkg.sv:48
logic< C_AXI_ID_WIDTH-1:0 > rid
Definition: axi_pkg.sv:210
logic< C_AXI_ADDR_WIDTH-1:0 > araddr
Definition: axi_pkg.sv:180
logic< C_AXI_ADDR_WIDTH-1:0 > awaddr
Definition: axi_pkg.sv:115
parameter C_AXI_ADDR_WIDTH
Definition: axi_pkg.sv:59
logic< C_AXI_LEN_WIDTH-1:0 > awlen
Definition: axi_pkg.sv:118
This packed struct is used to send write data channel information between the DUT and TB...
Definition: axi_pkg.sv:141
interface axi_if(input wire clk, input wire reset, inout wire awready, inout wire< C_AXI_ID_WIDTH-1:0 > awid, inout wire< C_AXI_ADDR_WIDTH-1:0 > awaddr, inout wire< C_AXI_LEN_WIDTH-1:0 > awlen, inout wire< 2:0 > awsize, inout wire< 1:0 > awburst, inout wire< 0:0 > awlock, inout wire< 3:0 > awcache, inout wire< 2:0 > awprot, inout wire< 3:0 > awqos, inout wire awvalid, inout wire wready, inout wire< C_AXI_DATA_WIDTH-1:0 > wdata, inout wire< C_AXI_DATA_WIDTH/8-1:0 > wstrb, inout wire wlast, inout wire wvalid, inout wire< C_AXI_ID_WIDTH-1:0 > bid, inout wire< 1:0 > bresp, inout wire bvalid, inout wire bready, inout wire arready, inout wire< C_AXI_ID_WIDTH-1:0 > arid, inout wire< C_AXI_ADDR_WIDTH-1:0 > araddr, inout wire< C_AXI_LEN_WIDTH-1:0 > arlen, inout wire< 2:0 > arsize, inout wire< 1:0 > arburst, inout wire< 0:0 > arlock, inout wire< 3:0 > arcache, inout wire< 2:0 > arprot, inout wire< 3:0 > arqos, inout wire arvalid, inout wire< C_AXI_ID_WIDTH-1:0 > rid, inout wire< 1:0 > rresp, inout wire rvalid, inout wire< C_AXI_DATA_WIDTH-1:0 > rdata, inout wire rlast, inout wire rready)
bindable interface for AXI UVM environment
Definition: axi_if.sv:39
logic< C_AXI_LEN_WIDTH-1:0 > arlen
Definition: axi_pkg.sv:183
logic< 0:0 > arlock
Definition: axi_pkg.sv:186
This packed struct is used to send write response channel information between the DUT and TB...
Definition: axi_pkg.sv:162
logic< 1:0 > awburst
Definition: axi_pkg.sv:120
This packed struct is used to send read address channel information between the DUT and TB...
Definition: axi_pkg.sv:178