Menu
Coddy logo textTech

Asignación con Operadores

Parte de la sección Fundamentos del Journey de Verilog de Coddy — lección 38 de 90.

Una vez que comprendas la asignación continua, puedes combinarla con operadores para crear lógica útil. La declaración assign puede usar cualquier operador para controlar un cable.

Sintaxis básica

assign wire_name = expression;

La expresión puede incluir:

  • Operadores aritméticos (+, -, *, /)
  • Operadores bit a bit (&, |, ^, ~)
  • Operadores lógicos (&&, ||, !)
  • Operadores de comparación (>, <, ==, !=)
  • Operadores de desplazamiento (<<, >>)
  • Operador condicional (? :)

Ejemplos con diferentes operadores

AND bit a bit:

assign out = a & b;

Suma:

assign sum = a + b;

Comparación:

assign is_greater = (a > b);

Condicional (multiplexor):

assign out = sel ? a : b;

Desplazamiento:

assign shifted = data << 2;

Concatenación:

assign bus = {high_byte, low_byte};

Ejemplo de Código

module assign_operators (
  input [3:0] a, b,
  input sel,
  output [3:0] and_out,
  output [4:0] sum_out,
  output is_equal,
  output mux_out
);
  
  assign and_out = a & b;           // AND bit a bit
  assign sum_out = a + b;           // Suma
  assign is_equal = (a == b);       // Comparación
  assign mux_out = sel ? a : b;     // Condicional (multiplexor)
  
endmodule

Múltiples operadores en una sola asignación

Puedes combinar operadores en una sola expresión:

assign result = (a & b) | (c ^ d);
assign final = (a + b) > (c - d);
assign parity = ^data;   // Reducción XOR (número impar de 1's)

Precedencia de operadores

Verilog sigue la precedencia de operadores estándar. Usa paréntesis ( ) para que tu intención sea clara:

// Poco claro
assign out = a & b | c;

// Claro
assign out = (a & b) | c;
challenge icon

Desafío

Agregue las instrucciones assign faltantes según las tareas.

Qué hacer:

  1. Haga que and_result sea igual a input_a AND input_b (bitwise)
  2. Haga que or_result sea igual a input_a OR input_b (bitwise)
  3. Haga que xor_result sea igual a input_a XOR input_b (bitwise)
  4. Haga que not_result sea igual a NOT input_a (bitwise)

Pruébalo tú mismo

module assign_challenge (
  input input_a,
  input input_b,
  output and_result,
  output or_result,
  output xor_result,
  output not_result
);
  
  // TODO: Añade las sentencias assign para:
  // and_result = input_a & input_b
  // or_result  = input_a | input_b
  // xor_result = input_a ^ input_b
  // not_result = ~input_a

endmodule
quiz iconPonte a prueba

Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.

Todas las lecciones de Fundamentos