Menu
Coddy logo textTech

Вентили AND, OR, NOT

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

В этом уроке рассматриваются три самых базовых логических вентиля: AND, OR и NOT. Эти вентили составляют основу проектирования цифровой логики.

Логический элемент И (AND)

Логический элемент И выдает 1 только тогда, когда все входные сигналы равны 1.

Таблица истинности (2 входа):

about
000
010
100
111

Вентильный примитив Verilog:

and(out, a, b);

Эквивалент непрерывного присваивания:

assign out = a & b;

Элемент ИЛИ (OR)

Элемент ИЛИ выдает 1, когда хотя бы один из входов равен 1.

Таблица истинности (для 2 входов):

about
000
011
101
111

Логический примитив Verilog:

or(out, a, b);

Эквивалент непрерывного присваивания:

assign out = a | b;

Элемент НЕ (NOT)

Элемент НЕ выдает результат, противоположный его единственному входному сигналу. Его также называют инвертором.

Таблица истинности:

aout
01
10

Логический примитив Verilog:

not(out, a);

Эквивалент с непрерывным назначением:

assign out = ~a;

Несколько входов

Вентили AND и OR могут иметь более 2 входов:

and(out, a, b, c);     // 3-входовый AND (out = a & b & c)
or(out, x, y, z, w);   // 4-входовый OR

Вентили NOT всегда имеют ровно 1 вход.

Пример кода

module and_or_not (
  input a, b,
  output and_out,
  output or_out,
  output not_out
);
  and(and_out, a, b);   // Элемент AND
  or(or_out, a, b);     // Элемент OR
  not(not_out, a);      // Элемент NOT (инвертор)
endmodule
challenge icon

Задание

Добавьте недостающие примитивы логических вентилей в соответствии с заданиями.

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

  1. Создайте вентиль AND с выходом and_result и входами p и q
  2. Создайте вентиль OR с выходом or_result и входами p и q
  3. Создайте вентиль NOT с выходом not_result и входом p

Шпаргалка

Основные логические вентили в Verilog с использованием примитивов вентилей и непрерывного назначения:

ВентильПримитивНазначение (Assign)Выход равен 1, когда...
AND (И)and(out, a, b);assign out = a & b;Все входы равны 1
OR (ИЛИ)or(out, a, b);assign out = a | b;Хотя бы один вход равен 1
NOT (НЕ)not(out, a);assign out = ~a;Вход равен 0

AND и OR поддерживают более 2 входов; NOT всегда имеет ровно 1 вход:

and(out, a, b, c);   // 3-входовый AND
or(out, a, b, c, d); // 4-входовый OR
module example (input a, b, output and_out, or_out, not_out);
  and(and_out, a, b);
  or(or_out, a, b);
  not(not_out, a);
endmodule

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

module gates_challenge (
  input p,
  input q,
  output and_result,
  output or_result,
  output not_result
);
  
  // TODO: Добавить вентиль AND (and_result = p & q)
  
  // TODO: Добавить вентиль OR (or_result = p | q)
  
  // TODO: Добавить вентиль NOT (not_result = ~p)

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

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

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