Menu
Coddy logo textTech

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

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

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

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

Синтаксис:

module_name instance_name (signal1, signal2, signal3);

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

Пример

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

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

Инстанцирование с port mapping по order:

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);

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

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

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

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

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

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

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

challenge icon

Задание

Завершите инстанцирование, перечислив сигналы в правильном порядке с использованием позиционного связывания портов (port mapping by order).

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

Порты модуля (в следующем порядке):

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

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

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

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

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: Инстанцируйте register с именем reg1, используя ORDER mapping
  // Перечислите сигналы в правильном порядке: enable_signal, data_input, data_output
  // Не используйте синтаксис .port(signal)

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

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

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