Menu
Coddy logo textTech

Структура модуля

Часть раздела Основы путешествия по 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, определяющий логику

Правила структуры модуля

  1. Один модуль на файл — это общепринятая практика
  2. Имя модуля должно описывать его функцию
  3. Порты перечисляются в скобках после имени
  1. Входы всегда input (не могут быть записаны внутри)
  2. Выходы — это output (могут быть reg или wire)
  3. <strong>endmodule</strong> должен закрывать модуль
challenge icon

Задание

Заполните недостающие части, чтобы завершить этот модуль.

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

  1. Добавьте имя модуля my_and
  2. Добавьте input для x
  3. Добавьте input для y
  4. Добавьте output для z
  5. Добавьте внутреннюю логику, используя assign

Шпаргалка

Модуль — это основной строительный блок в Verilog, аппаратный компонент с входами, выходами и внутренней логикой.

module module_name (
  input  a,
  input  b,
  output c
);
  // Внутренняя логика
  assign c = a & b;

endmodule
  • module / endmodule — начало и конец определения
  • input — входящий сигнал (только для чтения внутри модуля)
  • output — исходящий сигнал (может быть reg или wire)
  • assign — определяет комбинационную логику

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

module ______ (   // Добавьте имя модуля
  ______ x,       // Добавьте входной сигнал
  ______ y,       // Добавьте входной сигнал
  ______ z        // Добавьте выходной сигнал
);
  // Добавьте оператор назначения здесь (z = x & y)
  
endmodule
quiz iconПроверьте себя

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

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