Menu
CoddyTech

Оператор 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
challenge icon

Задание

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

  1. Добавь недостающий оператор 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
quiz iconПроверьте себя

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

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

Потренируйтесь самостоятельно: Онлайн-компилятор Verilog