Я новичок в systemverilog и пытаюсь создать тестовый стенд systemverilog. У меня есть DUT, который должен быть подключен к одному из двух внешних модулей через мультиплексор. Я хочу переключить соединение во время моделирования, и я хочу использовать интерфейсы systemverilog для соединения между тестируемым устройством и мультиплексором, а также соединение между мультиплексором и двумя внешними модулями. Сигналы в интерфейсе являются двунаправленными.Мультиплексор интерфейса SystemVerilog
Я столкнулся с проблемой записи мультиплексора. Я получаю ошибку для текущей реализации, что LHS выражения не может быть проводом. Если я изменю тип интерфейса на логику, я получаю сообщение об ошибке, что это невозможно с двунаправленными сигналами. Я попытался Google, но я не нашел никаких учебных пособий по подключению интерфейса к интерфейсу. Разве это невозможно? Или есть лучший способ сделать то, что я пытаюсь сделать?
До сих пор у меня есть следующие:
interface flash_connect_interface;
wire interface_f_cle;
wire interface_f_ale;
endinterface: flash_connect_interface
module flash_connect_testbench_top;
[...]
// Interfaces
flash_connect_interface flash_connect_interface_i0();
flash_connect_interface flash_connect_interface_i1();
flash_connect_interface flash_connect_interface_i2();
// Connecting DUT to interface
flash_connect flash_connect_i0(
.flash_connect_interface_i(flash_connect_interface_i0),
);
// Multiplexer
flash_connect_mux mux1(
.flash_connect_interface_i_0(flash_connect_interface_i0),
.flash_connect_interface_i_1(flash_connect_interface_i1),
.flash_connect_interface_i_2(flash_connect_interface_i2),
.select(sel)
);
nand_model nand_model0 (
.Cle (flash_connect_interface_i1.interface_f_cle),
.Ale (flash_connect_interface_i1.interface_f_ale),
);
nand_model nand_model1 (
.Cle (flash_connect_interface_i2.interface_f_cle),
.Ale (flash_connect_interface_i2.interface_f_ale),
);
[...]
endmodule // end testbench_top
module flash_connect_mux(
flash_connect_interface flash_connect_interface_i_0,
flash_connect_interface flash_connect_interface_i_1,
flash_connect_interface flash_connect_interface_i_2,
input select
);
always_comb begin
// *** Here is the problem ***
if (select == 1'b0) flash_connect_interface_i_1 = flash_connect_interface_i_0;
else flash_connect_interface_i_2 = flash_connect_interface_i_0;
end
endmodule
Спасибо за Ваш комментарий, но Unforunately код полностью это не распространяется делать то, что я хочу: все сигналы bidicrectional. В моей симуляции я могу видеть следующее: При выборе = 0 все изменения на flash_connect_interface_i_1.interface_f_cle передаются на flash_connect_interface_i_0.interface_f_cle. Но не наоборот, что делает соединение не двунаправленным. – Antonio
В случае двунаправленных сигналов обычно используются квалификационные сигналы, которые используются для инициирования изменения направления шины. Мы могли бы использовать это в модели, чтобы делать подобные вещи. –
Вы имеете в виду добавить эту функциональность в мультиплексор? Что-то вроде: если (реж = 0) правопреемником interface_i_1.interface_f_cle = interface_i_0.interface_f_cle еще правопреемником interface_i_0.interface_f_cle = interface_i_1.interface_f_cle – Antonio