23
23
`include " axi/assign.svh"
24
24
25
25
module tb_axi_xbar # (
26
- parameter bit TbEnAtop = 1'b1 , // enable atomic operations (ATOPs)
27
- parameter bit TbEnExcl = 1'b0 , // enable exclusive accesses
28
- parameter bit TbUniqueIds = 1'b0 // restrict to only unique IDs
26
+ parameter bit TbEnAtop = 1'b1 , // enable atomic operations (ATOPs)
27
+ parameter bit TbEnExcl = 1'b0 , // enable exclusive accesses
28
+ parameter bit TbUniqueIds = 1'b0 , // restrict to only unique IDs
29
+ parameter int unsigned TbNumMst = 32'd6 , // how many AXI masters there are
30
+ parameter int unsigned TbNumSlv = 32'd8 // how many AXI slaves there are
29
31
);
30
- // Dut parameters
31
- localparam int unsigned NoMasters = 6 ; // How many Axi Masters there are
32
- localparam int unsigned NoSlaves = 8 ; // How many Axi Slaves there are
33
32
// Random master no Transactions
34
- localparam int unsigned NoWrites = 125 ; // How many writes per master
35
- localparam int unsigned NoReads = 125 ; // How many reads per master
33
+ localparam int unsigned NoWrites = 80 ; // How many writes per master
34
+ localparam int unsigned NoReads = 80 ; // How many reads per master
36
35
// timing parameters
37
36
localparam time CyclTime = 10ns ;
38
37
localparam time ApplTime = 2ns ;
@@ -41,15 +40,15 @@ module tb_axi_xbar #(
41
40
// axi configuration
42
41
localparam int unsigned AxiIdWidthMasters = 4 ;
43
42
localparam int unsigned AxiIdUsed = 3 ; // Has to be <= AxiIdWidthMasters
44
- localparam int unsigned AxiIdWidthSlaves = AxiIdWidthMasters + $clog2 (NoMasters );
43
+ localparam int unsigned AxiIdWidthSlaves = AxiIdWidthMasters + $clog2 (TbNumMst );
45
44
localparam int unsigned AxiAddrWidth = 32 ; // Axi Address Width
46
45
localparam int unsigned AxiDataWidth = 64 ; // Axi Data Width
47
46
localparam int unsigned AxiStrbWidth = AxiDataWidth / 8 ;
48
47
localparam int unsigned AxiUserWidth = 5 ;
49
48
// in the bench can change this variables which are set here freely
50
49
localparam axi_pkg :: xbar_cfg_t xbar_cfg = '{
51
- NoSlvPorts : NoMasters ,
52
- NoMstPorts : NoSlaves ,
50
+ NoSlvPorts : TbNumMst ,
51
+ NoMstPorts : TbNumSlv ,
53
52
MaxMstTrans : 10 ,
54
53
MaxSlvTrans : 6 ,
55
54
FallThrough : 1'b0 ,
@@ -86,14 +85,14 @@ module tb_axi_xbar #(
86
85
`AXI_TYPEDEF_RESP_T (slv_resp_t, b_chan_slv_t, r_chan_slv_t)
87
86
88
87
localparam rule_t [xbar_cfg.NoAddrRules- 1 : 0 ] AddrMap = '{
89
- '{ idx : 32'd7 , start_addr : 32'h0001_0000 , end_addr : 32'h0001_1000 } ,
90
- '{ idx : 32'd6 , start_addr : 32'h0000_9000 , end_addr : 32'h0001_0000 } ,
91
- '{ idx : 32'd5 , start_addr : 32'h0000_8000 , end_addr : 32'h0000_9000 } ,
92
- '{ idx : 32'd4 , start_addr : 32'h0000_7000 , end_addr : 32'h0000_8000 } ,
93
- '{ idx : 32'd3 , start_addr : 32'h0000_6300 , end_addr : 32'h0000_7000 } ,
94
- '{ idx : 32'd2 , start_addr : 32'h0000_4000 , end_addr : 32'h0000_6300 } ,
95
- '{ idx : 32'd1 , start_addr : 32'h0000_3000 , end_addr : 32'h0000_4000 } ,
96
- '{ idx : 32'd0 , start_addr : 32'h0000_0000 , end_addr : 32'h0000_3000 }
88
+ '{ idx : 32'd7 % TbNumSlv , start_addr : 32'h0001_0000 , end_addr : 32'h0001_1000 } ,
89
+ '{ idx : 32'd6 % TbNumSlv , start_addr : 32'h0000_9000 , end_addr : 32'h0001_0000 } ,
90
+ '{ idx : 32'd5 % TbNumSlv , start_addr : 32'h0000_8000 , end_addr : 32'h0000_9000 } ,
91
+ '{ idx : 32'd4 % TbNumSlv , start_addr : 32'h0000_7000 , end_addr : 32'h0000_8000 } ,
92
+ '{ idx : 32'd3 % TbNumSlv , start_addr : 32'h0000_6300 , end_addr : 32'h0000_7000 } ,
93
+ '{ idx : 32'd2 % TbNumSlv , start_addr : 32'h0000_4000 , end_addr : 32'h0000_6300 } ,
94
+ '{ idx : 32'd1 % TbNumSlv , start_addr : 32'h0000_3000 , end_addr : 32'h0000_4000 } ,
95
+ '{ idx : 32'd0 % TbNumSlv , start_addr : 32'h0000_0000 , end_addr : 32'h0000_3000 }
97
96
} ;
98
97
99
98
typedef axi_test :: axi_rand_master # (
@@ -129,15 +128,15 @@ module tb_axi_xbar #(
129
128
logic clk;
130
129
// DUT signals
131
130
logic rst_n;
132
- logic [NoMasters - 1 : 0 ] end_of_sim;
131
+ logic [TbNumMst - 1 : 0 ] end_of_sim;
133
132
134
133
// master structs
135
- mst_req_t [NoMasters - 1 : 0 ] masters_req;
136
- mst_resp_t [NoMasters - 1 : 0 ] masters_resp;
134
+ mst_req_t [TbNumMst - 1 : 0 ] masters_req;
135
+ mst_resp_t [TbNumMst - 1 : 0 ] masters_resp;
137
136
138
137
// slave structs
139
- slv_req_t [NoSlaves - 1 : 0 ] slaves_req;
140
- slv_resp_t [NoSlaves - 1 : 0 ] slaves_resp;
138
+ slv_req_t [TbNumSlv - 1 : 0 ] slaves_req;
139
+ slv_resp_t [TbNumSlv - 1 : 0 ] slaves_resp;
141
140
142
141
// -------------------------------
143
142
// AXI Interfaces
@@ -147,20 +146,20 @@ module tb_axi_xbar #(
147
146
.AXI_DATA_WIDTH ( AxiDataWidth ),
148
147
.AXI_ID_WIDTH ( AxiIdWidthMasters ),
149
148
.AXI_USER_WIDTH ( AxiUserWidth )
150
- ) master [NoMasters - 1 : 0 ] ();
149
+ ) master [TbNumMst - 1 : 0 ] ();
151
150
AXI_BUS_DV # (
152
151
.AXI_ADDR_WIDTH ( AxiAddrWidth ),
153
152
.AXI_DATA_WIDTH ( AxiDataWidth ),
154
153
.AXI_ID_WIDTH ( AxiIdWidthMasters ),
155
154
.AXI_USER_WIDTH ( AxiUserWidth )
156
- ) master_dv [NoMasters - 1 : 0 ] (clk);
155
+ ) master_dv [TbNumMst - 1 : 0 ] (clk);
157
156
AXI_BUS_DV # (
158
157
.AXI_ADDR_WIDTH ( AxiAddrWidth ),
159
158
.AXI_DATA_WIDTH ( AxiDataWidth ),
160
159
.AXI_ID_WIDTH ( AxiIdWidthMasters ),
161
160
.AXI_USER_WIDTH ( AxiUserWidth )
162
- ) master_monitor_dv [NoMasters - 1 : 0 ] (clk);
163
- for (genvar i = 0 ; i < NoMasters ; i++ ) begin : gen_conn_dv_masters
161
+ ) master_monitor_dv [TbNumMst - 1 : 0 ] (clk);
162
+ for (genvar i = 0 ; i < TbNumMst ; i++ ) begin : gen_conn_dv_masters
164
163
`AXI_ASSIGN (master[i], master_dv[i])
165
164
`AXI_ASSIGN_TO_REQ (masters_req[i], master[i])
166
165
`AXI_ASSIGN_FROM_RESP (master[i], masters_resp[i])
@@ -171,20 +170,20 @@ module tb_axi_xbar #(
171
170
.AXI_DATA_WIDTH ( AxiDataWidth ),
172
171
.AXI_ID_WIDTH ( AxiIdWidthSlaves ),
173
172
.AXI_USER_WIDTH ( AxiUserWidth )
174
- ) slave [NoSlaves - 1 : 0 ] ();
173
+ ) slave [TbNumSlv - 1 : 0 ] ();
175
174
AXI_BUS_DV # (
176
175
.AXI_ADDR_WIDTH ( AxiAddrWidth ),
177
176
.AXI_DATA_WIDTH ( AxiDataWidth ),
178
177
.AXI_ID_WIDTH ( AxiIdWidthSlaves ),
179
178
.AXI_USER_WIDTH ( AxiUserWidth )
180
- ) slave_dv [NoSlaves - 1 : 0 ](clk);
179
+ ) slave_dv [TbNumSlv - 1 : 0 ](clk);
181
180
AXI_BUS_DV # (
182
181
.AXI_ADDR_WIDTH ( AxiAddrWidth ),
183
182
.AXI_DATA_WIDTH ( AxiDataWidth ),
184
183
.AXI_ID_WIDTH ( AxiIdWidthSlaves ),
185
184
.AXI_USER_WIDTH ( AxiUserWidth )
186
- ) slave_monitor_dv [NoSlaves - 1 : 0 ](clk);
187
- for (genvar i = 0 ; i < NoSlaves ; i++ ) begin : gen_conn_dv_slaves
185
+ ) slave_monitor_dv [TbNumSlv - 1 : 0 ](clk);
186
+ for (genvar i = 0 ; i < TbNumSlv ; i++ ) begin : gen_conn_dv_slaves
188
187
`AXI_ASSIGN (slave_dv[i], slave[i])
189
188
`AXI_ASSIGN_FROM_REQ (slave[i], slaves_req[i])
190
189
`AXI_ASSIGN_TO_RESP (slaves_resp[i], slave[i])
@@ -193,7 +192,7 @@ module tb_axi_xbar #(
193
192
// AXI Rand Masters and Slaves
194
193
// -------------------------------
195
194
// Masters control simulation run time
196
- for (genvar i = 0 ; i < NoMasters ; i++ ) begin : gen_rand_master
195
+ for (genvar i = 0 ; i < TbNumMst ; i++ ) begin : gen_rand_master
197
196
static axi_rand_master_t axi_rand_master = new ( master_dv[i] );
198
197
initial begin
199
198
end_of_sim[i] <= 1'b0 ;
@@ -207,7 +206,7 @@ module tb_axi_xbar #(
207
206
end
208
207
end
209
208
210
- for (genvar i = 0 ; i < NoSlaves ; i++ ) begin : gen_rand_slave
209
+ for (genvar i = 0 ; i < TbNumSlv ; i++ ) begin : gen_rand_slave
211
210
static axi_rand_slave_t axi_rand_slave = new ( slave_dv[i] );
212
211
initial begin
213
212
axi_rand_slave.reset ();
@@ -223,8 +222,8 @@ module tb_axi_xbar #(
223
222
.AxiIdWidthMasters ( AxiIdWidthMasters ),
224
223
.AxiIdWidthSlaves ( AxiIdWidthSlaves ),
225
224
.AxiUserWidth ( AxiUserWidth ),
226
- .NoMasters ( NoMasters ),
227
- .NoSlaves ( NoSlaves ),
225
+ .NoMasters ( TbNumMst ),
226
+ .NoSlaves ( TbNumSlv ),
228
227
.NoAddrRules ( xbar_cfg.NoAddrRules ),
229
228
.rule_t ( rule_t ),
230
229
.AddrMap ( AddrMap ),
@@ -273,7 +272,7 @@ module tb_axi_xbar #(
273
272
);
274
273
275
274
// logger for master modules
276
- for (genvar i = 0 ; i < NoMasters ; i++ ) begin : gen_master_logger
275
+ for (genvar i = 0 ; i < TbNumMst ; i++ ) begin : gen_master_logger
277
276
axi_chan_logger # (
278
277
.TestTime ( TestTime ), // Time after clock, where sampling happens
279
278
.LoggerName ( $sformatf (" axi_logger_master_%0d " , i)),
@@ -309,7 +308,7 @@ module tb_axi_xbar #(
309
308
);
310
309
end
311
310
// logger for slave modules
312
- for (genvar i = 0 ; i < NoSlaves ; i++ ) begin : gen_slave_logger
311
+ for (genvar i = 0 ; i < TbNumSlv ; i++ ) begin : gen_slave_logger
313
312
axi_chan_logger # (
314
313
.TestTime ( TestTime ), // Time after clock, where sampling happens
315
314
.LoggerName ( $sformatf (" axi_logger_slave_%0d " ,i)),
@@ -346,7 +345,7 @@ module tb_axi_xbar #(
346
345
end
347
346
348
347
349
- for (genvar i = 0 ; i < NoMasters ; i++ ) begin : gen_connect_master_monitor
348
+ for (genvar i = 0 ; i < TbNumMst ; i++ ) begin : gen_connect_master_monitor
350
349
assign master_monitor_dv[i].aw_id = master[i].aw_id ;
351
350
assign master_monitor_dv[i].aw_addr = master[i].aw_addr ;
352
351
assign master_monitor_dv[i].aw_len = master[i].aw_len ;
@@ -393,7 +392,7 @@ module tb_axi_xbar #(
393
392
assign master_monitor_dv[i].r_valid = master[i].r_valid ;
394
393
assign master_monitor_dv[i].r_ready = master[i].r_ready ;
395
394
end
396
- for (genvar i = 0 ; i < NoSlaves ; i++ ) begin : gen_connect_slave_monitor
395
+ for (genvar i = 0 ; i < TbNumSlv ; i++ ) begin : gen_connect_slave_monitor
397
396
assign slave_monitor_dv[i].aw_id = slave[i].aw_id ;
398
397
assign slave_monitor_dv[i].aw_addr = slave[i].aw_addr ;
399
398
assign slave_monitor_dv[i].aw_len = slave[i].aw_len ;
0 commit comments