Module Instantiation
Часть раздела Основы путешествия по Verilog на Coddy. Урок 33 из 90.
Инстанцирование модуля — это процесс создания копии модуля внутри другого модуля. Так создаются более крупные проекты путём соединения небольших компонентов.
После того как вы определили module, вы можете использовать его внутри другого module. Это называется инстанцированием. Каждое инстанцирование создаёт отдельный экземпляр этого module. Представьте это как использование чертежа для создания нескольких копий одного и того же компонента.
Базовый синтаксис
module_name instance_name (connections);| Часть | Значение |
|---|---|
module_name | Имя модуля для Instantiate |
instance_name | Уникальное имя для этой копии |
connections | signals, подключённые к port модуля |
Простой пример
Шаг 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) и собственные соединения. Они работают независимо.
Что происходит во время Instantiate
- Создаётся копия аппаратного обеспечения
- У каждого экземпляра есть свой набор signals
- Экземпляры выполняются параллельно (одновременно)
- Сигналы, которые вы передаёте, определяют, как экземпляры подключаются к остальной части вашей схемы
Правила инстанцирования
| Правило | Почему |
|---|---|
| Имя экземпляра должно быть уникальным | Чтобы различать копии |
| Имя модуля должно существовать | Оно должно быть определено в другом месте |
| Количество connections должно совпадать с количеством port | В противном случае Verilog не знает, что с чем соединять |
| Порядок connections должен совпадать с порядком port | Первый signal соединяется с первым port и т. д. |
Задание
Завершите код, создав экземпляр модуля or_gate.
Что нужно сделать:
- Создайте экземпляр
or_gateс именем экземпляраor1 - Передайте сигналы в правильном порядке:
input_a,input_b,output_y
Попробуйте сами
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Введение
Что такое VerilogАппаратное обеспечение и программное обеспечениеВаш первый модульКомментарииУровни абстракции проектирования4Operators Part 1
Arithmetic OperatorsModulo OperatorComparison OperatorsRecap - Simple MathBitwise Operators7Assign And Gates
Continuous AssignmentAssign With OperatorsBuilt In Gate PrimitivesAND OR NOT GatesXOR XNOR GatesRecap - Logic Gate Circuit10Decision Making
If StatementIf - ElseRecap - Simple ComparatorCase StatementCasex And CasezRecap - ALU Design5Operators Part 2
Logical OperatorsReduction OperatorsShift OperatorsConcatenation OperatorConditional OperatorRecap - Operator Challenge3Number System
Binary RepresentationSized NumbersUnsized NumbersNegative NumbersSpecial Values X And ZRecap - Number Formats6Modules
Module StructureInput And Output PortsInout PortsModule InstantiationPort Mapping By NamePort Mapping By OrderRecap - Build A Module9Procedural Blocks
Always BlockInitial BlockSensitivity ListBlocking AssignmentNon Blocking AssignmentRecap - Always vs Initial15Traffic Light Controller
Defining The StatesState Machine LogicПотренируйтесь самостоятельно: Онлайн-компилятор Verilog