If Statement
Parte da seção Fundamentos do Journey de Verilog da Coddy. Lição 52 de 90.
O if statement é um bloco de tomada de decisão que executes o código somente quando uma condition é verdadeira. O if statement verifica uma condition.
Se a condition for true (1), o código interno executes. Se a condition for false (0), o código é ignorado.
Sintaxe:
if (condition) begin
// O código é executado quando a condição é verdadeira
endExemplo simples
if (reset) begin
count = 0;
endNeste exemplo:
begineendsão usados para marcar o início e o fim do bloco de código
- Se
resetfor 1 (verdadeiro), o código dentro debegineendexecutes→countse torna 0 - Se
resetfor 0 (falso), o código dentro dele é ignorado → nada acontece
begin e end funcionam como chaves { } em outras linguagens de programação. Eles agrupam instruções para que o Verilog saiba qual código pertence à condição if. Embora haja apenas uma instrução aqui, usar begin e end ainda é uma boa prática para manter a consistência.
Instrução if em um bloco always
always @(posedge clk) begin
if (reset)
count <= 0;
endObservação: para uma única instrução, begin e end são opcionais. Por exemplo, no bloco always acima, não é necessário usar begin/end depois de if, pois ele tem apenas uma instrução.
A condição pode ser qualquer expressão
if (a > b) begin
max = a;
end
if (a && b) begin
out = 1;
end
if (data == 8'hFF) begin
match = 1;
endRegras importantes
| Regra | Explicação |
|---|---|
| Condition pode ser qualquer expressão | Valores diferentes de zero (e conhecidos) são tratados como verdadeiros, e zero como falso |
begin / end necessários para múltiplas instruções | Como { } em outras linguagens |
Sem begin/end, apenas uma instrução é executada | Apenas a próxima linha |
Desafio
O que fazer:
- Adicione a instrução
ifausente para fazer isso funcionar.
- Quando
enablefor1,outdeverá ser igual aa & b - Quando
enablefor0,outdeverá permanecer0(não mudar)
O código inicializador inicializa out = 0 e testa ambos os casos.
Experimente você mesmo
module if_challenge;
reg a, b, enable;
reg out = 0;
initial begin
a = 1;
b = 1;
// Caso de teste 1: enable = 1
enable = 1;
// TODO: Adicione a instrução if (out = a & b)
$display("enable=1: out = %d (should be 1)", out);
// Caso de teste 2: enable = 0
enable = 0;
out = 0;
// TODO: out deve permanecer 0
$display("enable=0: out = %d (should be 0)", out);
$finish;
end
endmoduleEsta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.
Todas as lições de Fundamentos
1Introdução
O que é VerilogHardware vs. SoftwareSeu primeiro móduloComentáriosNíveis de abstração de projeto4Operators 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 LogicPratique por conta própria: Compilador de Verilog online