Nivel: Avanzado. Implementar un circuito de reloj controlado (clock gating) que permita pulsos de sincronización solo cuando Data Ready y System Enable estén activos.
Objetivo y caso de uso
En esta sesión, diseñará y analizará un circuito de gating de reloj (clock gating) utilizando puertas AND en cascada para controlar el flujo de pulsos de reloj de alta velocidad hacia un registro de desplazamiento. Validará que la señal de reloj solo se propague cuando dos banderas de control distintas (‘Data Ready’ y ‘System Enable’) estén simultáneamente en alto.
Por qué es útil:
* Gestión de energía: Deshabilitar el árbol de reloj hacia registros de desplazamiento inactivos o subsistemas reduce el consumo de energía dinámica en circuitos CMOS.
* Integridad de datos: Asegura que los datos solo se registren en el búfer cuando la fuente indica datos válidos (Data Ready) y el controlador permite la recepción (System Enable).
* Arbitraje de bus: Previene la contención del bus sincronizando múltiples periféricos que comparten una línea de datos común.
Resultado esperado:
* La salida GATED_CLK refleja la entrada CLK solo cuando DATA_RDY = 1 y SYS_EN = 1.
* Se mide el retardo de propagación entre el flanco de reloj de entrada y el flanco de reloj de salida (típicamente 7–15 ns para la serie 74HC).
* Identificación de «pulsos enanos» (runt pulses) o glitches si las señales de habilitación cambian de estado mientras el reloj está en alto.
Público objetivo y nivel:
Estudiantes de ingeniería electrónica y diseñadores de sistemas embebidos (Avanzado).
Materiales
- U1: CI 74HC08 de cuatro puertas AND de 2 entradas, función: puerta lógica
- V_CLK: Generador de pulsos, función: Reloj Maestro (1 MHz, 0V-5V)
- V_DR: Fuente de tensión CC o Interruptor, función: señal Data Ready
- V_SE: Fuente de tensión CC o Interruptor, función: señal System Enable
- V1: Fuente de alimentación de 5 V CC, función: alimentación principal
- C1: Condensador cerámico de 100 nF, función: desacoplo de U1
- R_LOAD: Resistencia de 10 kΩ, función: simula impedancia de entrada del registro de desplazamiento
- C_LOAD: Condensador de 15 pF, función: simula capacitancia de entrada y carga de la sonda
Pin-out del CI utilizado
Chip seleccionado: 74HC08 (Cuádruple puerta AND de 2 entradas)
| Pin | Nombre | Función lógica | Conexión en este caso |
|---|---|---|---|
| 1 | 1A | Entrada Puerta 1 | Conecta al Nodo DATA_RDY |
| 2 | 1B | Entrada Puerta 1 | Conecta al Nodo SYS_EN |
| 3 | 1Y | Salida Puerta 1 | Conecta al Nodo ENABLE_COMBINED (Interno) |
| 4 | 2A | Entrada Puerta 2 | Conecta al Nodo ENABLE_COMBINED |
| 5 | 2B | Entrada Puerta 2 | Conecta al Nodo CLK_IN |
| 6 | 2Y | Salida Puerta 2 | Conecta al Nodo GATED_CLK |
| 7 | GND | Tierra / Masa | Conecta al Nodo 0 |
| 14 | VCC | Alimentación | Conecta al Nodo VCC |
Guía de conexionado
Construya el circuito siguiendo estas conexiones de nodos. Asegúrese de que la fuente de alimentación esté apagada mientras realiza el cableado.
-
Fuente de alimentación:
- El terminal positivo de V1 conecta al nodo VCC.
- El terminal negativo de V1 conecta al nodo 0 (GND).
- C1 conecta entre VCC y 0 (colocado cerca de U1).
- El Pin 14 de U1 conecta a VCC.
- El Pin 7 de U1 conecta a 0.
-
Lógica de control (Puerta 1):
- El terminal positivo de V_DR (Data Ready) conecta al nodo DATA_RDY.
- El terminal positivo de V_SE (System Enable) conecta al nodo SYS_EN.
- El Pin 1 (1A) de U1 conecta al nodo DATA_RDY.
- El Pin 2 (1B) de U1 conecta al nodo SYS_EN.
- El Pin 3 (1Y) de U1 conecta al nodo ENABLE_COMBINED.
-
Gating de reloj (Puerta 2):
- El terminal positivo de V_CLK (Fuente de reloj) conecta al nodo CLK_IN.
- El Pin 4 (2A) de U1 conecta al nodo ENABLE_COMBINED.
- El Pin 5 (2B) de U1 conecta al nodo CLK_IN.
- El Pin 6 (2Y) de U1 conecta al nodo GATED_CLK.
-
Carga de salida:
- R_LOAD conecta entre GATED_CLK y 0.
- C_LOAD conecta entre GATED_CLK y 0.
Diagrama de bloques conceptual

