Menu
Coddy logo textTech

Встроенные примитивы вентилей

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

В Verilog есть встроенные примитивы вентилей, которые позволяют описывать логические схемы, используя реальные символы вентилей. Это называется структурным моделированием — вы создаете схемы, соединяя вентили, точно так же, как при рисовании электрической схемы.

Вентильные примитивы — это предопределенные ключевые слова, которые моделируют базовые логические вентили. Вместо написания выражения вида assign out = a & b, вы создаете экземпляр вентиля:

and(out, a, b);   // Вентиль И с выходом out и входами a и b

Общий синтаксис

gate_type (output, input1, input2, ...);
  • Первым аргументом всегда является выход
  • Следующие аргументы — это входы (1 или более, в зависимости от логического элемента)

Доступные примитивы вентилей

Тип вентиляКлючевое словоКоличество входов
ANDand2 или более
ORor2 или более
NOTnot1
NANDnand2 или более
NORnor2 или более
XORxor2 или более
XNORxnor2 или более

Как работают вентильные примитивы

Когда вы пишете and(out, a, b), Verilog создает вентиль AND, который непрерывно управляет out результатом a & b. Всякий раз, когда a или b изменяются, out обновляется немедленно — точно так же, как настоящий вентиль.

Вентильные примитивы и непрерывное назначение

Оба метода создают одну и ту же аппаратную логику:

// Вентильный примитив
and(out, a, b);

// Непрерывное назначение (тот же результат)
assign out = a & b;

Вентильные примитивы полезны, когда вы хотите описать схему как набор вентилей (структурный стиль). Непрерывное присваивание лучше подходит для поведенческого стиля (выражения).

challenge icon

Задание

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

  1. Добавьте правильный примитив вентиля, чтобы эта схема заработала. Модуль должен выводить результат логического И (AND) входов a и b. Выходной порт уже имеет имя c.

Шпаргалка

Вентильные примитивы (Gate primitives) в Verilog позволяют выполнять структурное моделирование путем прямого создания экземпляров логических вентилей.

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

gate_type(output, input1, input2, ...);

Доступные примитивы:

ВентильКлючевое словоВходы
ANDand2+
ORor2+
NOTnot1
NANDnand2+
NORnor2+
XORxor2+
XNORxnor2+

Вентильные примитивы и оператор assign создают эквивалентное оборудование:

and(out, a, b);       // structural (gate primitive)
assign out = a & b;   // behavioral (continuous assignment)

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

module gate_challenge (
  input a,
  input b,
  output c
);
  
  // TODO: Добавьте правильный примитив вентиля
  // Выход c должен быть a AND b

endmodule
quiz iconПроверьте себя

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

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