Я пытаюсь реализовать параметр c синтезируемого шинного мультиплексора, используя интерфейсы в SystemVerilog. Ниже приведена упрощенная реализация интерфейса и мультиплексора. В определении порта мультиплексора есть массив подчиненных интерфейсов:
interface bus_if();
logic req;
logic [31:0] addr;
modport master ( output req, addr );
modport slave ( input req, addr );
endinterface
module mux #(
parameter int N_SLAVES = 4
) (
bus_if.slave master,
bus_if.master slave[N_SLAVES]
);
...
endmodule
На верхнем уровне я пытаюсь создать шинный мультиплексор следующим образом:
module top;
bus_if master(), slave1(), slave2();
mux #(
.N_SLAVES ( 2 )
) bus_mux ( master
.master ( data_if ),
.slave ( '{slave1, slave2 }) <-- Error here in Cadence Xcelium
);
endmodule
Это прекрасно работает в ModelSim. Однако, пробуя это, например, в Cadence Xcelium, это завершается неудачно с An instance name is not a legal rvalue
.
Итак, вопрос: я просто использую что-то, что поддерживает Modelsim, а Xcelium нет? И как это исправить, чтобы он работал в обоих?