Оператор if
Часть раздела Основы путешествия по Verilog на Coddy. Урок 52 из 90.
Инструкция if — это блок принятия решений, который выполняет код только когда условие истинно. Инструкция if проверяет условие.
Если condition имеет значение true (1), код внутри executes. Если condition имеет значение false (0), код пропускается.
Синтаксис:
if (condition) begin
// Код выполняется, когда condition истинно
endПростой пример
if (reset) begin
count = 0;
endВ этом примере:
beginиendиспользуются для обозначения начала и конца блока кода
- Если
resetравно 1 (истина), код внутриbeginиendвыполняется →countстановится равным 0 - Если
resetравно 0 (ложь), код внутри пропускается → ничего не происходит
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Важные правила
| Правило | Объяснение |
|---|---|
| Condition может быть любым выражением | Ненулевые (и известные) значения считаются true, а ноль — false |
begin / end необходимы для нескольких statement | Как { } в других языках |
Без begin/end следует только один statement | Только следующая строка |
Задание
Что нужно сделать:
- Add пропущенное утверждение
if, чтобы это заработало.
- When
enableравно1,outshould быть равноa & b - When
enableравно0,outshould оставаться равным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