Instrução If
Parte da seção Fundamentos do Journey de Verilog da Coddy — lição 52 de 90.
A instrução if é um bloco de tomada de decisão que executa o código apenas quando uma condição é verdadeira. A instrução if verifica uma condição.
Se a condition for true (1), o código dentro executes. Se a condition for false (0), o código é ignorado.
Sintaxe:
if (condition) begin
// Código executa 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 debegineendexecuta →counttorna-se 0 - Se
resetfor 0 (falso), o código dentro é ignorado → nada acontece
begin e end funcionam como chaves { } em outras linguagens de programação. Eles agrupam statements para que o Verilog saiba qual código pertence à condition do if. Mesmo que haja apenas um statement aqui, usar begin e end ainda é uma boa prática para manter a consistência.
Instrução If em Bloco Always
always @(posedge clk) begin
if (reset)
count <= 0;
endNota: Para um único statement, begin e end são opcionais. Por exemplo, no bloco always acima, nenhum begin/end é necessário após if porque ele tem apenas um statement.
Condition 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 verdadeiro, zero como falso |
begin / end necessários para múltiplas instruções | Como { } em outras linguagens |
Sem begin/end, apenas uma instrução se segue | Apenas a próxima linha |
Desafio
O que fazer:
- Adicione a instrução
ifque falta para fazer isso funcionar.
- Quando
enablefor1,outshouldser igual aa & b - Quando
enablefor0,outshouldpermanecer0(não mudar)
O código inicial 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 SoftwareNíveis de Abstração de ProjetoSeu Primeiro MóduloComentários4Operadores Parte 1
Operadores AritméticosOperador de MóduloOperadores de ComparaçãoRecapitulação - Matemática SimplesOperadores Bitwise7Atribuição e Portas Lógicas
Atribuição ContínuaAtribuição com OperadoresPrimitivas de Portas IntegradasPortas AND, OR e NOTPortas XOR e XNORRecapitulação - Circuito de Portas Lógicas10Tomada de Decisão
Instrução IfIf - ElseRecapitulação - Comparador SimplesInstrução CaseCasex e CasezRecapitulação - Projeto de ALU2Tipos de Dados
Tipo WireTipo RegInteger e RealVetoresArraysParâmetrosRecapitulação - Declarar Sinais5Operadores Parte 2
Operadores LógicosOperadores de ReduçãoOperadores de DeslocamentoOperador de ConcatenaçãoOperador CondicionalRecapitulação - Desafio de Operadores3Sistemas de Numeração
Representação BináriaNúmeros com Tamanho DefinidoNúmeros sem Tamanho DefinidoNúmeros NegativosValores Especiais X e ZRecapitulação - Formatos de Números6Módulos
Estrutura de MóduloPortas de Entrada e SaídaPortas InoutInstanciação de MóduloMapeamento de Portas por NomeMapeamento de Portas por OrdemRecapitulação - Construa um Módulo