@@ -75,7 +75,7 @@ module axi_mcast_demux #(
75
75
input logic test_i,
76
76
input rule_t [NoAddrRules- 1 : 0 ] addr_map_i,
77
77
input logic en_default_mst_port_i,
78
- input decode_idx_t default_mst_port_i,
78
+ input rule_t default_mst_port_i,
79
79
// Slave Port
80
80
input axi_req_t slv_req_i,
81
81
input idx_select_t slv_ar_select_i,
@@ -186,6 +186,7 @@ module axi_mcast_demux #(
186
186
187
187
// AW address decoder
188
188
mask_rule_t [NoMulticastRules- 1 : 0 ] multicast_rules;
189
+ mask_rule_t default_rule;
189
190
decode_idx_t dec_aw_idx;
190
191
logic dec_aw_idx_valid, dec_aw_idx_error;
191
192
logic [NoMulticastPorts- 1 : 0 ] dec_aw_select_partial;
@@ -311,9 +312,9 @@ module axi_mcast_demux #(
311
312
.default_idx_i ('0 )
312
313
);
313
314
end else begin : g_no_aw_idx_decode
314
- assign dec_aw_idx_valid = en_default_mst_port_i & dec_aw_select_error ;
315
- assign dec_aw_idx_error = ! en_default_mst_port_i ;
316
- assign dec_aw_idx = default_mst_port_i ;
315
+ assign dec_aw_idx_valid = 1'b0 ;
316
+ assign dec_aw_idx_error = 1'b1 ;
317
+ assign dec_aw_idx = '0 ;
317
318
end
318
319
319
320
// Convert multicast rules to mask (NAPOT) form
@@ -326,6 +327,9 @@ module axi_mcast_demux #(
326
327
assign multicast_rules[i].mask = addr_map_i[i].end_addr - addr_map_i[i].start_addr - 1 ;
327
328
assign multicast_rules[i].addr = addr_map_i[i].start_addr;
328
329
end
330
+ assign default_rule.idx = default_mst_port_i.idx;
331
+ assign default_rule.mask = default_mst_port_i.end_addr - default_mst_port_i.start_addr - 1 ;
332
+ assign default_rule.addr = default_mst_port_i.start_addr;
329
333
330
334
// Compare request against {addr, mask} rules
331
335
multiaddr_decode # (
@@ -341,7 +345,9 @@ module axi_mcast_demux #(
341
345
.addr_o (dec_aw_addr),
342
346
.mask_o (dec_aw_mask),
343
347
.dec_valid_o (),
344
- .dec_error_o (dec_aw_select_error)
348
+ .dec_error_o (dec_aw_select_error),
349
+ .en_default_idx_i (en_default_mst_port_i),
350
+ .default_idx_i (default_rule)
345
351
);
346
352
347
353
// Combine output from the two address decoders
@@ -1115,6 +1121,8 @@ module axi_mcast_demux_intf #(
1115
1121
input logic test_i, // Testmode enable
1116
1122
input rule_t [NO_MST_PORTS - 2 : 0 ] addr_map_i,
1117
1123
input idx_select_t slv_ar_select_i, // has to be stable, when ar_valid
1124
+ input logic en_default_mst_port_i,
1125
+ input rule_t default_mst_port_i,
1118
1126
AXI_BUS .Slave slv, // slave port
1119
1127
AXI_BUS .Master mst [NO_MST_PORTS - 1 : 0 ] // master ports
1120
1128
);
@@ -1170,6 +1178,8 @@ module axi_mcast_demux_intf #(
1170
1178
.rst_ni, // Asynchronous reset active low
1171
1179
.test_i, // Testmode enable
1172
1180
.addr_map_i ( addr_map_i ),
1181
+ .en_default_mst_port_i ( en_default_mst_port_i ),
1182
+ .default_mst_port_i ( default_mst_port_i ),
1173
1183
// slave port
1174
1184
.slv_req_i ( slv_req ),
1175
1185
.slv_ar_select_i ( slv_ar_select_i ),
0 commit comments