← Volver al blogLógica secuencial

Biestables SR frente a JK: fundamentos de la lógica secuencial

El biestable JK resuelve el estado prohibido del latch SR redefiniendo J=K=1 como conmutación. Compara ambos, deriva tablas de excitación y construye contadores con cada uno.

DennyDenny
11 min de lectura
Chalkboard feature illustration for “Biestables SR frente a JK: fundamentos de la lógica secuencial”

En resumen: El latch SR es el elemento de memoria más sencillo, pero tiene un estado prohibido cuando ambas entradas son 1. El biestable JK lo corrige redefiniendo J=K=1 como una conmutación, mediante realimentación interna (S=J⋅Q‾S = J\cdot\overline{Q}, R=K⋅QR = K\cdot Q) y un reloj maestro-esclavo para impedir la oscilación por carrera.

Los circuitos combinacionales —sumadores, multiplexores— producen salidas únicamente a partir de las entradas actuales. La lógica secuencial añade memoria: un biestable conserva el estado entre ciclos de reloj. Esta guía compara los dos componentes secuenciales fundamentales —el latch SR y el biestable JK— y muestra cómo el diseño JK elimina el defecto crítico del SR.

Lógica combinacional frente a lógica secuencial

Los circuitos combinacionales, como los sumadores y los multiplexores, producen salidas determinadas por los valores actuales de sus entradas tras el retardo de propagación. Las entradas físicas siempre deben recibir niveles válidos; «sin entrada» no es una operación especial y una entrada flotante está eléctricamente indefinida.

Los circuitos secuenciales añaden una propiedad crucial: el estado. Sus salidas dependen no solo de las entradas actuales, sino también del historial de entradas; tienen memoria. Un biestable puede estar en el estado Q=0 o Q=1 y mantendrá ese estado hasta que se le indique explícitamente que cambie. Esto es lo que hace posible la computación: sin estado no hay registros, contadores, contadores de programa ni CPU.

El latch SR: donde comienza la memoria

El latch SR (latch Set-Reset) es el elemento de memoria más sencillo y se construye con dos puertas NOR (o NAND) realimentadas de forma cruzada. Tiene dos entradas —S (Set) y R (Reset)— y dos salidas complementarias: Q y Q‾\overline{Q}.

Latch SR basado en NOR que muestra puertas realimentadas de forma cruzada y tabla de verdad

Tabla de verdad del latch SR

SRQ (siguiente)Acción
00Q (sin cambios)Mantener (memoria)
010Restablecer (borrar)
101Establecer (almacenar 1)
11?NO VÁLIDO (prohibido)

Ecuación característica del latch SR

El comportamiento se describe formalmente mediante:

Qnext=S+R‾⋅Q(constraint: S⋅R=0)Q_{next} = S + \overline{R} \cdot Q \quad \text{(constraint: } S \cdot R = 0\text{)}

La restricción S⋅R=0S \cdot R = 0 es la debilidad fundamental del latch SR: la ecuación solo es válida cuando S y R no son ambas ‘1’. Incumplir esta restricción produce el estado prohibido: ambas salidas pasan a ‘0’, y el estado final al liberar las entradas es una condición de carrera no determinista.

Plantilla de demostración del latch SR

Por qué el estado prohibido es peligroso

Cuando S=R=1, ambas puertas NOR son forzadas a producir ‘0’, por lo que Q = Q‾\overline{Q} = 0: una contradicción lógica. Cuando ambas entradas vuelven simultáneamente a ‘0’, ambas puertas compiten por producir ‘1’. El resultado depende de diferencias de escala de nanosegundos en el retardo de propagación, la temperatura y las tolerancias de fabricación. El resultado es impredecible y, en el peor caso, la salida puede entrar en un estado metaestable: una tensión intermedia que no es ni un ‘0’ válido ni un ‘1’ válido.

El biestable JK: la solución completa

El biestable JK afronta de frente el estado prohibido del latch SR. En vez de dejar indefinida la condición J=K=1J=K=1, el diseño JK la redefine como una conmutación: la salida se invierte en cada flanco de reloj. Esta única innovación transforma un elemento de memoria defectuoso en el biestable más versátil del diseño digital.

Biestable JK maestro-esclavo con osciloscopio

