Data Sync
Written by: Holguer A Becerra
La sincronización de datos es un concepto muy importante a la hora de mantener confiabilidad cuando:
Queremos activar un sistema que funciona a una Frecuencia A con otro sistema que funciona con una Frecuencia B(Cambio de dominios de reloj).
Cuando queremos enviar datos a la entrada de un sistema que envía/recibe datos a una Frecuencia A y tenemos una variación real a la entrada a una Frecuencia B(Sincronización de Datos).
La metaestabilidad es el principal problema que debemos solucionar, especialmente cuando vamos a trabajar con FSM y no queremos tener perdida de flancos, ademas cuando se trabaja con sistemas de alta velocidad, sistemas de adquisición/transmisión de datos en donde no se asegura la llegada de cada bit de un bus de datos al destino en un mismo momento.
Desarrollo:
Descargue los archivos "async_trap_and_reset.v" y "doublesync.v", simulelos y diga para que sirve cada uno de ellos.
Si los simulo bien y verifico se dio cuenta que el "async_trap_and_reset" es un sincronizador atrapa flancos y es bueno usarlo cuando queremos hacer cambios entre dominios de reloj.
Ejemplo: Suponga que usted esta trabajando con una maquina de estados que funciona a 50MHz y esta FSM se activa con una señal de "start", ahora suponga que esta entrada de "start" de la FSM esta conectada directo a un divisor de frecuencia que funciona con un reloj de entrada de 25MHz y genera una salida conectada al "start" de 100Hz(Descargue la plantilla para ver el ejemplo e implemente).
Responda:
¿Cuantas veces se activaría la FSM si se conecta directamente la salida del divisor de frecuencia con la entrada "start" de la FSM?
¿Que pasa con los LEDs a la salida?
¿Usted puede asegurar que solo se activa una vez?
¿Se puede asegurar que el sistema se activa en un flanco ascendente de esta FSM?
Ahora suponga que la entrada "start" de la FSM no se conecta directamente al divisor de frecuencia, si no que antes se utiliza el modulo "async_trap_and_reset" para atrapar el flanco ascendente de la salida del divisor de frecuencia con el reloj con el cual trabaja la FSM, y esta señal sincronizada se envía a la entrada "start" de la FSM (modifique la plantilla para agregar el "async_trap_and_reset").
Responda:
¿Cuantas veces se activaría la FSM si se conecta directamente la salida del divisor de frecuencia con la entrada "start" de la FSM?
¿Que pasa con los LEDs a la salida?
¿Usted puede asegurar que solo se activa una vez?.
¿Se puede asegurar que el sistema se activa en un flanco ascendente de esta FSM?.
Si analizo el punto 2 es ahora consciente que cuando quiera activar un sistema con otro que manejen diferentes dominios de reloj, en este caso una FSM y un divisor de frecuencia, usted debe utilizar un atrapador de flancos que sincronice la señal de un sistema a otro, permitiendo que el sistema trabaje de forma adecuada.
Ahora descargue el documento que habla de "Clock Skew" y en base a este documento haga la descripción de hardware de los sincronizadores de Buses (Datos), también simule.
Ejemplo: De alta a baja frecuencia.
De baja frecuencia a alta.
De similar a similar frecuencia.
¿Porque un negador es considerado como un sincronizador?.
¿Por qué se deben utilizar sincronizadores de datos y cuando?.
Link de interes: www.fpga4fun.com/CrossClockDomain.html