Menu
Coddy logo textTech

Оператор if

Часть раздела Основы путешествия по Verilog на Coddy — урок 52 из 90.

Инструкция if — это блок принятия решений, который выполняет код только тогда, когда условие истинно. Инструкция if проверяет условие.

Если condition имеет значение true (1), код внутри executes. Если condition имеет значение false (0), код пропускается.

Синтаксис:

if (condition) begin
  // Код выполняется, когда условие истинно
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 выше begin/end не требуется после if, так как он содержит только одну инструкцию.

Условие может быть любым выражением

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 выполняется только одна инструкцияТолько следующая строка
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Проверьте себя

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

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