Конструкция if - else
Часть раздела Основы путешествия по Verilog на Coddy — урок 53 из 90.
Оператор if-else позволяет выбирать между двумя различными действиями на основе условия. Если условие истинно, выполняется один блок. Если ложно, выполняется другой блок.
Оператор if-else предоставляет вашему коду точку принятия решения: выполнить одно действие, если условие истинно, и другое действие, если условие ложно.
Синтаксис:
if (condition) begin
// Выполняется, когда условие истинно (1)
end else begin
// Выполняется, когда условие ложно (0)
endПростой пример
if (reset) begin
count = 0;
end else begin
count = count + 1;
end- Если
resetравен 1 →countстановится 0 - Если
resetравен 0 →countувеличивается на 1
Несколько операторов
Используйте begin и end, когда у вас более одного оператора:
if (enable) begin
out = data_in;
valid = 1;
end else begin
out = 0;
valid = 0;
endIf-Else с несколькими условиями
Вы можете объединять операторы if-else в цепочку:
if (a > b) begin
max = a;
end else if (b > a) begin
max = b;
end else begin
max = a; // a и b равны
endВажные правила
| Правило | Объяснение |
|---|---|
else необязателен | Вы можете использовать if без else |
else относится к ближайшему if | Будьте осторожны с вложенностью |
Используйте begin/end для нескольких операторов | Требуется для более чем одной строки |
Задание
Что нужно сделать:
- Добавьте недостающий оператор
if-else, чтобы это заработало. - Когда
enableравен 1,outдолжен быть равенa & b. - Когда
enableравен 0,outдолжен быть равенa | b.
Шпаргалка
Оператор if-else выполняет один из двух блоков в зависимости от условия:
if (condition) begin
// Выполняется, когда условие истинно (1)
end else begin
// Выполняется, когда условие ложно (0)
endОбъединяйте несколько условий в цепочку с помощью else if:
if (a > b) begin
max = a;
end else if (b > a) begin
max = b;
end else begin
max = a; // a и b равны
endelseявляется необязательным- Используйте
begin/end, когда в блоке несколько операторов elseвсегда относится к ближайшемуif
Попробуйте сами
module ifelse_challenge;
reg a, b, enable;
reg out;
initial begin
a = 1;
b = 0;
enable = 1;
// TODO: Добавить оператор if-else
// Если enable равен 1: out = a & b
// Иначе: out = a | b
$display("out = %d (should be 0 because 1&0=0)", out);
$finish;
end
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