Si tengo un diseño que tiene reloj de lectura y reloj de escritura, y quiero que funcione para los siguientes escenarios:
¿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 sea detectado en cualquiera de los escenarios.
PD: Nunca antes había trabajado en CDC. Acabo de empezar a investigarlo.
Para empezar, depende de la arquitectura de su diseño. Por ejemplo, considere transmitir 'datos' y 'datos válidos' 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 afirmado para más relojes de los que la fuente pretendía que fueran. 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' es alto por completo o verlo como afirmado para menos relojes de los que la fuente pretendía que fueran.
La lista de áreas de preocupación 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 protocolo de enlace entre los dos circuitos. A menudo es esencial planificarlo 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 metaestabilidad.
Todo se puede hacer, todo se puede hacer perfectamente bien, pero necesita comprensión y planificación. No es una tarea baladí.
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. Esta es una especie de técnica de pseudo-sincronización para FIFO.
Por lo general, esto solo se haría en el lado más rápido. Si los relojes pueden cambiar cuál es más rápido, puede colocar uno en cada lado y desactivar el que esté en el lado más lento.
O puede optar por una solución FIFO asíncrona que no requiera nada especial para el lado más lento/más rápido. Para lidiar con la metaestabilidad, generalmente se usan dos FF para almacenar el puntero de escritura (reduce en gran medida la posibilidad de metaestabilidad a un nivel estadísticamente insignificante), lo que brinda un ciclo adicional de retraso entre lectura/escritura. Esto aumenta la latencia pero no tiene efecto en el rendimiento.
bobflux
Super gato