Tabla de verdad del biestable JK

JKQ (siguiente)Acción
00Q (sin cambios)Mantener
010Restablecer
101Establecer
11Q‾\overline{Q} (invertida)Conmutar

Ecuación característica del biestable JK

Qnext=(J⋅Q‾)+(K‾⋅Q)Q_{next} = (J \cdot \overline{Q}) + (\overline{K} \cdot Q)

La realimentación hace que las solicitudes de establecimiento y restablecimiento sean mutuamente excluyentes para un estado actual dado: Q‾\overline{Q} controla el término J y QQ controla el término K. Eso elimina la combinación de entrada prohibida del SR. La realimentación por sí sola no impide la carrera alrededor en un diseño JK sensible al nivel; el temporizado maestro-esclavo o disparado por flanco es lo que limita el dispositivo a una transición visible externamente por evento de muestreo.

Lección sobre el biestable JK

La arquitectura maestro-esclavo

Los primeros diseños JK eran disparados por nivel, lo que introducía la condición de carrera alrededor: si el pulso de reloj permanecía alto el tiempo suficiente, la salida conmutada podía realimentarse y provocar otra conmutación dentro del mismo pulso, causando una oscilación incontrolada.

La solución es la arquitectura maestro-esclavo, que utiliza dos latches SR en serie:

  1. Latch maestro: captura la entrada mientras el reloj está en HIGH. Su salida queda aislada del esclavo.
  2. Latch esclavo: captura la salida del maestro cuando el reloj pasa a LOW. Es entonces cuando la salida Q externa cambia realmente.

Como el maestro y el esclavo nunca son transparentes simultáneamente, la salida solo puede cambiar una vez por ciclo de reloj. Las implementaciones modernas usan disparo por flanco para lograr el mismo efecto con mayor eficiencia, pero entender el concepto maestro-esclavo explica por qué el biestable JK necesita un reloj y por qué es inmune al problema de carrera alrededor.

La condición de carrera alrededor: una mirada más profunda

La condición de carrera alrededor merece atención detenida porque ilustra por qué la estrategia de reloj importa tanto.

En un latch JK sencillo sensible al nivel con J=K=1 (modo de conmutación), la secuencia es:

  1. El reloj pasa a HIGH. La salida conmuta de 0 a 1.
  2. La nueva salida (Q=1) se realimenta a las puertas de entrada.
  3. El reloj sigue en HIGH. La lógica de puertas ve el nuevo estado y conmuta de nuevo: Q pasa de 1 a 0.
  4. Este ciclo se repite mientras el reloj permanece en HIGH.

La salida oscila a la frecuencia de retardo de propagación de las puertas, convirtiéndose esencialmente en un oscilador de anillo. El estado final cuando el reloj baja depende de la anchura exacta del pulso con respecto al retardo de puerta, lo que hace que el comportamiento no sea determinista.

Los biestables JK disparados por flanco (como los usados en digisim.io) eliminan esto por completo. El biestable muestrea J y K únicamente en el instante de transición del reloj. Para cuando la salida cambia y se realimenta, la ventana de muestreo ya se ha cerrado.

Tablas de excitación: diseñar con biestables

Al diseñar circuitos secuenciales (como contadores o máquinas de estados), se trabaja hacia atrás desde las transiciones de estado deseadas para determinar las entradas necesarias. Aquí es donde las tablas de excitación se vuelven esenciales.

Tabla de excitación del latch SR

QQ (actual)QnextQ_{next} (deseado)SR
000X
0110
1001
11X0

(X = no importa)

Tabla de excitación del biestable JK

QQ (actual)QnextQ_{next} (deseado)JK
000X
011X
10X1
11X0

Observa la abundancia de condiciones no importa en la tabla de excitación JK. Cada transición tiene una condición no importa, frente a la tabla SR, donde hay menos condiciones no importa y la restricción S⋅R=0S \cdot R = 0 aún debe cumplirse. Estas condiciones no importa adicionales permiten una simplificación booleana considerablemente mayor al diseñar la lógica combinacional que gobierna los biestables: una ventaja tangible al minimizar el número de puertas en diseños reales.

Comparación completa

