Menu
Coddy logo textTech

Оператор if

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

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

Если условие true (1), код внутри выполняется. Если условие 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

Важные правила

ПравилоОбъяснение
Условие должно быть однобитнымИли выражение, которое вычисляется как 0 или 1
begin / end необходимы для нескольких операторовКак { } в других языках
Без begin/end следует только один операторТолько следующая строка
challenge icon

Задание

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

  1. Добавьте недостающий оператор if, чтобы код заработал.
  • Когда enable равен 1, out должен быть равен a & b
  • Когда enable равен 0, out должен оставаться равным 0 (не изменяться)

Начальный код инициализирует out = 0 и проверяет оба случая.

Шпаргалка

Оператор if выполняет код только тогда, когда условие истинно (1), и пропускает его, когда оно ложно (0).

if (condition) begin
  // выполняется, когда условие истинно
end

Для одиночного оператора ключевые слова begin/end необязательны:

always @(posedge clk) begin
  if (reset)
    count <= 0;
end

Условиями могут быть любые выражения, результатом которых является 0 или 1:

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

Попробуйте сами

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Проверьте себя

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

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