Temporización dentro de un registro de desplazamiento

Cómo imagino que funcionan las redes digitales síncronas: las líneas de datos se muestrean en el flanco ascendente del reloj, se produce una serie de transitorios, el sistema se estabiliza y las líneas de datos se muestrean nuevamente en el siguiente flanco ascendente. Colocaría los transitorios en los bordes descendentes del reloj, de esa manera tanto el tiempo Tsu como el Th para el muestreo son claros. (Algo similar al comportamiento del bus SPI).

Lo que se ve en una hoja de datos de un dispositivo del mundo real (74595): flip-flops D conectados en serie que tienen un reloj común. A la salida del primer flip-flop, el transitorio en la línea de datos sigue al flanco ascendente del reloj con Tpd. El siguiente flip-flop necesita la línea de datos estable en el tiempo después del flanco ascendente para funcionar correctamente. Por supuesto que funciona porque Tpd>Th, pero es solo cuestión de nanosegundos.

Mi problema con todo esto es que no es robusto (quizás no sea la mejor palabra). Visualizar cosas en un analizador lógico será menos útil porque las líneas de datos prácticamente cambian en sincronía con el flanco ascendente del reloj. Los errores aleatorios causados ​​por Th>Tpd no son realmente visibles y pasan desapercibidos. Si conecto otro registro de desplazamiento en serie de una tecnología diferente, que requiere tiempos de espera más largos, el circuito no funcionará, sin importar qué tan lento sea el reloj que elija.

¿Es esta la forma más común en que se construyen los circuitos digitales síncronos? ¿Solo el retraso de propagación de los componentes hace que funcione? ¿Estoy siendo demasiado idealista? :)

Respuestas (3)

Tienes razón en tu intuición de que hay un problema potencial. Dentro de un chip, los diseñadores de chips se han ocupado de ello. Cuando conecta una cadena de, digamos, 74x595, puede tener problemas, especialmente con una cadena larga, un controlador débil y un cableado de reloj que comienza en el 'primer' chip (el que recibe los datos). Una solución 'estándar' es alimentar el reloj comenzando en el último chip.

Una mejor solución es usar un chip como el CD4094 que tiene una salida retardada. Tiene un flip-flop adicional, que está cronometrado en el borde opuesto. El uso de esta salida para alimentar el nect SR elimina todos los problemas de configuración/retención (pero reduce la frecuencia máxima del reloj).

Creo que puede lograr el mismo efecto (una especie de implementación pobre de la salida retrasada) cronometrando los 595 pares con el reloj simple y los 595 impares con el reloj invertido. Pero realmente nunca resolví esto.

