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 código apenas quando uma condição é verdadeira. A instrução if verifica uma condição.
Se a condição for true (1), o código interno é executado. Se a condição for false (0), o código é ignorado.
Sintaxe:
if (condition) begin
// O 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 debegineendé executado →counttorna-se 0 - Se
resetfor 0 (falso), o código interno é 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 Bloco Always
always @(posedge clk) begin
if (reset)
count <= 0;
endNota: Para uma única instrução, begin e end são opcionais. Por exemplo, no bloco always acima, nenhum begin/end é necessário após if porque ele possui 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 |
|---|---|
| A condição deve ser um único bit | Ou uma expressão que resulte em 0 ou 1 |
begin / end são necessários para múltiplas instruções | Como { } em outras linguagens |
Sem begin/end, apenas uma instrução segue | Apenas a próxima linha |
Desafio
O que fazer:
- Adicione a instrução
ifque falta para fazer isso funcionar.
- Quando
enablefor1,outdeve ser igual aa & b - Quando
enablefor0,outdeve permanecer0(não mudar)
O código inicial inicializa out = 0 e testa ambos os casos.
Folha de consulta
A instrução if executa o código apenas quando uma condição é verdadeira (1) e o ignora quando é falsa (0).
if (condition) begin
// executa quando a condição é verdadeira
endPara uma instrução única, begin/end são opcionais:
always @(posedge clk) begin
if (reset)
count <= 0;
endAs condições podem ser qualquer expressão que resulte em 0 ou 1:
if (a > b) begin max = a; end
if (a && b) begin out = 1; end
if (data == 8'hFF) begin match = 1; endRegras principais:
- Use
begin/endpara agrupar múltiplas instruções (como{ }em outras linguagens) - Sem
begin/end, apenas a linha imediatamente seguinte pertence aoif
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: Adicionar 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