¿Por qué usamos una señal codificada en gris por un flip-flop de 2 etapas en FIFO asíncrono para evitar problemas de condición de carrera? [duplicar]

ingrese la descripción de la imagen aquí

En el diseño FIFO, para comparar rptr y wptr, estamos alimentando una señal a otro dominio de reloj.

El rptr que proviene del dominio de reloj lento a uno más rápido se puede sincronizar con la lógica Flip-flop de sincronización explicada al principio.

Sin embargo, el wptr que proviene del dominio de reloj rápido al dominio de reloj más lento no se puede sincronizar.

Por ejemplo, si Write clock es 10 veces más rápido que Read Clock, sync_w2r no muestra el wptr que se basa en wclk.

ingrese la descripción de la imagen aquíComo puede ver la forma de onda anterior, din[10:0] en el reloj de escritura (rápido) es muestreado por el reloj de lectura clk (lento). y el din es un puntero de escritura codificado por Gray. y dout[10:0] es una señal sincronizada por reloj de lectura (lento)

En realidad, la señal de puntero codificada en gris (dout [10: 0]) parece no tener una muestra continua por el reloj de lectura. puedes ver el dout[10:0]. Provoca un problema de condición de carrera. Incluso la señal codificada en Gray se sincroniza mediante flip-flops de 2 etapas. pero la señal codificada en gris no funciona para evitar el problema de la condición de carrera en cada reloj de muestra de borde. 1 (muestreado) -3-2-6 (muestreado) ... continúe ... en realidad, las señales de 2 bits se cambiaron de 2'b001 a 2'b110.

¿Cómo podemos explicar que la señal codificada en Gray se puede usar para evitar un problema de condición de carrera?

¿Cómo se resuelve el problema?

¿Qué quieres decir con "no muestra"?
@user253751 sync_w2r muestreado por rclk. es lento para muestrear un wptr
Hay un artículo completo sobre esto de Cummings. + Hay muchos recursos en línea. Clausura.
No hay 'falta'. Incluso si el reloj de escritura es 10 veces más rápido, el reloj de lectura lo muestreará en algún momento en el futuro. Supongamos que, en el momento en que llegó el reloj de lectura, el puntero de escritura acaba de contar hasta 3 desde 0. El reloj de lectura nunca muestreará un valor 'incorrecto' debido a la codificación gris. Será el valor anterior del puntero de escritura, 2, o el valor actual del puntero de escritura, 3.
La metaestabilidad es un problema diferente al cruce del dominio del reloj.
@Ben Metastability es causado por una violación de tiempo de espera de configuración. y también sucede en el dominio CDC. Por lo general, para evitar el problema de propagación de x en el dominio CDC, eventualmente usamos flip-flop de 2 etapas. estos vinieron de la misma cuestión e idea.
La codificación gris se usa para evitar condiciones de carrera de CDC, no para evitar la metaestabilidad. Simplemente mi punto.
@Ben Buen punto. Sí. la codificación gris se utiliza para prevenir la condición de carrera. pero tal vez vio la forma de onda, la señal codificada en gris muestreada en el borde del reloj no tiene un código codificado en gris continuo en el flip-flop de 2 etapas. significa que la señal de condición de carrera puede pasar a un flip-flop de 2 etapas. En otras palabras, el codificador gris no lo necesita. esta mi pregunta. y también faltan algunos números durante un proceso
@Carter, Dave Tweed ya respondió a su pregunta sobre la falta de números de secuencia, es decir, un reloj lento siempre perderá algunos eventos de reloj de un reloj más rápido, sin importar si está muestreando un contador Gray o un contador binario (y el búfer de sincronización garantizará un válido muestra ya sea retrasada o actual). En cuanto a las carreras, la frecuencia de wclkdebe ser menor que FMAXla del diseño para garantizar el cierre del tiempo, es decir, para evitar una lógica combinacional inacabada que genere wptruna superposición de los tiempos de configuración y espera de los flip flops del búfer de sincronización.

Respuestas (1)

Obviamente, el lado lento del FIFO no verá todos los estados del contador del lado rápido cuando esté contando a toda velocidad. Afortunadamente, con un diseño adecuado, como usar código Gray para transferir los valores entre dominios de reloj, esto no importa en absoluto. Cuando se produce la muestra lenta, obtendrá algún valor válido del contador rápido o, en el peor de los casos, uno de dos valores adyacentes si un bit se vuelve metaestable.

Y, por supuesto, una vez que el lado rápido hace una pausa en su conteo, el lado lento obtendrá el valor final correcto del contador después del retraso del sincronizador.

Escribí esto con mucho más detalle aquí: dominio de reloj de código gris que cruza FIFO rápido a lento

Señor, he actualizado mi pregunta.
Acabas de repetir declaraciones que hiciste antes. Como no agregó información nueva, no tengo nada que agregar a mi respuesta.