|
12 | 12 | // Authors: |
13 | 13 | // - Thomas Benz <[email protected]> |
14 | 14 |
|
| 15 | +`include "axi/assign.svh" |
15 | 16 | /// Synthesizable test module comparing two AXI channels of the same type |
16 | 17 | /// This module is meant to be used in FPGA-based verification. |
17 | 18 | module axi_bus_compare #( |
@@ -79,22 +80,23 @@ module axi_bus_compare #( |
79 | 80 | // Channel Signals |
80 | 81 | //----------------------------------- |
81 | 82 | // assign request payload A |
82 | | - assign axi_a_req_o.aw = axi_a_req_i.aw; |
83 | | - assign axi_a_req_o.w = axi_a_req_i.w; |
84 | | - assign axi_a_req_o.ar = axi_a_req_i.ar; |
| 83 | + |
| 84 | + `AXI_ASSIGN_AW_STRUCT(axi_a_req_o.aw, axi_a_req_i.aw) |
| 85 | + `AXI_ASSIGN_W_STRUCT(axi_a_req_o.w, axi_a_req_i.w) |
| 86 | + `AXI_ASSIGN_AR_STRUCT(axi_a_req_o.ar, axi_a_req_i.ar) |
85 | 87 |
|
86 | 88 | // assign response payload A |
87 | | - assign axi_a_rsp_o.r = axi_a_rsp_i.r; |
88 | | - assign axi_a_rsp_o.b = axi_a_rsp_i.b; |
| 89 | + `AXI_ASSIGN_R_STRUCT(axi_a_rsp_o.r, axi_a_rsp_i.r) |
| 90 | + `AXI_ASSIGN_B_STRUCT(axi_a_rsp_o.b, axi_a_rsp_i.b) |
89 | 91 |
|
90 | 92 | // assign request payload B |
91 | | - assign axi_b_req_o.aw = axi_b_req_i.aw; |
92 | | - assign axi_b_req_o.w = axi_b_req_i.w; |
93 | | - assign axi_b_req_o.ar = axi_b_req_i.ar; |
| 93 | + `AXI_ASSIGN_AW_STRUCT(axi_b_req_o.aw, axi_b_req_i.aw) |
| 94 | + `AXI_ASSIGN_W_STRUCT(axi_b_req_o.w, axi_b_req_i.w) |
| 95 | + `AXI_ASSIGN_AR_STRUCT(axi_b_req_o.ar, axi_b_req_i.ar) |
94 | 96 |
|
95 | 97 | // assign response payload B |
96 | | - assign axi_b_rsp_o.r = axi_b_rsp_i.r; |
97 | | - assign axi_b_rsp_o.b = axi_b_rsp_i.b; |
| 98 | + `AXI_ASSIGN_R_STRUCT(axi_b_rsp_o.r, axi_b_rsp_i.r) |
| 99 | + `AXI_ASSIGN_B_STRUCT(axi_b_rsp_o.b, axi_b_rsp_i.b) |
98 | 100 |
|
99 | 101 | // fifo handshaking signals A |
100 | 102 | id_t fifo_valid_aw_a, fifo_ready_aw_a; |
@@ -314,40 +316,38 @@ module axi_bus_compare #( |
314 | 316 | // Input Handshaking A |
315 | 317 | //----------------------------------- |
316 | 318 | always_comb begin : gen_handshaking_a |
317 | | - for (int id = 0; id < 2**AxiIdWidth; id++) begin |
318 | | - // aw |
319 | | - // defaults |
320 | | - fifo_valid_aw_a = '0; |
321 | | - fifo_sel_ready_aw_a = '0; |
322 | | - // assign according id |
323 | | - fifo_valid_aw_a [axi_a_req_i.aw.id] = fifo_sel_valid_aw_a; |
324 | | - fifo_sel_ready_aw_a = fifo_ready_aw_a[axi_a_req_i.aw.id]; |
325 | | - |
326 | | - |
327 | | - // b |
328 | | - // defaults |
329 | | - fifo_valid_b_a = '0; |
330 | | - fifo_sel_ready_b_a = '0; |
331 | | - // assign according id |
332 | | - fifo_valid_b_a [axi_a_rsp_i.b.id] = fifo_sel_valid_b_a; |
333 | | - fifo_sel_ready_b_a = fifo_ready_b_a[axi_a_rsp_i.b.id]; |
334 | | - |
335 | | - // ar |
336 | | - // defaults |
337 | | - fifo_valid_ar_a = '0; |
338 | | - fifo_sel_ready_ar_a = '0; |
339 | | - // assign according id |
340 | | - fifo_valid_ar_a [axi_a_req_i.ar.id] = fifo_sel_valid_ar_a; |
341 | | - fifo_sel_ready_ar_a = fifo_ready_ar_a[axi_a_req_i.ar.id]; |
342 | | - |
343 | | - // b |
344 | | - // defaults |
345 | | - fifo_valid_r_a = '0; |
346 | | - fifo_sel_ready_r_a = '0; |
347 | | - // assign according id |
348 | | - fifo_valid_r_a [axi_a_rsp_i.r.id] = fifo_sel_valid_r_a; |
349 | | - fifo_sel_ready_r_a = fifo_ready_r_a[axi_a_rsp_i.r.id]; |
350 | | - end |
| 319 | + // aw |
| 320 | + // defaults |
| 321 | + fifo_valid_aw_a = '0; |
| 322 | + fifo_sel_ready_aw_a = '0; |
| 323 | + // assign according id |
| 324 | + fifo_valid_aw_a [axi_a_req_i.aw.id] = fifo_sel_valid_aw_a; |
| 325 | + fifo_sel_ready_aw_a = fifo_ready_aw_a[axi_a_req_i.aw.id]; |
| 326 | + |
| 327 | + |
| 328 | + // b |
| 329 | + // defaults |
| 330 | + fifo_valid_b_a = '0; |
| 331 | + fifo_sel_ready_b_a = '0; |
| 332 | + // assign according id |
| 333 | + fifo_valid_b_a [axi_a_rsp_i.b.id] = fifo_sel_valid_b_a; |
| 334 | + fifo_sel_ready_b_a = fifo_ready_b_a[axi_a_rsp_i.b.id]; |
| 335 | + |
| 336 | + // ar |
| 337 | + // defaults |
| 338 | + fifo_valid_ar_a = '0; |
| 339 | + fifo_sel_ready_ar_a = '0; |
| 340 | + // assign according id |
| 341 | + fifo_valid_ar_a [axi_a_req_i.ar.id] = fifo_sel_valid_ar_a; |
| 342 | + fifo_sel_ready_ar_a = fifo_ready_ar_a[axi_a_req_i.ar.id]; |
| 343 | + |
| 344 | + // b |
| 345 | + // defaults |
| 346 | + fifo_valid_r_a = '0; |
| 347 | + fifo_sel_ready_r_a = '0; |
| 348 | + // assign according id |
| 349 | + fifo_valid_r_a [axi_a_rsp_i.r.id] = fifo_sel_valid_r_a; |
| 350 | + fifo_sel_ready_r_a = fifo_ready_r_a[axi_a_rsp_i.r.id]; |
351 | 351 | end |
352 | 352 |
|
353 | 353 |
|
@@ -516,40 +516,38 @@ module axi_bus_compare #( |
516 | 516 | // Input Handshaking B |
517 | 517 | //----------------------------------- |
518 | 518 | always_comb begin : gen_handshaking_b |
519 | | - for (int id = 0; id < 2**AxiIdWidth; id++) begin |
520 | | - // aw |
521 | | - // defaults |
522 | | - fifo_valid_aw_b = '0; |
523 | | - fifo_sel_ready_aw_b = '0; |
524 | | - // assign according id |
525 | | - fifo_valid_aw_b [axi_b_req_i.aw.id] = fifo_sel_valid_aw_b; |
526 | | - fifo_sel_ready_aw_b = fifo_ready_aw_b[axi_b_req_i.aw.id]; |
527 | | - |
528 | | - |
529 | | - // b |
530 | | - // defaults |
531 | | - fifo_valid_b_b = '0; |
532 | | - fifo_sel_ready_b_b = '0; |
533 | | - // assign according id |
534 | | - fifo_valid_b_b [axi_b_rsp_i.b.id] = fifo_sel_valid_b_b; |
535 | | - fifo_sel_ready_b_b = fifo_ready_b_b[axi_b_rsp_i.b.id]; |
536 | | - |
537 | | - // ar |
538 | | - // defaults |
539 | | - fifo_valid_ar_b = '0; |
540 | | - fifo_sel_ready_ar_b = '0; |
541 | | - // assign according id |
542 | | - fifo_valid_ar_b [axi_b_req_i.ar.id] = fifo_sel_valid_ar_b; |
543 | | - fifo_sel_ready_ar_b = fifo_ready_ar_b[axi_b_req_i.ar.id]; |
544 | | - |
545 | | - // b |
546 | | - // defaults |
547 | | - fifo_valid_r_b = '0; |
548 | | - fifo_sel_ready_r_b = '0; |
549 | | - // assign according id |
550 | | - fifo_valid_r_b [axi_b_rsp_i.r.id] = fifo_sel_valid_r_b; |
551 | | - fifo_sel_ready_r_b = fifo_ready_r_b[axi_b_rsp_i.r.id]; |
552 | | - end |
| 519 | + // aw |
| 520 | + // defaults |
| 521 | + fifo_valid_aw_b = '0; |
| 522 | + fifo_sel_ready_aw_b = '0; |
| 523 | + // assign according id |
| 524 | + fifo_valid_aw_b [axi_b_req_i.aw.id] = fifo_sel_valid_aw_b; |
| 525 | + fifo_sel_ready_aw_b = fifo_ready_aw_b[axi_b_req_i.aw.id]; |
| 526 | + |
| 527 | + |
| 528 | + // b |
| 529 | + // defaults |
| 530 | + fifo_valid_b_b = '0; |
| 531 | + fifo_sel_ready_b_b = '0; |
| 532 | + // assign according id |
| 533 | + fifo_valid_b_b [axi_b_rsp_i.b.id] = fifo_sel_valid_b_b; |
| 534 | + fifo_sel_ready_b_b = fifo_ready_b_b[axi_b_rsp_i.b.id]; |
| 535 | + |
| 536 | + // ar |
| 537 | + // defaults |
| 538 | + fifo_valid_ar_b = '0; |
| 539 | + fifo_sel_ready_ar_b = '0; |
| 540 | + // assign according id |
| 541 | + fifo_valid_ar_b [axi_b_req_i.ar.id] = fifo_sel_valid_ar_b; |
| 542 | + fifo_sel_ready_ar_b = fifo_ready_ar_b[axi_b_req_i.ar.id]; |
| 543 | + |
| 544 | + // b |
| 545 | + // defaults |
| 546 | + fifo_valid_r_b = '0; |
| 547 | + fifo_sel_ready_r_b = '0; |
| 548 | + // assign according id |
| 549 | + fifo_valid_r_b [axi_b_rsp_i.r.id] = fifo_sel_valid_r_b; |
| 550 | + fifo_sel_ready_r_b = fifo_ready_r_b[axi_b_rsp_i.r.id]; |
553 | 551 | end |
554 | 552 |
|
555 | 553 |
|
@@ -584,4 +582,4 @@ module axi_bus_compare #( |
584 | 582 | assign mismatch_o = (|aw_mismatch_o) | (|w_mismatch_o) | (|b_mismatch_o) | |
585 | 583 | (|ar_mismatch_o) | (|r_mismatch_o); |
586 | 584 |
|
587 | | -endmodule : axi_bus_compare |
| 585 | +endmodule |
0 commit comments