CaracterísticaLatch SRBiestable JK
EntradasS (Set), R (Reset)J, K, reloj
S=R=1 / J=K=1No válido (condición de carrera)Conmutar (bien definido)
DisparoSensible al nivel (asíncrono)Disparado por flanco (síncrono)
¿Requiere reloj?No (latch SR básico)Sí
Ecuación característicaQnext=S+R‾⋅QQ_{next} = S + \overline{R} \cdot QQnext=JQ‾+K‾QQ_{next} = J\overline{Q} + \overline{K}Q
Estado prohibidoExiste (S=R=1)Eliminado
No importa en tabla de excitaciónMenosMás (mejor optimización)
Riesgo de carrera alrededorN/A (sin reloj)Eliminado por disparo por flanco
Tamaño de implementaciónDos puertas realimentadas de forma cruzada para el latch centralDepende de la implementación; las formas maestro-esclavo y disparadas por flanco requieren almacenamiento y compuertas adicionales
Casos de uso principalesRetención de estado de control, antirrebote de interruptoresContadores y enseñanza del diseño de máquinas de estados
¿Puede construir otros tipos de biestable?LimitadoSí (universal)

Disparo por flanco: el papel del reloj

Los biestables modernos están disparados por flanco: solo cambian de estado en el momento preciso de una transición de reloj. Esto es fundamentalmente distinto del latch SR sensible al nivel, que responde a las entradas en cualquier momento.

Biestable D disparado por flanco con osciloscopio

El disparo por flanco ofrece tres garantías críticas:

  1. Evento de muestreo definido: las entradas se capturan en el flanco especificado cuando se cumplen las restricciones de preparación y mantenimiento.
  2. Filtrado temporal: no se captura un glitch de datos que no coincida con la ventana de muestreo; los glitches de reloj y los cambios de datos próximos al flanco siguen siendo riesgos.
  3. Componibilidad: varios biestables pueden compartir un reloj y actualizarse tras sus retardos individuales de reloj a Q, lo que permite un estado coordinado de varios bits.

Conversión entre SR y JK

Como el biestable JK se considera “universal”, puede emular otros tipos de biestable. Comprender estas conversiones profundiza tu dominio de ambos componentes.

Conversión de SR a JK: añade puertas AND que realimenten Q y Q‾\overline{Q}:

  • S=J⋅Q‾S = J \cdot \overline{Q}
  • R=K⋅QR = K \cdot Q

La realimentación garantiza que cuando J=K=1, solo S o R está activo (según el estado actual), produciendo el comportamiento de conmutación e impidiendo estructuralmente el estado SR prohibido.

Conversión de JK a D: conecta D a J y D‾\overline{D} a K.

Conversión de JK a T: une J y K como una única entrada T.

Construcción de contadores: la aplicación distintiva del biestable JK

Cuando J=K=1, el biestable JK conmuta en cada flanco de reloj, por lo que es el bloque de construcción natural para contadores binarios. Encadena cuatro biestables JK con sus salidas Q gobernando el reloj de la siguiente etapa y tendrás un contador asíncrono de 4 bits que recorre de 0000 a 1111.

Contador asíncrono

En un contador asíncrono, la salida Q de cada biestable gobierna la entrada de reloj del siguiente biestable. El conteo se “propaga” por la cadena a medida que cada etapa activa la siguiente:

  • FF0 conmuta en cada flanco del reloj del sistema (frecuencia = f/2f/2).
  • FF1 conmuta en cada transición de FF0 (frecuencia = f/4f/4).
  • FF2 conmuta en cada transición de FF1 (frecuencia = f/8f/8).
  • FF3 conmuta en cada transición de FF2 (frecuencia = f/16f/16).

Las salidas Q3 Q2 Q1 Q0 representan un número binario de 4 bits que incrementa en 1 en cada ciclo de reloj. La contrapartida es que cada etapa introduce un retardo de propagación, por lo que los bits de orden superior se estabilizan más tarde que los de orden inferior. Durante un breve instante después de cada flanco de reloj, la salida del contador puede mostrar un valor transitorio incorrecto. En aplicaciones de alta velocidad, este retardo de propagación puede ser problemático, por lo que se prefieren los contadores síncronos (donde todos los biestables comparten el mismo reloj).

Contador síncrono

