Menu
Coddy logo textTech

Operador Condicional

Parte da seção Fundamentos do Journey de Verilog da Coddy — lição 28 de 90.

O operador condicional ? : seleciona entre dois valores com base em uma condição. Ele também é chamado de operador ternário. O operador condicional avalia uma condição e retorna um de dois valores:

condition ? value_if_true : value_if_false

Se a condição for verdadeira (1), o primeiro valor é retornado. Se for falsa (0), o segundo valor é retornado.

Por que usar o operador condicional

É uma maneira compacta de escrever uma lógica simples de if-else em uma única linha. Os usos comuns incluem:

  • Selecionar entre dois sinais
  • Criar multiplexadores
  • Definir valores padrão
  • Atribuições condicionais inline

Sintaxe e Exemplos

Exemplo básico:

result = (a > b) ? a : b;   // result recebe o maior entre a e b

Selecionar entre valores:

data_out = (enable) ? data_in : 8'b00000000;   // Saída de dados se habilitado, caso contrário 0

Inverter sinal condicionalmente:

out = (invert) ? ~in : in;   // Se invert for 1, saída invertida; caso contrário, inalterada

Exemplo de Código

module conditional_demo;
  reg [3:0] a, b, max;
  reg enable;
  reg [3:0] data_in, data_out;
  
  initial begin
    a = 4'd7;
    b = 4'd9;
    enable = 1;
    data_in = 4'b1010;
    
    max = (a > b) ? a : b;           // 9
    data_out = (enable) ? data_in : 4'b0000;   // 1010
    
    $display("max = %d", max);
    $display("data_out = %b", data_out);
    $finish;
  end
endmodule

Saída:

max = 9
data_out = 1010

Operadores Condicionais Aninhados

Você pode aninhar operadores condicionais para múltiplas seleções:

result = (a > b) ? a : (b > c) ? b : c;   // Encontre o maior de três valores

Use parênteses para tornar claras as condições aninhadas.

Notas Importantes

  • A condição deve ser um único bit (ou expressão que resulte em 0 ou 1)
  • Ambas as opções de valor devem ter a mesma largura de bits
  • O operador pode ser usado em atribuições contínuas (assign) e blocos procedurais (always, initial)
challenge icon

Desafio

Escreva as expressões condicionais corretas para cada tarefa.

O que fazer:

  1. Defina max como o maior entre x e y
  2. Defina abs como o valor absoluto de val (se negativo, torne-o positivo)
  3. Defina output_data como data se enable for 1, caso contrário, como 8'b0

Folha de consulta

O operador condicional (ternário) ? : seleciona entre dois valores com base em uma condição:

condition ? value_if_true : value_if_false

Exemplos:

max      = (a > b) ? a : b;                  // o maior entre a e b
data_out = (enable) ? data_in : 8'b0;        // dados de saída se habilitado, caso contrário 0
out      = (invert) ? ~in : in;              // inverte o sinal condicionalmente

Operadores condicionais aninhados:

result = (a > b) ? a : (b > c) ? b : c;     // o maior de três valores

Notas:

  • A condição deve ser avaliada como 0 ou 1
  • Ambas as opções de valor devem ter a mesma largura de bits
  • Pode ser usado em blocos assign, always e initial

Experimente você mesmo

module conditional_challenge;
  reg [3:0] x, y;
  reg [3:0] max;
  reg signed [3:0] val;
  reg [3:0] abs;
  reg enable;
  reg [7:0] data;
  reg [7:0] output_data;
  
  initial begin
    x = 4'd12;
    y = 4'd8;
    val = -4'sd5;
    enable = 1;
    data = 8'b10101010;
    
    max = ______;          // o maior entre x e y
    abs = ______;          // valor absoluto de val
    output_data = ______;  // data se enable, caso contrário 0
    
    $display("max = %d", max);
    $display("abs = %d", abs);
    $display("output_data = %b", output_data);
    $finish;
  end
endmodule
quiz iconTeste seus conhecimentos

Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.

Todas as lições de Fundamentos