Menu
CoddyTech

Создание экземпляра модуля

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

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

Несколько экземпляров

Можно создать несколько копий одного и того же модуля:

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) и свои соединения. Они работают независимо.

Что происходит при создании экземпляра

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

Правила создания экземпляров

ПравилоПочему
Имя экземпляра должно быть уникальнымЧтобы различать копии
Имя модуля должно существоватьОно должно быть определено в другом месте
Передавайте один сигнал на каждый портПорт без сигнала остаётся неподключённым, а сигналов больше, чем портов, — ошибка
Порядок подключений должен соответствовать порядку портовПервый сигнал подключается к первому порту и т. д.
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Проверьте себя

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

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

Потренируйтесь самостоятельно: Онлайн-компилятор Verilog