Menu
Coddy logo textTech

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

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

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

Модуль — это аппаратный компонент, у которого есть:

  • Имя
  • Входы (входящие сигналы)
  • Выходы (выходящие сигналы)
  • Внутренняя логика (то, что модуль делает)

Представьте себе module как микросхему с выводами и внутренней схемой.

Базовая структура модуля

Каждый модуль имеет следующую структуру:

module module_name (
  input  signals,
  output signals
);
  
  // Внутренние объявления (wires, regs и т.д.)
  // Логика (assign statements, always blocks и т.д.)
  
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. Входы (Inputs) всегда объявляются как input (в них нельзя производить запись внутри)
  2. Выходы (Outputs) объявляются как output (могут быть reg или wire)
  3. <strong>endmodule</strong> должен закрывать модуль
challenge icon

Задание

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

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

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

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

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

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

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