В SystemVerilog что означает (. *)? - PullRequest
       24

В SystemVerilog что означает (. *)?

2 голосов
/ 17 октября 2019

У меня есть тестовый стенд, объявленный как

module test_circuit
    logic a,b,c;
    logic y;

    circuit UUT (.*);    //what does this line mean?

    initial begin
    //something here
    end
endmodule

Я не нашел ни одного учебного пособия, в котором говорилось бы, что это значит. Я посмотрел справочное руководство по языку, и там говорится, что это «шаблон подстановки», но я не вдавался в подробности.

В противном случае ... трудно найти специальный символ в любой поисковой системе, и результаты, которые я нашел, похоже, связаны только с другими языками.

Ответы [ 2 ]

4 голосов
/ 17 октября 2019

В дополнение к ответу Silicon1602 вы также можете сделать это, что означает, что переменная aa подключена к порту a, а любой другой порт подключен к переменным с таким же именем:

circuit UUT 
(.a(aa),
 .*);
4 голосов
/ 17 октября 2019

На самом деле это довольно широко описано в SystemVerilog LRM . Взгляните на Раздел 23.3.2.4 Подключение экземпляров модуля с использованием подстановочных знаков именованных соединений портов (. *) . Цитируя первую часть этого раздела:

SystemVerilog может неявно создавать экземпляры портов с использованием подстановочного синтаксиса. * Для всех портов, где имя порта экземпляра совпадает с именем подключаемого порта, а их типы данных эквивалентны. Это устраняет необходимость перечисления любого порта, в котором имя и тип объявления соединения соответствуют имени и эквивалентному типу порта экземпляра.

Чтобы отразить это на вашем примере: предположим, что модуль circuit имеет порты a, b, y и d.

Вы можете подключить их полностью в явном виде, как описано в Разделе 23.3.2.2 в LRM. Это необходимо, если имена или ширина не совпадают:

circuit UUT 
(.a (a),
 .b (b),
 .c (c),
 .y (y));

Вы также можете использовать неявные соединения с именованными портами (Раздел 23.3.2.3 LRM):

circuit UUT 
(.a,
 .b,
 .c,
 .y);

Однако,Самый быстрый способ, если вы не хотите вводить все порты, это убедиться, что имена и типы сигналов совпадают в иерархии. Затем вы можете просто использовать подстановочные имена именованных подключений:

circuit UUT
(.*);

Пожалуйста, имейте в виду, что последний метод может затруднить отладку вашего RTL, поскольку он становится более сложным при трассировке сигналов привысокий уровень.

Бонус: В дополнение к LRM взгляните на бумагу Sutherland & Mills Synthesizing SystemVerilog - развеивает миф о том, что SystemVerilog предназначен только для проверки . В разделе 7 дается отличная сводка о различных типах соединений портов и о преимуществах соединений точка-имя и точка-звезда.

...