@@ -84,12 +84,20 @@ module tb_axi_sim_mem #(
84
84
drv.reset_master ();
85
85
wait (rst_n);
86
86
// AW
87
- rand_success = aw_beat.randomize (); assert (rand_success);
88
- aw_beat.ax_addr >>= $clog2 (StrbWidth); // align address with data width
89
- aw_beat.ax_addr <<= $clog2 (StrbWidth);
90
- aw_beat.ax_len = $urandom ();
91
- aw_beat.ax_size = $clog2 (StrbWidth);
92
- aw_beat.ax_burst = axi_pkg :: BURST_INCR ;
87
+ forever begin
88
+ rand_success = aw_beat.randomize (); assert (rand_success);
89
+ aw_beat.ax_addr >>= $clog2 (StrbWidth); // align address with data width
90
+ aw_beat.ax_addr <<= $clog2 (StrbWidth);
91
+ aw_beat.ax_len = $urandom ();
92
+ aw_beat.ax_size = $clog2 (StrbWidth);
93
+ aw_beat.ax_burst = axi_pkg :: BURST_INCR ;
94
+ if (axi_pkg :: beat_addr (aw_beat.ax_addr, aw_beat.ax_size, aw_beat.ax_len, aw_beat.ax_burst, 0 ) >> 12 == (
95
+ axi_pkg :: beat_addr (aw_beat.ax_addr, aw_beat.ax_size, aw_beat.ax_len, aw_beat.ax_burst, aw_beat.ax_len)
96
+ + axi_pkg :: beat_upper_byte (aw_beat.ax_addr, aw_beat.ax_size, aw_beat.ax_len, aw_beat.ax_burst, StrbWidth, aw_beat.ax_len)
97
+ ) >> 12 ) begin
98
+ break ;
99
+ end
100
+ end
93
101
drv.send_aw (aw_beat);
94
102
// W beats
95
103
for (int unsigned i = 0 ; i <= aw_beat.ax_len; i++ ) begin
@@ -105,10 +113,18 @@ module tb_axi_sim_mem #(
105
113
drv.recv_b (b_beat);
106
114
assert (b_beat.b_resp == axi_pkg :: RESP_OKAY );
107
115
// AR
108
- ar_beat.ax_addr = aw_beat.ax_addr;
109
- ar_beat.ax_len = aw_beat.ax_len;
110
- ar_beat.ax_size = aw_beat.ax_size;
111
- ar_beat.ax_burst = aw_beat.ax_burst;
116
+ forever begin
117
+ ar_beat.ax_addr = aw_beat.ax_addr;
118
+ ar_beat.ax_len = aw_beat.ax_len;
119
+ ar_beat.ax_size = aw_beat.ax_size;
120
+ ar_beat.ax_burst = aw_beat.ax_burst;
121
+ if (axi_pkg :: beat_addr (ar_beat.ax_addr, ar_beat.ax_size, ar_beat.ax_len, ar_beat.ax_burst, 0 ) >> 12 == (
122
+ axi_pkg :: beat_addr (ar_beat.ax_addr, ar_beat.ax_size, ar_beat.ax_len, ar_beat.ax_burst, ar_beat.ax_len)
123
+ + axi_pkg :: beat_upper_byte (ar_beat.ax_addr, ar_beat.ax_size, ar_beat.ax_len, ar_beat.ax_burst, StrbWidth, ar_beat.ax_len)
124
+ ) >> 12 ) begin
125
+ break ;
126
+ end
127
+ end
112
128
drv.send_ar (ar_beat);
113
129
// R beats
114
130
for (int unsigned i = 0 ; i <= ar_beat.ax_len; i++ ) begin
0 commit comments