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 le 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 cualquier señal en la lista cambia, el bloque se ejecuta.

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
Disparo por flanco (secuencial)always @(posedge clk)En el flanco de subida del reloj
Múltiples flancosalways @(posedge clk or posedge reset)En el flanco del reloj o el flanco de reinicio

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

La más segura y común para 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, obtienes un latch (memoria no deseada).

Opción 3: Disparo por flanco (posedge)

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

Utilice posedge para el flanco de subida, negedge para el flanco de bajada.

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 de reloj o en el flanco de reset.

Errores Comunes

ErrorPor qué está mal
always @(a or b or c) pero usa dFalta d → latch
always @(posedge clk or reset)Falta posedge para reset
always @(clk)Debería usar posedge clk para flip-flops
challenge icon

Desafío

Qué hacer:

  1. Agrega la lista de sensibilidad correcta para que este flip-flop funcione. El bloque debe ejecutarse en el flanco de subida de clk.

Hoja de referencia

La lista de sensibilidad sigue a @ y define cuándo se ejecuta un bloque always:

always @(sensitivity_list) begin
  // se ejecuta cuando cambian las señales listadas
end
TipoSintaxisSe activa cuando
Todas las señalesalways @(*)Cualquier señal de lectura cambia
Señales específicasalways @(a or b)a o b cambian
Flanco de subidaalways @(posedge clk)Flanco de subida de clk
Múltiples flancosalways @(posedge clk or posedge reset)Cualquiera de los flancos se activa

Use @(*) para lógica combinacional; use posedge/negedge para lógica secuencial:

// Combinacional
always @(*) begin
  out = a & b;
end

// Secuencial (flip-flop con reset asíncrono)
always @(posedge clk or posedge reset) begin
  if (reset) q <= 0;
  else       q <= d;
end

Errores comunes: omitir una señal en una lista específica causa un latch; escribir always @(clk) en lugar de always @(posedge clk) para flip-flops; omitir posedge antes de reset en una lista de múltiples flancos.

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