В SytemVerilog может быть четыре различных типа подключения к порту, а именно:
(1) Использование позиционных подключений к портам. Тот, который указан в вашем коде ссылки. Порты сопоставляются в соответствии с позицией в созданном модуле.
(2) Использование соединений с именованными портами. Это подробное объявление. Положение портов не имеет значения. Пример может быть следующим. Обратите внимание, что позицию теперь можно заменять.
mymodule u1 (.data(data), .address(address));
// Is same as follows:
mymodule u1 (.address(address), .data(data));
(3) Использование нового SystemVerilog .name неявные подключения к портам. Всякий раз, когда имя и размер порта совпадают с именем и размером соединительной сети или шины, порты подключаются. Это не широко используемая техника.
// Searches for address and data sized variables in current module
mymodule u1 (.address, .data);
(4) Использование нового SystemVerilog .* неявных подключений к портам. всякий раз, когда имя и размер порта совпадают с именем и размером соединительной сети или шины, порты соединяются.
reg [2:0] address;
reg [15:0] data;
// Connect address data automatically. Provided the name is same.
mymodule u1 (.*);
Итак, в вашем случае следующие эквивалентны. Поскольку имена экземпляров интерфейса, таких как input_intf
, output_intf
и mem_intf
, одинаковы, соединение .*
также должно работать.
testcase TC (.mem_intf(mem_intf),.input_intf(input_intf),.output_intf(output_intf));
testcase TC (.output_intf(output_intf),.mem_intf(mem_intf),.input_intf(input_intf));
testcase TC (.*);
Для получения дополнительной информации см. документ CummingsDesignCon2005_SystemVerilog_ImplicitPorts.
person
sharvil111
schedule
22.02.2016