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.
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?
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
usuario253751
Carretero
mitu raj
mitu raj
ben
Carretero
ben
Carretero
tim
wclk
debe ser menor queFMAX
la del diseño para garantizar el cierre del tiempo, es decir, para evitar una lógica combinacional inacabada que generewptr
una superposición de los tiempos de configuración y espera de los flip flops del búfer de sincronización.