Могу ли я каким-либо образом подключить apb master vip к внутреннему модулю внутри dut, в котором есть сигналы apb. Я хочу запрограммировать некоторые регистры в этом глубоком внутреннем модуле.
Я попытался подключить интерфейс и привязать его глубоко внутри модуля, вроде работает, но я должен объявить все сигналы на интерфейсе как ввод-вывод, а моему симулятору это не нравится, выдавая много предупреждений о множественном вождении.
Есть ли другой чистый способ доступа?
Я не хочу форсировать это, так как я хотел использовать это программирование в большинстве тестов, поскольку это блок часов, и есть много других опций, которые мне нужно запрограммировать, таких как делители часов и стробирование.
Если имя внутреннего модуля, к которому вы хотите выполнить привязку, фиксировано, вам не нужны порты в модуле привязки для связи. Вместо этого вы можете использовать восходящее имя для сигналов во внутреннем модуле (см. раздел 23.8 в LRM).
Например, предположим, что внутреннее имя модуля — im
, а интерфейс, который вы хотите связать, — bi
.
module im(whatever port list);
// internal signals
logic [15:0] data;
wire [15:0] add;
logic [15:0] memory[16];
...
endmodule
interface bi();//no ports needed
function void reset_memory;
foreach (im.memory[e]) im.memory[e] = 0;
endfunction
endinterface
Если вы не хотите использовать «кувалду», вы можете
force
регистры.