metatabilidad interna fpga

1

Tengo un problema que creo que quizás esté relacionado con problemas de tiempo interno.

Sé que cruzar dominios de reloj puede causar metastabilidad, porque la configuración y el tiempo de espera no se mantienen.

Pero estaba pensando que esto también podría ser un problema con las señales internas (dentro del mismo dominio de reloj).

Si ej. una señal a un FF se pasa a través de alguna lógica y, por lo tanto, retrasa una cantidad que hará que el FF de muestreo muestre en la transición.

¿O la herramienta dadas las restricciones de tiempo siempre advertirá / detectará esto?

    
pregunta JakobJ

2 respuestas

3

La salida de un registro cuya entrada no cambia dentro de un margen específico del reloj cambiará dentro de un período específico de tiempo del reloj. La salida de un registro cuya entrada cambia demasiado cerca de un reloj puede cambiar en algún momento arbitrario en el futuro, lo que podría, aunque en general no es probable, estar cerca del siguiente reloj.

Si la entrada de un registro se deriva de señales que están sincronizadas con la misma señal que el propio registro, y si el tiempo máximo de propagación es suficientemente más corto que el tiempo entre los relojes, siempre que el registro anterior cambie como se especifica, el derivado La entrada no cambiará dentro de la ventana prohibida. Sin embargo, si el tiempo máximo de propagación es mayor que el tiempo entre los relojes, surgirá una mala situación. Cuando se enganchan eventos verdaderamente asíncronos, es posible que los eventos puedan ocasionalmente poner un latch en un estado metaestable, pero la alimentación de la salida de ese latch en un segundo latch generalmente despejará las cosas. Si el primer cierre entra en un estado metaestable aproximadamente una vez por minuto, y uno de cada diez millones de eventos de metastabilidad en el primer cierre hará que el segundo cierre sea metaestable, los problemas en el segundo cierre solo ocurrirán una vez cada veinte años. Sin embargo, si en lugar de ser asíncronas, las señales que llegan a un conmutador de retención en momentos en que la lógica combinatoria se retrasa en un tiempo cercano al de un reloj, es posible que el primer bloqueo sea metaestable una vez por minuto, puede llegar a ser metatable millones de veces por segundo. Agregar un segundo pestillo puede mejorar las cosas, pero incluso con una mejora de 10,000,000: 1, el cerrojo descendente aún sería metaestable muchas veces por minuto.

Si el tiempo de propagación es demasiado largo en relación con el período de su reloj, debe agregar registros para asegurarse de que el resultado propagado se verá de forma consistente una cierta cantidad de períodos de reloj después de que cambien los latches de la etapa anterior, o bien agregar lógica a asegúrese de que nada hará nada con la salida de un registro que puede haber sido metaestable. El primer enfoque sería mejor si uno desea manejar un elemento de datos por ciclo de reloj, pero puede aceptar el retraso de la tubería. El último enfoque puede ser mejor si hay muchos datos paralelos y no será necesario tener múltiples cálculos en la tubería simultáneamente [la cantidad de lógica requerida sería independiente del número de rutas de datos]. El último enfoque puede ser especialmente ventajoso si el número requerido de ciclos de retardo puede ser variable [p. si un circuito puede funcionar a 100MHz, 50Mhz o 32MHz y el tiempo de propagación de la lógica es de 25 ns, se puede usar un retardo de dos ciclos a 100Mhz, un ciclo a 50MHz y ningún retardo a 32Mhz o inferior].

    
respondido por el supercat
1

Las herramientas FPGA saben cuáles son los retrasos de enrutamiento del dispositivo y compensan esto automáticamente. Las únicas señales que las herramientas no conocen son las señales que entran al chip o la relación requerida de las señales que salen del chip a dispositivos externos. Para eso son exactamente las descripciones de las restricciones de tiempo.

    
respondido por el akohlsmith

Lea otras preguntas en las etiquetas