Подключение портов по порядку
Часть раздела Основы путешествия по 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)
- Порядок портов очевиден и вряд ли изменится
- Вы пишете быстрые тестбенчи
Для большинства проектов сопоставление портов по имени предпочтительнее, так как оно более понятное и менее подвержено ошибкам.
Задание
Завершите создание экземпляра, перечислив сигналы в правильном порядке, используя сопоставление портов по порядку.
Что нужно сделать:
Порты модуля (в данном порядке):
input en(разрешение)input [7:0] d(вход данных)output [7:0] q(выход данных)
Сигналы для подключения:
enable_signal→ подключить кendata_input→ подключить кddata_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В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Основы
1Введение
Что такое VerilogHardware против SoftwareУровни абстракции проектированияВаш первый модульКомментарии4Операторы. Часть 1
Арифметические операторыОператор остатка от деленияОператоры сравненияПовторение: простая математикаПобитовые операторы7Оператор Assign и логические вентили
Непрерывное присваиваниеAssign с операторамиВстроенные примитивы вентилейВентили AND, OR, NOTВентили XOR, XNORИтоги: Схемы на логических вентилях10Принятие решений
Оператор ifКонструкция if - elseПовторение: простой компараторОператор caseОператоры casex и casezПовторение: проектирование ALU5Операторы. Часть 2
Логические операторыОператоры редукцииОператоры сдвигаОператор конкатенацииУсловный операторПовторение — Испытание по операторам3Системы счисления
Двоичное представлениеЧисла с заданным размеромЧисла без заданного размераОтрицательные числаСпециальные значения X и ZИтоги — форматы чисел6Модули
Структура модуляВходные и выходные портыПорты InoutИнстанцирование модуляПодключение портов по имениПодключение портов по порядкуИтоги: создание модуля9Процедурные блоки
Блок alwaysБлок initialСписок чувствительностиБлокирующее присваиваниеНеблокирующее присваиваниеИтоги: always против initial