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 | Только следующая строка |
Задание
Что нужно сделать:
- 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Аппаратное обеспечение и программное обеспечениеВаш первый модульКомментарииУровни абстракции проектирования4Operators Part 1
Arithmetic OperatorsModulo OperatorComparison OperatorsRecap - Simple MathBitwise Operators7Assign And Gates
Continuous AssignmentAssign With OperatorsBuilt In Gate PrimitivesAND OR NOT GatesXOR XNOR GatesRecap - Logic Gate Circuit10Decision Making
If StatementIf - ElseRecap - Simple ComparatorCase StatementCasex And CasezRecap - ALU Design5Operators Part 2
Logical OperatorsReduction OperatorsShift OperatorsConcatenation OperatorConditional OperatorRecap - Operator Challenge3Number System
Binary RepresentationSized NumbersUnsized NumbersNegative NumbersSpecial Values X And ZRecap - Number Formats6Modules
Module StructureInput And Output PortsInout PortsModule InstantiationPort Mapping By NamePort Mapping By OrderRecap - Build A Module9Procedural Blocks
Always BlockInitial BlockSensitivity ListBlocking AssignmentNon Blocking AssignmentRecap - Always vs Initial15Traffic Light Controller
Defining The StatesState Machine LogicПотренируйтесь самостоятельно: Онлайн-компилятор Verilog