Создание экземпляра модуля (инстанцирование)

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

Обозначение # при создании экземпляра модуля используется для переопределения значений параметров в экземпляре модуля. Параметры должны быть переопределены в том же порядке, в котором они объявлены в модуле. Начиная с Verilog-2001 можно использовать обозначение переопределения именованных параметров.

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

Подключение к портам может быть упорядоченным или именованным списком. В упорядоченном списке соединения должны быть в том же порядке, что и список портов в описании модуля. В случае не указания аргумента (две запятые подряд) какие-то порты окажутся неподключенными. В именованном списке имена должны соответствовать портам в модуле.

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

Сила сигнала может быть использована только для примитивов.

Синтаксис

// вариант объявления экземпляра модуля с упорядоченным списком портов
<имя модуля> <имя инстанса>(<порты>);

// вариант объявления экземпляра модуля с именованным списком портов
<имя модуля> <имя инстанса>(.<имя порта> ( <сигнал> ), .<имя порта> ( <сигнал> ), …);

// вариант объявления экземпляра модуля с заданием силы выходного сигнала
<имя модуля> (<сила сигнала>) <имя инстанса>(.<имя порта> ( <сигнал> ), .<имя порта> ( <сигнал> ), …);

// вариант объявления экземпляра модуля с переопределением значений параметров
<имя модуля> #(<список значений параметров>) <имя инстанса>(.<имя порта> ( <сигнал> ), .<имя порта> ( <сигнал> ), …);

Примеры

Last updated