@@ -34,6 +34,10 @@ import cf_math_pkg::idx_width;
34
34
parameter type mst_req_t = logic ,
35
35
parameter type mst_resp_t = logic ,
36
36
parameter type rule_t = axi_pkg :: xbar_rule_64_t
37
+ `ifdef VCS
38
+ , localparam int unsigned MstPortsIdxWidth =
39
+ (Cfg.NoMstPorts == 32'd1 ) ? 32'd1 : unsigned '($clog2 (Cfg.NoMstPorts))
40
+ `endif
37
41
) (
38
42
input logic clk_i,
39
43
input logic rst_ni,
@@ -44,12 +48,22 @@ import cf_math_pkg::idx_width;
44
48
input mst_resp_t [Cfg.NoMstPorts- 1 : 0 ] mst_ports_resp_i,
45
49
input rule_t [Cfg.NoAddrRules- 1 : 0 ] addr_map_i,
46
50
input logic [Cfg.NoSlvPorts- 1 : 0 ] en_default_mst_port_i,
51
+ `ifdef VCS
52
+ input logic [Cfg.NoSlvPorts- 1 : 0 ][MstPortsIdxWidth- 1 : 0 ] default_mst_port_i
53
+ `else
47
54
input logic [Cfg.NoSlvPorts- 1 : 0 ][idx_width (Cfg.NoMstPorts)- 1 : 0 ] default_mst_port_i
55
+ `endif
48
56
);
49
57
50
58
typedef logic [Cfg.AxiAddrWidth- 1 : 0 ] addr_t ;
51
59
// to account for the decoding error slave
60
+ `ifdef VCS
61
+ localparam int unsigned MstPortsIdxWidthOne =
62
+ (Cfg.NoMstPorts == 32'd1 ) ? 32'd1 : unsigned '($clog2 (Cfg.NoMstPorts + 1 ));
63
+ typedef logic [MstPortsIdxWidthOne- 1 : 0 ] mst_port_idx_t ;
64
+ `else
52
65
typedef logic [idx_width(Cfg.NoMstPorts + 1 )- 1 : 0 ] mst_port_idx_t ;
66
+ `endif
53
67
54
68
// signals from the axi_demuxes, one index more for decode error
55
69
slv_req_t [Cfg.NoSlvPorts- 1 : 0 ][Cfg.NoMstPorts: 0 ] slv_reqs;
@@ -63,7 +77,11 @@ import cf_math_pkg::idx_width;
63
77
slv_resp_t [Cfg.NoMstPorts- 1 : 0 ][Cfg.NoSlvPorts- 1 : 0 ] mst_resps;
64
78
65
79
for (genvar i = 0 ; i < Cfg.NoSlvPorts; i++ ) begin : gen_slv_port_demux
80
+ `ifdef VCS
81
+ logic [MstPortsIdxWidth- 1 : 0 ] dec_aw, dec_ar;
82
+ `else
66
83
logic [idx_width (Cfg.NoMstPorts)- 1 : 0 ] dec_aw, dec_ar;
84
+ `endif
67
85
mst_port_idx_t slv_aw_select, slv_ar_select;
68
86
logic dec_aw_valid, dec_aw_error;
69
87
logic dec_ar_valid, dec_ar_error;
@@ -247,6 +265,10 @@ import cf_math_pkg::idx_width;
247
265
parameter int unsigned AXI_USER_WIDTH = 0 ,
248
266
parameter axi_pkg :: xbar_cfg_t Cfg = '0 ,
249
267
parameter type rule_t = axi_pkg :: xbar_rule_64_t
268
+ `ifdef VCS
269
+ , localparam int unsigned MstPortsIdxWidth =
270
+ (Cfg.NoMstPorts == 32'd1 ) ? 32'd1 : unsigned '($clog2 (Cfg.NoMstPorts))
271
+ `endif
250
272
) (
251
273
input logic clk_i,
252
274
input logic rst_ni,
@@ -255,7 +277,11 @@ import cf_math_pkg::idx_width;
255
277
AXI_BUS .Master mst_ports [Cfg.NoMstPorts- 1 : 0 ],
256
278
input rule_t [Cfg.NoAddrRules- 1 : 0 ] addr_map_i,
257
279
input logic [Cfg.NoSlvPorts- 1 : 0 ] en_default_mst_port_i,
280
+ `ifdef VCS
281
+ input logic [Cfg.NoSlvPorts- 1 : 0 ][MstPortsIdxWidth- 1 : 0 ] default_mst_port_i
282
+ `else
258
283
input logic [Cfg.NoSlvPorts- 1 : 0 ][idx_width (Cfg.NoMstPorts)- 1 : 0 ] default_mst_port_i
284
+ `endif
259
285
);
260
286
261
287
localparam int unsigned AxiIdWidthMstPorts = Cfg.AxiIdWidthSlvPorts + $clog2 (Cfg.NoSlvPorts);
0 commit comments