Структура модуля
Часть раздела Основы путешествия по Verilog на Coddy — урок 30 из 90.
Модуль является основным строительным блоком в Verilog. Каждый проект строится из модулей, которые соединяются друг с другом для формирования более крупных систем.
Модуль — это аппаратный компонент, имеющий:
- Имя
- Входы (входящие сигналы)
- Выходы (исходящие сигналы)
- Внутренняя логика (то, что делает модуль)
Представьте модуль как микросхему с выводами и внутренней схемой.
Базовая структура модуля
Каждый модуль следует этой структуре:
module module_name (
input signals,
output signals
);
// Внутренние объявления (wires, regs и т. д.)
// Логика (операторы assign, блоки always и т. д.)
endmoduleЧасти модуля
| Часть | Назначение |
|---|---|
Ключевое слово module | Начинает определение модуля |
module_name | Имя модуля |
( ) | Список входных и выходных портов |
input / output | Объявление направления порта |
| Тело модуля | Внутренняя логика и соединения |
endmodule | Завершает определение модуля |
Простой пример модуля
module and_gate (
input a,
input b,
output c
);
assign c = a & b;
endmoduleЭтот модуль:
- Называется
and_gate - Имеет два входа (
a,b) - Имеет один выход (
c) - Содержит один оператор
assign, определяющий логику
Правила структуры модуля
- Один модуль на файл — это общепринятая практика
- Имя модуля должно описывать его функцию
- Порты перечисляются в скобках после имени
- Входы всегда
input(не могут быть записаны внутри) - Выходы — это
output(могут бытьregилиwire) <strong>endmodule</strong>должен закрывать модуль
Задание
Заполните недостающие части, чтобы завершить этот модуль.
Что нужно сделать:
- Добавьте имя модуля
my_and - Добавьте
inputдляx - Добавьте
inputдляy - Добавьте
outputдляz - Добавьте внутреннюю логику, используя
assign
Шпаргалка
Модуль — это основной строительный блок в Verilog, аппаратный компонент с входами, выходами и внутренней логикой.
module module_name (
input a,
input b,
output c
);
// Внутренняя логика
assign c = a & b;
endmodulemodule/endmodule— начало и конец определенияinput— входящий сигнал (только для чтения внутри модуля)output— исходящий сигнал (может бытьregилиwire)assign— определяет комбинационную логику
Попробуйте сами
module ______ ( // Добавьте имя модуля
______ x, // Добавьте входной сигнал
______ y, // Добавьте входной сигнал
______ z // Добавьте выходной сигнал
);
// Добавьте оператор назначения здесь (z = x & y)
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