Cruce de dominios de reloj: ¿Es posible diseñar una arquitectura de un dominio más rápido a uno más lento y de un dominio más lento a otro simultáneamente?

1

Si tengo un diseño que ha leído el reloj y el reloj de escritura, y quiero que funcione en los siguientes escenarios:

  1. reloj de lectura más rápido y reloj de escritura más lento
  2. reloj de lectura más lenta y reloj de escritura más rápido

¿Es esto posible sin cambiar la arquitectura de un escenario a otro?

Por ejemplo: tengo un solo pulso que pasa de un dominio de reloj a otro. Quiero que se detecte en cualquiera de los escenarios.

PS: nunca había trabajado en CDC antes. Acabo de empezar a buscarlo.

    
pregunta ssgr

2 respuestas

1

Sí, un método es insertar "burbujas" (ciclo inactivo) en el lado que sea más rápido para mantener igual el número total de ciclos entre ambos lados. Esto es una especie de técnica de pseudo-sincronización para FIFO's.

Normalmente, esto solo se haría en el lado más rápido. Si los relojes pueden cambiar, es más rápido, entonces podría poner uno a cada lado y deshabilitar el que esté en el lado más lento.

O podría ir con una solución FIFO asíncrona que no requiere nada especial para el lado más lento / más rápido. Para lidiar con la metastabilidad, usualmente se usan dos FF para almacenar el puntero de escritura (reduce en gran medida la posibilidad de metastabilidad a un nivel estadísticamente insignificante), lo que proporciona un ciclo adicional de retraso entre lectura / escritura. Esto aumenta la latencia pero no tiene efecto en el rendimiento.

    
respondido por el jbord39
0

Para empezar, depende de la arquitectura de su diseño. Por ejemplo, considere la transmisión de 'datos' y 'dataValid' de un dominio a otro.

Si el reloj del circuito de origen es más lento que el reloj del circuito de destino, el circuito de destino puede, y lo hará, ver 'dataValid' como se afirma para más relojes de los que la fuente quiso que fuera. Si el reloj de origen es más rápido que el "reloj de destino", el circuito de "destino" puede pasar por alto que "dataValid" sea alto en su totalidad o verlo afirmado por menos relojes de lo que la fuente quería que fuera.

La lista de áreas de interés continúa, pero el punto es que el circuito debe diseñarse teniendo en cuenta el flujo de datos, los tiempos de viaje y el intercambio de ideas entre los dos circuitos. A menudo es esencial planearlo desde el principio, pero a veces se puede agregar más tarde con menos problemas. Luego están todos los problemas de diseñar la metastabilidad.

Todo se puede hacer, todo se hace perfectamente bien, pero necesita comprensión y planificación. No es una tarea trivial.

    
respondido por el TonyM

Lea otras preguntas en las etiquetas