Как изменить упорядоченный список портов на именованный список портов в systemverilog?

Теперь я пытаюсь внедрить учебник systemverilog здесь,

В частности, я имею в виду учебник по переключателям SystemVerilog.

Если вы просматриваете код, они используются в упорядоченном списке портов в тестовом примере TC(mem_intf, input_intf, output_intf[4]); но я хочу изменить их на именованный список портов. Кто-нибудь знает, как перейти в именованный упорядоченный список портов из упорядоченного списка портов в SystemVerilog?


person user5523035    schedule 22.02.2016    source источник


Ответы (2)


В 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
comment
Спасибо, а можно еще кое-что спросить не по теме? Почему они используют тестовый пример TC (mem_intf, input_intf, output_intf); вместо этого testcase TC (mem_intf, input_intf, output_intf[4]); Это так запутано, я не могу этого понять - person user5523035; 22.02.2016
comment
Это массив интерфейсов. Подключение output_intf означает, что все 4 экземпляра подключены. При подключении output_intf[4] подключается только один экземпляр интерфейса. Следовательно, должно произойти несоответствие ширины порта. Вы можете использовать output_intf[3:0], чтобы явно указать количество подключаемых экземпляров. - person sharvil111; 22.02.2016
comment
Спасибо, это 'output_interface output_intf[4](Clock); 'и программа testcase(mem_interface.MEM mem_intf,input_interface.IPinput_intf,output_interface.'OP output_intf[4]'); просто означает, что подключается только один экземпляр интерфейса? Тогда как установить [0]~[3]? Где заявляет? Откуда мы знаем, что output_itf равен 4 битам? - person user5523035; 22.02.2016
comment
output_interface output_intf[4](Clock); создает 4 экземпляра. Это массив экземпляров. Обратитесь к ответу на этот вопрос для получения дополнительной информации. - person sharvil111; 22.02.2016

Чтобы уточнить подключения к именованным портам (мне было удивительно трудно найти это в Google): синтаксис выглядит следующим образом:

mygate gate0(.pin1(wire1), .pin2(wire2))

где провода можно рассматривать как снаружи ворот, а контакты внутри или часть ворот.

Это аналогично python named/keyword arguments:

gate0(pin1=wire1, pin2=wire2) 

Однако, в отличие от Python, где аргументы передаются и функция возвращает возвращаемое значение, в System Verilog порты могут быть входными, выходными или входными.

Дополнительная литература: http://web.engr.oregonstate.edu/~traylor/ece474/beamer_lectures/modules.pdf

person qwr    schedule 21.01.2019