Оператор if
Часть раздела Основы путешествия по Verilog на Coddy. Урок 52 из 90.
Инструкция if — это блок принятия решений, который выполняет код только при истинном условии. Инструкция if проверяет условие.
Если условие true (1), код внутри выполняется. Если условие false (0), код пропускается.
Синтаксис:
if (condition) begin
// Код выполняется, когда condition истинно
endПростой пример
if (reset) begin
count = 0;
endВ этом примере:
beginиendиспользуются для обозначения начала и конца блока кода
- Если
resetравен 1 (true), выполняется код внутриbeginиend→countстановится равным 0 - Если
resetравен 0 (false), код внутри пропускается → ничего не происходит
begin и end работают как фигурные скобки { } в других языках программирования. Они объединяют инструкции, чтобы Verilog знал, какой код относится к условию if. Хотя здесь есть только одна инструкция, использовать begin и end всё равно полезно для единообразия.
Оператор if в блоке always
always @(posedge clk) begin
if (reset)
count <= 0;
endПримечание: для одной инструкции begin и end необязательны. Например, в приведённом выше блоке always после if не нужны begin/end, потому что в нём только одна инструкция.
Условие может быть любым выражением
if (a > b) begin
max = a;
end
if (a && b) begin
out = 1;
end
if (data == 8'hFF) begin
match = 1;
endВажные правила
| Правило | Объяснение |
|---|---|
| Условие может быть любым выражением | Ненулевые (и известные) значения считаются истинными, ноль — ложным |
Для нескольких инструкций нужны begin / end | Как { } в других языках |
Без begin/end выполняется только одна инструкция | Только следующая инструкция относится к if |
Задание
Что нужно сделать:
- Добавь недостающий оператор
if, чтобы всё работало.
- Когда
enableравно1, значениеoutдолжно быть равноa & b - Когда
enableравно0, значениеoutдолжно оставаться равным0(не изменяться)
В начальном коде переменной out присваивается значение 0 и проверяются оба случая.
Попробуйте сами
module if_challenge;
reg a, b, enable;
reg out = 0;
initial begin
a = 1;
b = 1;
// Тестовый случай 1: enable = 1
enable = 1;
// TODO: Добавьте условный оператор if (out = a & b)
$display("enable=1: out = %d (should be 1)", out);
// Тестовый случай 2: enable = 0
enable = 0;
out = 0;
// TODO: out должен оставаться равным 0
$display("enable=0: out = %d (should be 0)", out);
$finish;
end
endmoduleВ этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Основы
1Введение
Что такое VerilogАппаратное и программное обеспечениеВаш первый модульКомментарииУровни абстракции проектирования4Операторы. Часть 1
Арифметические операторыОператор взятия остаткаОператоры сравненияПовторение — простая математикаПобитовые операторы7Присваивание и логические элементы
Непрерывное присваиваниеПрисваивание с операторамиВстроенные примитивы логических элементовЭлементы И, ИЛИ и НЕЭлементы XOR и XNORПовторение — схема на логических элементах10Принятие решений
Оператор ifif—elseПовторение — простой компараторОператор casecaseх и casezПовторение — проектирование ALU5Операторы, часть 2
Логические операторыОператоры свёрткиОператоры сдвигаОператор конкатенацииУсловный операторПовторение — задание на операторы11Циклы
Цикл forЦикл whileЦикл повторенияБесконечный циклОператор отключенияПовторение — шаблоны циклов3Система счисления
Двоичное представлениеЧисла заданной разрядностиЧисла без указания разрядностиОтрицательные числаСпециальные значения X и ZПовторение — форматы чисел6Модули
Структура модуляВходные и выходные портыДвунаправленные портыСоздание экземпляра модуляПодключение портов по имениПодключение портов по порядкуПовторение — создание модуля9Процедурные блоки
Блок AlwaysБлок InitialСписок чувствительностиБлокирующее присваиваниеНеблокирующее присваиваниеПовторение: Always и InitialПотренируйтесь самостоятельно: Онлайн-компилятор Verilog