Конструкция if - else
Часть раздела Основы путешествия по Verilog на Coddy — урок 53 из 90.
Оператор if-else позволяет выбирать между двумя различными действиями на основе условия. Если условие истинно, выполняется один блок. Если ложно, выполняется другой блок.
Инструкция if-else предоставляет вашему коду точку принятия решений: сделать одно действие, если условие истинно, или другое, если условие ложно.
Синтаксис:
if (condition) begin
// Выполняется, когда condition истинно (1)
end else begin
// Выполняется, когда condition ложно (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.
Попробуйте сами
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