Menu
Coddy logo textTech

Lista de sensibilidad

Parte de la sección Fundamentos del Journey de Verilog de Coddy. Lección 48 de 90.

La lista de sensibilidad indica al bloque always cuándo ejecutarse. Se escribe entre paréntesis después del símbolo @.

La lista de sensibilidad es un conjunto de señales o eventos que activan el bloque always. Cuando cambia cualquier señal de la lista, se ejecuta el bloque.

Sintaxis:

always @(sensitivity_list) begin
  // El código se ejecuta cuando cambian las señales de la lista
end

Tipos de lista de sensibilidad

TipoSintaxisCuándo se ejecuta el bloque
Todas las señales (combinacional)always @(*)Cuando cambia cualquier señal interna
Señales específicasalways @(a or b)Cuando cambia a o b
Activación por flanco (secuencial)always @(posedge clk)En el flanco ascendente del reloj
Múltiples flancosalways @(posedge clk or posedge reset)En el flanco del reloj o en el flanco de restablecimiento

Opción 1: Todas las señales (*)

La opción más segura y común para la lógica combinacional.

always @(*) begin
  out = a & b;   // Se ejecuta cuando a o b cambian
end

El * incluye automáticamente todas las señales leídas en el bloque.

Opción 2: Señales específicas

always @(a or b) begin
  out = a & b;   // Se ejecuta cuando a o b cambian
end

Si olvidas una señal, la salida no se actualiza en la simulación cuando esa señal cambia, por lo que la simulación ya no coincide con el hardware sintetizado.

Opción 3: Activación por flanco (posedge)

always @(posedge clk) begin
  q <= d;        // Se ejecuta en el flanco de subida del reloj
end

Usa posedge para el flanco rising, negedge para el flanco descendente.

Opción 4: Múltiples flancos

always @(posedge clk or posedge reset) begin
  if (reset)
    q <= 0;
  else
    q <= d;
end

Se ejecuta en el flanco del reloj o en el flanco de reinicio.

Errores comunes

ErrorPor qué está mal
always @(a or b or c) pero usa dFalta d → la salida queda obsoleta en la simulación (desajuste entre simulación y síntesis)
always @(posedge clk or reset)Falta posedge para el reinicio
always @(clk)Se debe usar posedge clk para los flip-flops
challenge icon

Desafío

Qué hacer:

  1. Añade la lista de sensibilidad correcta para hacer funcionar este flip-flop. El bloque debe ejecutarse en el flanco ascendente de clk.

Pruébalo tú mismo

module flipflop (
  input clk,
  input d,
  output reg q
);
  
  always @(______) begin
    q <= d;
  end

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

Practica por tu cuenta: Compilador de Verilog online