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

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

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

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

ПравилоПочему
Имя экземпляра должно быть уникальнымЧтобы различать копии
Имя модуля должно существоватьОно должно быть определено в другом месте
Количество соединений должно соответствовать количеству портовИначе Verilog не будет знать, что и куда подключается
Порядок соединений должен соответствовать порядку портовПервый сигнал подключается к первому порту и т. д.
challenge icon

Задание

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

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

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

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

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