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 entiendas la asignación continua, puedes combinarla con operadores para crear lógica útil. La sentencia assign puede usar cualquier operador para controlar un wire.

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;   // XOR de reducción (número impar de 1s)

Precedencia de Operadores

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

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

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

Desafío

Añade las sentencias assign faltantes basándote en las tareas.

Qué hacer:

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

Hoja de referencia

La sentencia assign admite varios operadores para la lógica combinacional:

assign wire_name = expression;

Tipos de operadores:

  • Bit a bit: &, |, ^, ~
  • Aritméticos: +, -, *, /
  • Lógicos: &&, ||, !
  • Comparación: >, <, ==, !=
  • Desplazamiento: <<, >>
  • Condicional: ? :
  • Concatenación: { }
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;    // Multiplexor
assign bus      = {high, low};    // Concatenación
assign parity   = ^data;          // Reducción XOR

Utilice paréntesis para clarificar la precedencia:

assign out = (a & b) | c;

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: Agregar sentencias de asignación 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