Menu
CoddyTech

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 del bloque
Señales específicasalways @(a or b)Cuando cambia a o b
Disparo por flanco (secuencial)always @(posedge clk)En el flanco ascendente del reloj
Varios flancosalways @(posedge clk or posedge reset)En el flanco del reloj o en el flanco de reset

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 cambia a o b
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 cambia a o b
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 deja de coincidir con el hardware sintetizado.

Opción 3: Disparo por flanco (posedge)

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

Usa posedge para el flanco ascendente y negedge para el flanco descendente.

Opción 4: Varios 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 desactualizada en la simulación (diferencia entre sim/synth)
always @(posedge clk or reset)Falta posedge para reset
always @(clk)Se debería usar posedge clk para los flip-flops
challenge icon

Desafío

Qué hacer:

  1. Añade la lista de sensibilidad correcta para que este flip-flop funcione. 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