El cronometraje de 595 alternativos con flancos de reloj opuestos limita el uso de 15 bits para cada par de 595 (después de cada flanco en el que se cronometra el segundo 595, su primera etapa contendrá los mismos datos que la última etapa del anterior, lo que significa que los 595 juntos solo tienen 15 bits distintos).
Tiene sentido, la última etapa se usa más o menos como etapa retrasada en un 4094.
Es bueno que el 4094 tenga una etapa tan retrasada. Me pregunto por qué los pestillos que muestran en un borde y cambian en el otro no son más comunes. Si un chip puede convertir internamente los flancos ascendentes y descendentes en pulsos que son suficientes para operar un pestillo transparente, pero que son más cortos que los anchos de pulso de reloj mínimos y máximos permitidos, la única lógica adicional requerida en comparación con un reloj de un solo flanco sería en el circuito de acondicionamiento de reloj.
Creo que es porque tu suposición no se sostiene. Un registro no es un cerrojo con condicionamiento de reloj, son dos cerrojos transparentes, uno de los cuales está controlado por el reloj invertido. Su idea requeriría dos registros de este tipo (o tal vez tres pestillos). Creo que la utilidad de un dispositivo de este tipo no compensó el circuito agregado y la peor velocidad máxima.
Hay varias formas en que se pueden implementar los registros. Una implementación de registro común es esencialmente un flip flop maestro/esclavo, donde el esclavo está diseñado para comenzar a pasar datos aproximadamente al mismo tiempo que el maestro deja de pasarlos. Sin embargo, históricamente, muchos dispositivos han manejado el enganche mediante el uso de enganches transparentes junto con dos señales de reloj que no se superponen. Por lo general, los relojes que no se superponen estaban desfasados ​​180 grados, pero no hay razón para que así sea. Este enfoque significaba que en aquellas partes del dispositivo que no tenían que funcionar a la mayor velocidad posible...
... las únicas especificaciones de tiempo que uno tenía que cumplir eran "es lo suficientemente rápido" y "la tapa aguantará el tiempo suficiente". Las únicas condiciones de carrera en cualquier parte del dispositivo estaban en la pequeña porción del circuito que tenía que generar los relojes de dos fases; en cualquier otro lugar, uno podría cualquier combinación arbitraria de reemplazar transistores con los "ideales" sin afectar la operación del circuito.
@supercat: los circuitos impulsados ​​​​por dos collocks que no se superponen son, de hecho, más fáciles de hacer (usan menos componentes), pero AFAIK no se usan en los chips como el TS mencionado. (Me trae recuerdos de leer hojas de datos 8080 e intentar diseñar un circuito para hacer señales de reloj para ese chip, ¡demasiado difícil para un niño de 16 años, ni siquiera tenían el nivel TTL! ¡Hurra cuando el Z80 hizo tales intentos innecesarios).
Por cierto, me parece curioso que no sepa que los registros de desplazamiento usan más de dos fases de reloj, a pesar del hecho de que un registro de desplazamiento que usa, por ejemplo, cuatro fases de reloj solo necesitaría cuatro pestillos transparentes para contener cada tres bits (mientras que uno que usa o dos fases de reloj o latches maestro/esclavo necesitarían efectivamente dos latches por bit.

Sí, pero lo que el esquema no muestra es que el diseñador de circuitos integrados ha incluido un pequeño retraso en la línea de datos. En una situación normal, los datos pasarían por algunas puertas lógicas y harían un "trabajo real" antes de ser muestreados.

Es totalmente razonable que los datos no pasen por puertas lógicas; pero si eso viola el tiempo de espera, debe agregar retrasos explícitos.

Mi problema con todo esto es que no es robusto (quizás no sea la mejor palabra). Visualizar cosas en un analizador lógico será menos útil porque las líneas de datos prácticamente cambian en sincronía con el flanco ascendente del reloj. Los errores aleatorios causados ​​por Th>Tpd no son realmente visibles y pasan desapercibidos. Si conecto otro registro de desplazamiento en serie de una tecnología diferente, que requiere tiempos de espera más largos, el circuito no funcionará, sin importar qué tan lento sea el reloj que elija.

Planteas dos cuestiones. Llamemos a los dos circuitos síncronos A y B, donde A alimenta a B, y ambos comparten el mismo reloj.

  1. El circuito no funcionará si el total T pd(A) < T h(B) donde T pd es el retraso combinacional del reloj. ¿Es esto cierto? ¡Absolutamente!Usted es el diseñador del circuito y es su responsabilidad final asegurarse de que el circuito funcione. En realidad, no suele ser motivo de preocupación; incluso si alimenta una salida de registro directamente a la entrada de otro, el margen de diseño de las especificaciones del chip es alto. Para un NXP 74HC595, por ejemplo, el retraso de propagación típico con un suministro de 4,5 V es de 19 ns, el tiempo de espera requerido es de 3 nseg y el tiempo de espera típico es de -2 nseg; no hay problema allí. Para un TI SN74LV595A a 5 V, el retraso de propagación típico es de 4,5 nseg, el retraso de propagación mínimo es de 1 nseg, el tiempo de espera requerido es de 2 nseg. ¿Podría ser esto un problema si el retraso de propagación y los tiempos de espera están en su peor caso? Absolutamente. ¿Podría ser un problema si conecta en cascada un SN74LV595A en un NXP74HC595? Absolutamente.

  2. "Visualizar cosas en un analizador lógico será menos útil porque las líneas de datos prácticamente cambian en sincronía con el flanco ascendente del reloj". Verdadero. Tome una sugerencia de los buses SPI y configure el analizador lógico para que muestree los datos en el flanco descendente del reloj . Las reglas de SPI son simples: actualiza las salidas en un extremo y muestrea las entradas en el otro.