Menu
Coddy logo textTech

Инстанцирование модуля

Часть раздела Основы путешествия по 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) и свои соединения. Они работают независимо.

Что происходит во время инстанцирования

  • Создается копия аппаратного обеспечения
  • Каждый экземпляр имеет свой собственный набор сигналов
  • Экземпляры работают параллельно (одновременно)
  • Сигналы, которые вы передаете, определяют, как экземпляры подключаются к остальной части вашего проекта

Правила инстанцирования

ПравилоПочему
Имя instance_name должно быть уникальнымЧтобы отличать копии друг от друга
Имя module_name должно существоватьМодуль module должен быть определен в другом месте
Количество connections должно совпадать с количеством портов portИначе Verilog не сможет определить, что к чему подключается
Порядок order соединений должен совпадать с порядком портов portПервый signal подключается к первому порту port и т. д.
challenge icon

Задание

Завершите код, создав экземпляр модуля or_gate.

Что нужно сделать:

  1. Создайте экземпляр or_gate с именем экземпляра or1
  2. Передайте сигналы в правильном порядке: 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
quiz iconПроверьте себя

В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.

Все уроки раздела Основы