Инстанцирование модуля
Часть раздела Основы путешествия по Verilog на Coddy — урок 33 из 90.
Инстанцирование модуля — это процесс создания копии модуля внутри другого модуля. Именно так вы создаете более крупные проекты, соединяя вместе более мелкие компоненты.
После того как вы определили модуль, вы можете использовать его внутри другого модуля. Это называется инстанцированием. Каждое инстанцирование создает отдельный экземпляр этого модуля. Представьте это как использование чертежа для создания нескольких копий одного и того же компонента.
Базовый синтаксис
module_name instance_name (connections);| Часть | Значение |
|---|---|
module_name | Имя модуля для создания экземпляра |
instance_name | Уникальное имя для этой копии |
connections | Сигналы, подключенные к портам модуля |
Простой пример
Шаг 1: Определение модуля
module and_gate (
input a,
input b,
output c
);
assign c = a & b;
endmoduleШаг 2: Создайте экземпляр в другом модуле
module top (
input x,
input y,
output z
);
and_gate gate1 (x, y, z);
endmoduleВот что происходит в этом коде:
and_gate— имя модуля, который мы хотим использовать (должен где-то существовать)gate1— уникальное имя, которое мы даем этому конкретному экземпляру(x, y, z)— сигналы, которые мы подключаем к портам модуля (в том же порядке, в котором они указаны в определении модуля)
Первый сигнал x подключается к первому порту a. Второй сигнал y подключается ко второму порту b. Третий сигнал z подключается к третьему порту c.
Вы должны передавать сигналы в модуль. Скобки не могут быть пустыми. Количество сигналов должно соответствовать количеству портов.
Несколько экземпляров
Вы можете создать несколько копий одного и того же модуля:
module top;
wire out1, out2;
wire sig1, sig2, sig3, sig4;
and_gate gate1 (sig1, sig2, out1);
and_gate gate2 (sig3, sig4, out2);
endmoduleКаждый экземпляр имеет своё собственное имя (gate1, gate2) и свои собственные соединения. Они работают независимо.
Что происходит во время инстанцирования
- Создается копия аппаратного обеспечения
- Каждый экземпляр имеет свой собственный набор сигналов
- Экземпляры работают параллельно (одновременно)
- Передаваемые вами сигналы определяют, как экземпляры подключаются к остальной части вашего проекта
Правила инстанцирования
| Правило | Почему |
|---|---|
| Имя экземпляра должно быть уникальным | Чтобы различать копии |
| Имя модуля должно существовать | Оно должно быть определено в другом месте |
| Количество соединений должно соответствовать количеству портов | Иначе Verilog не будет знать, что и куда подключается |
| Порядок соединений должен соответствовать порядку портов | Первый сигнал подключается к первому порту и т. д. |
Задание
Завершите код, создав экземпляр модуля or_gate.
Что нужно сделать:
- Создайте экземпляр
or_gateс именем экземпляраor1 - Передайте сигналы в правильном порядке:
input_a,input_b,output_y
Шпаргалка
Инстанцирование модуля создает копию модуля внутри другого модуля:
module_name instance_name (connections);Пример:
module and_gate (input a, input b, output c);
assign c = a & b;
endmodule
module top (input x, input y, output z);
and_gate gate1 (x, y, z); // x→a, y→b, z→c
endmoduleПравила:
- Имя экземпляра должно быть уникальным
- Количество соединений должно соответствовать количеству портов
- Порядок соединений должен соответствовать порядку определения портов
- Несколько экземпляров работают параллельно, каждый со своими собственными сигналами
Попробуйте сами
module or_gate (
input in1,
input in2,
output result
);
assign result = in1 | in2;
endmodule
module top (
input input_a,
input input_b,
output output_y
);
// TODO: Создайте экземпляр or_gate с именем or1
// Передайте сигналы по порядку: input_a, input_b, output_y
// Не используйте синтаксис .port(signal)
endmoduleВ этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Основы
1Введение
Что такое VerilogHardware против SoftwareУровни абстракции проектированияВаш первый модульКомментарии4Операторы. Часть 1
Арифметические операторыОператор остатка от деленияОператоры сравненияПовторение: простая математикаПобитовые операторы7Оператор Assign и логические вентили
Непрерывное присваиваниеAssign с операторамиВстроенные примитивы вентилейВентили AND, OR, NOTВентили XOR, XNORИтоги: Схемы на логических вентилях10Принятие решений
Оператор ifКонструкция if - elseПовторение: простой компараторОператор caseОператоры casex и casezПовторение: проектирование ALU5Операторы. Часть 2
Логические операторыОператоры редукцииОператоры сдвигаОператор конкатенацииУсловный операторПовторение — Испытание по операторам3Системы счисления
Двоичное представлениеЧисла с заданным размеромЧисла без заданного размераОтрицательные числаСпециальные значения X и ZИтоги — форматы чисел6Модули
Структура модуляВходные и выходные портыПорты InoutИнстанцирование модуляПодключение портов по имениПодключение портов по порядкуИтоги: создание модуля9Процедурные блоки
Блок alwaysБлок initialСписок чувствительностиБлокирующее присваиваниеНеблокирующее присваиваниеИтоги: always против initial