Menu
Coddy logo textTech

Port Mapping By Order

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

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

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

Синтаксис:

module_name instance_name (signal1, signal2, signal3);

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

Пример

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

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

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

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

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

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

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

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

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

challenge icon

Задание

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

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

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

  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Проверьте себя

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

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

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