Menu
Coddy logo textTech

Подключение портов по порядку

Часть раздела Основы путешествия по Verilog на Coddy — урок 35 из 90.

В предыдущем уроке вы узнали о сопоставлении портов по имени, где вы явно помечаете каждое соединение с помощью .port(signal). Теперь мы рассмотрим альтернативный метод: сопоставление портов по порядку.

Он подключает сигналы к портам модуля на основе порядка, в котором они указаны в определении модуля. Вы просто перечисляете сигналы в скобках, и Verilog сопоставляет их один за другим.

Синтаксис:

module_name instance_name (signal1, signal2, signal3);

Первый сигнал подключается к первому порту, второй — ко второму порту и так далее.

Пример

Определение модуля:

module or_gate (
  input in1,      // Первый порт
  input in2,      // Второй порт
  output result   // Третий порт
);
  assign result = in1 | in2;
endmodule

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

or_gate or1 (input_a, input_b, output_y);

Это соединяет:

  • Первый сигнал input_a → первый порт in1
  • Второй сигнал input_b → второй порт in2
  • Третий сигнал output_y → третий порт result

Порядок имеет значение

При сопоставлении портов по порядку последовательность имеет решающее значение:

// Правильный порядок
or_gate or1 (input_a, input_b, output_y);

// Неправильный порядок — сигналы подключены к неверным портам!
or_gate or1 (input_b, input_a, output_y);
or_gate or1 (output_y, input_a, input_b);

Если вы перепутаете порядок, соединения пойдут не к тем портам. Это может быть трудно отладить, так как на первый взгляд код кажется правильным.

Сопоставление портов по имени и по порядку

ХарактеристикаПо имениПо порядку
Синтаксис.port(signal)signal1, signal2
Важен ли порядок?НетДа
Самодокументируемость?ДаНет
Риск ошибокНизкийВысокий
Рекомендуется дляБольшинства проектовТолько простых случаев

Когда использовать сопоставление портов по порядку

Сопоставление портов по порядку допустимо, когда:

  • У модуля очень мало портов (2-3)
  • Порядок портов очевиден и вряд ли изменится
  • Вы пишете быстрые тестбенчи

Для большинства проектов сопоставление портов по имени предпочтительнее, так как оно более понятное и менее подвержено ошибкам.

challenge icon

Задание

Завершите создание экземпляра, перечислив сигналы в правильном порядке, используя сопоставление портов по порядку.

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

Порты модуля (в данном порядке):

  1. input en (разрешение)
  2. input [7:0] d (вход данных)
  3. output [7:0] q (выход данных)

Сигналы для подключения:

  • enable_signal → подключить к en
  • data_input → подключить к d
  • data_output → подключить к q

Шпаргалка

Сопоставление портов по порядку соединяет сигналы на основе их позиции, соответствующей порядку определения портов модуля:

module_name instance_name (signal1, signal2, signal3);

Пример с модулем or_gate (порты: in1, in2, result):

or_gate or1 (input_a, input_b, output_y);

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

ХарактеристикаПо имениПо порядку
Синтаксис.port(signal)signal1, signal2
Важен ли порядок?НетДа
Риск ошибокНизкийВысокий
Рекомендуется дляБольшинства проектовТолько простых/с малым количеством портов

Попробуйте сами

module register (
  input en,
  input [7:0] d,
  output [7:0] q
);
  assign q = en ? d : q;
endmodule

module top (
  input enable_signal,
  input [7:0] data_input,
  output [7:0] data_output
);
  
  // TODO: Создайте экземпляр регистра с именем reg1, используя позиционное сопоставление (ORDER mapping)
  // Перечислите сигналы в правильном порядке: enable_signal, data_input, data_output
  // Не используйте синтаксис .port(signal)

endmodule
quiz iconПроверьте себя

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

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