Menu
Coddy logo textTech

If Statement

Часть раздела Основы путешествия по 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Только следующая строка
challenge icon

Задание

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

  1. Add пропущенное утверждение if, чтобы это заработало.
  • When enable равно 1, out should быть равно a & b
  • When enable равно 0, out should оставаться равным 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