En un contador síncrono, todos los biestables comparten el reloj del sistema. Las entradas J y K de cada biestable son gobernadas por lógica combinacional derivada del estado actual. Para un contador ascendente síncrono de 3 bits:

  • FF0: J0=K0=1 (siempre conmuta)
  • FF1: J1=K1=Q0 (conmuta solo cuando Q0=1)
  • FF2: J2=K2=Q0 ⋅\cdot Q1 (conmuta solo cuando tanto Q0 como Q1 son 1)

Todas las etapas muestrean el mismo flanco de reloj, lo que elimina la dependencia de propagación del reloj a través de las etapas. Las salidas siguen teniendo retardo de reloj a Q, la lógica combinacional de habilitación tiene retardo y los distintos bits no tienen por qué conmutar exactamente en el mismo instante físico.

Divisor de frecuencia con biestable T

Lección sobre contador asíncrono

Plantilla de biestable D disparado por flanco

Ejemplo de diseño: uso de la tabla de excitación

Para ilustrar el valor práctico de las tablas de excitación, considera el diseño de un sencillo contador de 2 bits que cuenta 0, 1, 2, 3, 0, 1, … usando biestables JK.

Paso 1: tabla de estados. Enumera el estado actual y el estado siguiente deseado para cada combinación.

Q1 actualQ0 actualQ1 siguienteQ0 siguiente
0001
0110
1011
1100

Paso 2: aplica la tabla de excitación. Para cada biestable, determina las entradas J y K necesarias.

Para FF0 (Q0): las transiciones son 0->1, 1->0, 0->1, 1->0. Usando la tabla de excitación JK: J0=1, K0=1 en todos los casos. Por tanto, J0=K0=1: FF0 siempre conmuta.

Para FF1 (Q1): las transiciones son 0->0, 0->1, 1->1, 1->0. Usando la tabla de excitación: J1=0/K1=X, J1=1/K1=X, J1=X/K1=0, J1=X/K1=1. A partir de un mapa de Karnaugh, J1=Q0 y K1=Q0.

Resultado: Un contador síncrono de 2 bits requiere J0=K0=1 y J1=K1=Q0. No se necesitan puertas adicionales más allá de los propios biestables y un solo cable de Q0 a las entradas J y K de FF1. La abundancia de condiciones no importa hizo que esta minimización fuera directa: un beneficio inmediato de elegir JK en lugar de SR.

Resumen de aplicaciones

AplicaciónComponenteMotivo
Antirrebote de interruptoresLatch SRSencillo, no necesita reloj; el primer contacto establece el estado
Concepto de SRAMRealimentación biestable cruzadaLa SRAM densa normalmente usa inversores realimentados de forma cruzada más transistores de acceso, no un latch SR encapsulado
Contadores binariosBiestable JKEl modo de conmutación cuenta de forma natural
Divisores de frecuenciaBiestable JK o TCada etapa divide el reloj por 2
Máquinas de estados (FSM)Biestable JKLas condiciones no importa simplifican la lógica
Registros de CPUBiestable DCaptura de datos más sencilla, sin estado prohibido
Registros de desplazamientoBiestable DMovimiento de datos serie entre etapas

Pruébalo tú mismo

Experimenta con estos circuitos en digisim.io:

  1. Latch SR: constrúyelo con dos puertas NOR y prueba las cuatro combinaciones de entrada. Observa atentamente el estado prohibido.
  2. Modo de conmutación JK: conecta J=K=1 con un reloj y observa cómo Q conmuta en cada flanco usando el osciloscopio.
  3. Contador asíncrono de 3 bits: encadena tres biestables JK en modo de conmutación. Conecta las salidas Q al osciloscopio y observa el patrón de conteo binario.
  4. Conversión de SR a JK: construye un biestable JK a partir de un latch SR, dos puertas AND y un reloj. Comprueba que J=K=1 produce una conmutación limpia en lugar del estado prohibido.
  5. Ejercicio de tabla de excitación: diseña un contador módulo 6 usando biestables JK. Usa la tabla de excitación para derivar la lógica de entrada J y K de cada biestable.

Continúa con contadores y máquinas de estados para construir FSM completas a partir de estos elementos primitivos, o abre la referencia del biestable D para conocer el elemento de almacenamiento síncrono usado habitualmente en registros.

Convierte la idea en un circuito funcional.