Esquemático
[ INPUT SIGNALS ] [ LOGIC PROCESSING (U1: 74HC08) ] [ OUTPUT STAGE ]
+-----------------------------------+
| POWER SUPPLY & DECOUPLING |
| V1 (5V) -> Pin 14, GND -> Pin 7 |
| C1 (100nF) across VCC/GND |
+-----------------------------------+
|
[ V_DR: Data Ready ] --(Pin 1)-->+ |
| v
+-----> [ AND Gate 1 ] ---+
| (Control Logic) |
[ V_SE: Sys Enable ] --(Pin 2)-->+ |
|
| (Pin 3: ENABLE_COMBINED)
|
v
(Pin 4)
+---> [ AND Gate 2 ] --(Pin 6)--> [ R_LOAD (10k) ] --+
| (Clock Gating) [ C_LOAD (15pF) ] |
[ V_CLK: Master Clk ] --(Pin 5)----------------------------+ (Signal: GATED_CLK) v
GND
Diagrama eléctrico
Tabla de verdad
Esta tabla representa la lógica en cascada: GATED_CLK = (DATA_RDY AND SYS_EN) AND CLK_IN.
| DATA_RDY | SYS_EN | ENABLE_COMBINED (Interno) | CLK_IN | GATED_CLK | Descripción del estado |
|---|---|---|---|---|---|
| 0 | X | 0 | X | 0 | Bloqueado: Datos no listos |
| X | 0 | 0 | X | 0 | Bloqueado: Sistema deshabilitado |
| 1 | 1 | 1 | 0 | 0 | Activo: Fase baja del reloj |
| 1 | 1 | 1 | 1 | 1 | Activo: Fase alta del reloj aprobada |
(X = No importa)
Mediciones y pruebas
Realice los siguientes pasos de validación utilizando un osciloscopio (se recomienda doble canal).
-
Validación lógica estática:
- Establezca V_CLK a 0V. Conmute V_DR y V_SE. Asegúrese de que GATED_CLK permanezca en 0V.
- Establezca V_CLK a 5V (CC). Asegúrese de que GATED_CLK esté en Alto SOLO cuando tanto V_DR como V_SE estén en Alto.
-
Gating de reloj dinámico:
- Configure V_CLK a una onda cuadrada de 1 MHz (ciclo de trabajo del 50%).
- Habilite el Canal 1 en CLK_IN y el Canal 2 en GATED_CLK.
- Active tanto V_DR como V_SE. Verifique que el Canal 2 replique al Canal 1.
- Desactive V_DR. Verifique que el Canal 2 se quede plano en Bajo.
-
Análisis del retardo de propagación (Avanzado):
- Con el reloj funcionando y pasando a través, maximice el zoom horizontal (base de tiempo ~10ns/div).
- Mida la diferencia de tiempo entre el punto de tensión del 50% del flanco de subida de CLK_IN y el flanco de subida de GATED_CLK.
- Resultado esperado: Un retardo de aproximadamente 15ns–25ns (suma de los retardos a través de la Puerta 1 y la Puerta 2).
-
Observación de Glitch/Riesgos:
- Mientras CLK_IN está en Alto, conmute manualmente DATA_RDY.
- Observe si aparecen pulsos truncados («enanos» o runts) en la salida. Estos son riesgos causados por el gating asíncrono.
Netlist SPICE y simulación
Netlist SPICE de referencia (ngspice) — extractoNetlist SPICE completo (ngspice)
* Practical case: Data transfer synchronization
* --- Power Supply ---
* V1 positive terminal connects to node VCC. Negative to node 0 (GND).
V1 VCC 0 DC 5
* C1 connects between VCC and 0 (placed close to U1).
C1 VCC 0 100n
* --- Input Stimuli (Dynamic) ---
* V_CLK: Master Clock (1 MHz, 0V-5V).
* PULSE(V1 V2 TD TR TF PW PER) -> 1us Period, 0.49us Width
V_CLK CLK_IN 0 PULSE(0 5 0 10n 10n 490n 1u)
* V_DR: Data Ready signal.
* Simulates a data packet ready signal. Pulses High from 5us to 15us.
V_DR DATA_RDY 0 PULSE(0 5 5u 10n 10n 10u 40u)
* V_SE: System Enable signal.
* Simulates system enable window. Pulses High from 2us to 22us.
V_SE SYS_EN 0 PULSE(0 5 2u 10n 10n 20u 50u)
* --- Control Logic (U1: 74HC08) ---
* Instantiation of the IC using a behavioral subcircuit.
* Mapping pins according to Wiring Guide:
* Pin 1 (1A) -> DATA_RDY
* Pin 2 (1B) -> SYS_EN
* Pin 3 (1Y) -> ENABLE_COMBINED
* Pin 4 (2A) -> ENABLE_COMBINED
* Pin 5 (2B) -> CLK_IN
* Pin 6 (2Y) -> GATED_CLK
* ... (truncated in public view) ...
Copia este contenido en un archivo .cir y ejecútalo con ngspice.
* Practical case: Data transfer synchronization
* --- Power Supply ---
* V1 positive terminal connects to node VCC. Negative to node 0 (GND).
V1 VCC 0 DC 5
* C1 connects between VCC and 0 (placed close to U1).
C1 VCC 0 100n
* --- Input Stimuli (Dynamic) ---
* V_CLK: Master Clock (1 MHz, 0V-5V).
* PULSE(V1 V2 TD TR TF PW PER) -> 1us Period, 0.49us Width
V_CLK CLK_IN 0 PULSE(0 5 0 10n 10n 490n 1u)
* V_DR: Data Ready signal.
* Simulates a data packet ready signal. Pulses High from 5us to 15us.
V_DR DATA_RDY 0 PULSE(0 5 5u 10n 10n 10u 40u)
* V_SE: System Enable signal.
* Simulates system enable window. Pulses High from 2us to 22us.
V_SE SYS_EN 0 PULSE(0 5 2u 10n 10n 20u 50u)
* --- Control Logic (U1: 74HC08) ---
* Instantiation of the IC using a behavioral subcircuit.
* Mapping pins according to Wiring Guide:
* Pin 1 (1A) -> DATA_RDY
* Pin 2 (1B) -> SYS_EN
* Pin 3 (1Y) -> ENABLE_COMBINED
* Pin 4 (2A) -> ENABLE_COMBINED
* Pin 5 (2B) -> CLK_IN
* Pin 6 (2Y) -> GATED_CLK
* Pin 7 (GND)-> 0
* Pin 14(VCC)-> VCC
XU1 DATA_RDY SYS_EN ENABLE_COMBINED ENABLE_COMBINED CLK_IN GATED_CLK 0 VCC 74HC08_BEHAVIORAL
* --- Output Loading ---
* R_LOAD connects between GATED_CLK and 0.
R_LOAD GATED_CLK 0 10k
* C_LOAD connects between GATED_CLK and 0.
C_LOAD GATED_CLK 0 15p
* --- Subcircuit Model: 74HC08 ---
* Robust behavioral implementation using sigmoid functions for convergence.
* Only the gates used in the wiring are modeled to save complexity.
.subckt 74HC08_BEHAVIORAL 1A 1B 1Y 2A 2B 2Y GND VCC
* Gate 1: 1Y = 1A AND 1B
* Function: V(VCC) * Sigmoid(A) * Sigmoid(B)
B_G1 1Y_INT GND V = V(VCC) * (1 / (1 + exp(-50*(V(1A)-2.5)))) * (1 / (1 + exp(-50*(V(1B)-2.5))))
R_G1 1Y_INT 1Y 100
* Gate 2: 2Y = 2A AND 2B
B_G2 2Y_INT GND V = V(VCC) * (1 / (1 + exp(-50*(V(2A)-2.5)))) * (1 / (1 + exp(-50*(V(2B)-2.5))))
R_G2 2Y_INT 2Y 100
.ends
* --- Analysis Directives ---
.op
* Transient analysis: 10ns step, 25us duration to capture full logic sequence
.tran 10n 25u
* --- Output Directives ---
.print tran V(CLK_IN) V(DATA_RDY) V(SYS_EN) V(ENABLE_COMBINED) V(GATED_CLK)
.end
Resultados de Simulación (Transitorio)
Show raw data table (6072 rows)
Index time v(clk_in) v(data_rdy) v(sys_en) 0 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 1 1.000000e-10 5.000000e-02 0.000000e+00 0.000000e+00 2 2.000000e-10 1.000000e-01 0.000000e+00 0.000000e+00 3 4.000000e-10 2.000000e-01 0.000000e+00 0.000000e+00 4 8.000000e-10 4.000000e-01 0.000000e+00 0.000000e+00 5 1.600000e-09 8.000000e-01 0.000000e+00 0.000000e+00 6 3.200000e-09 1.600000e+00 0.000000e+00 0.000000e+00 7 6.400000e-09 3.200000e+00 0.000000e+00 0.000000e+00 8 1.000000e-08 5.000000e+00 0.000000e+00 0.000000e+00 9 1.064000e-08 5.000000e+00 0.000000e+00 0.000000e+00 10 1.192000e-08 5.000000e+00 0.000000e+00 0.000000e+00 11 1.448000e-08 5.000000e+00 0.000000e+00 0.000000e+00 12 1.960000e-08 5.000000e+00 0.000000e+00 0.000000e+00 13 2.960000e-08 5.000000e+00 0.000000e+00 0.000000e+00 14 3.960000e-08 5.000000e+00 0.000000e+00 0.000000e+00 15 4.960000e-08 5.000000e+00 0.000000e+00 0.000000e+00 16 5.960000e-08 5.000000e+00 0.000000e+00 0.000000e+00 17 6.960000e-08 5.000000e+00 0.000000e+00 0.000000e+00 18 7.960000e-08 5.000000e+00 0.000000e+00 0.000000e+00 19 8.960000e-08 5.000000e+00 0.000000e+00 0.000000e+00 20 9.960000e-08 5.000000e+00 0.000000e+00 0.000000e+00 21 1.096000e-07 5.000000e+00 0.000000e+00 0.000000e+00 22 1.196000e-07 5.000000e+00 0.000000e+00 0.000000e+00 23 1.296000e-07 5.000000e+00 0.000000e+00 0.000000e+00 ... (6048 more rows) ...
Netlist SPICE de referencia (ngspice)
* Practical case: Data transfer synchronization
* --- Power Supply ---
* V1 positive terminal connects to node VCC. Negative to node 0 (GND).
V1 VCC 0 DC 5
* C1 connects between VCC and 0 (placed close to U1).
C1 VCC 0 100n
* --- Input Stimuli (Dynamic) ---
* V_CLK: Master Clock (1 MHz, 0V-5V).
* PULSE(V1 V2 TD TR TF PW PER) -> 1us Period, 0.49us Width
V_CLK CLK_IN 0 PULSE(0 5 0 10n 10n 490n 1u)
* V_DR: Data Ready signal.
* Simulates a data packet ready signal. Pulses High from 5us to 15us.
V_DR DATA_RDY 0 PULSE(0 5 5u 10n 10n 10u 40u)
* V_SE: System Enable signal.
* Simulates system enable window. Pulses High from 2us to 22us.
V_SE SYS_EN 0 PULSE(0 5 2u 10n 10n 20u 50u)
* --- Control Logic (U1: 74HC08) ---
* Instantiation of the IC using a behavioral subcircuit.
* Mapping pins according to Wiring Guide:
* Pin 1 (1A) -> DATA_RDY
* Pin 2 (1B) -> SYS_EN
* Pin 3 (1Y) -> ENABLE_COMBINED
* Pin 4 (2A) -> ENABLE_COMBINED
* Pin 5 (2B) -> CLK_IN
* Pin 6 (2Y) -> GATED_CLK
* Pin 7 (GND)-> 0
* Pin 14(VCC)-> VCC
XU1 DATA_RDY SYS_EN ENABLE_COMBINED ENABLE_COMBINED CLK_IN GATED_CLK 0 VCC 74HC08_BEHAVIORAL
* --- Output Loading ---
* R_LOAD connects between GATED_CLK and 0.
R_LOAD GATED_CLK 0 10k
* C_LOAD connects between GATED_CLK and 0.
C_LOAD GATED_CLK 0 15p
* --- Subcircuit Model: 74HC08 ---
* Robust behavioral implementation using sigmoid functions for convergence.
* Only the gates used in the wiring are modeled to save complexity.
.subckt 74HC08_BEHAVIORAL 1A 1B 1Y 2A 2B 2Y GND VCC
* Gate 1: 1Y = 1A AND 1B
* Function: V(VCC) * Sigmoid(A) * Sigmoid(B)
B_G1 1Y_INT GND V = V(VCC) * (1 / (1 + exp(-50*(V(1A)-2.5)))) * (1 / (1 + exp(-50*(V(1B)-2.5))))
R_G1 1Y_INT 1Y 100
* Gate 2: 2Y = 2A AND 2B
B_G2 2Y_INT GND V = V(VCC) * (1 / (1 + exp(-50*(V(2A)-2.5)))) * (1 / (1 + exp(-50*(V(2B)-2.5))))
R_G2 2Y_INT 2Y 100
.ends
* --- Analysis Directives ---
.op
* Transient analysis: 10ns step, 25us duration to capture full logic sequence
.tran 10n 25u
* --- Output Directives ---
.print tran V(CLK_IN) V(DATA_RDY) V(SYS_EN) V(ENABLE_COMBINED) V(GATED_CLK)
.end
Resultados de Simulación (Transitorio)
Errores comunes y cómo evitarlos
- Dejar entradas no utilizadas flotando:
- Problema: Las entradas no utilizadas en el 74HC08 (p. ej., Pines 9, 10, 12, 13) captan ruido, causando alto consumo de energía u oscilación.
- Solución: Conecte todas las entradas de puertas AND no utilizadas directamente a GND o VCC.
- Ignorar la acumulación del retardo de propagación:
- Problema: Asumir que la salida ocurre instantáneamente. En esta configuración en cascada (Puerta 1 -> Puerta 2), el retardo es el doble que el de una sola puerta.
- Solución: Tenga en cuenta este retardo en los diagramas de tiempo; las señales pueden llegar demasiado tarde para el tiempo de establecimiento (setup time) del registro de desplazamiento subsiguiente.
- Hacer gating del reloj de forma asíncrona:
- Problema: Cambiar SYS_EN mientras el reloj está en Alto recorta el ancho del pulso, violando el requisito de ancho de pulso mínimo del registro de desplazamiento.
- Solución: Idealmente, sincronice la señal de Habilitación (Enable) con el flanco de bajada del reloj (usando un Flip-Flop) antes de alimentarla a la puerta AND.
Solución de problemas
- Síntoma: La salida está permanentemente en Bajo, incluso cuando todas las entradas están en Alto.
- Causa: Falta alimentación en el Pin 14 o GND en el Pin 7.
- Solución: Verifique la continuidad de VCC/GND con un multímetro.
- Síntoma: «Fantasma» (ghosting) o flancos ruidosos en el osciloscopio.
- Causa: Falta de condensador de desacoplo o cables de tierra largos en las sondas.
- Solución: Instale C1 (100nF) extremadamente cerca del CI; use el muelle de tierra en la punta de la sonda.
- Síntoma: Los flancos de la señal son muy redondeados (tiempo de subida lento).
- Causa: La carga capacitiva es demasiado alta (cables largos o capacitancia parásita de la protoboard).
- Solución: Acorte los cables o añada un búfer si maneja una carga pesada.
Posibles mejoras y extensiones
- Gating libre de glitches: Añada un D-Flip-Flop (p. ej., 74HC74) para sincronizar la señal ENABLE_COMBINED de modo que solo cambie de estado cuando el Reloj esté en Bajo.
- Inserción de estados de espera: Expanda el circuito para afirmar una señal «BUSY» de vuelta al controlador siempre que el reloj se active con éxito, confirmando que la transferencia de datos está activa.
Más Casos Prácticos en Prometeo.blog
Encuentra este producto y/o libros sobre este tema en Amazon
Como afiliado de Amazon, gano con las compras que cumplan los requisitos. Si compras a través de este enlace, ayudas a mantener este proyecto.











