databus de dominio de reloj cruzado

3

Hace un tiempo hice una pregunta sobre el cruce de dominios de reloj Diseñe la práctica cruzando dominios de reloj y señales asíncronas .

Una de las "reglas" es no sincronizar nunca la señal de bits múltiples bit a bit, debido a errores de temporización entre bits individuales.

Ahora tengo un diseño, donde necesito cruzar una señal multibit de un dominio de 27MHz a un dominio de reloj de 54MHz.

Ya no me quedan más FIFO en mi fpga, ¿hay alguna forma de hacerlo sin usar un fifo asincrónico?

¿Es posible sincronizar la señal multibit y establecer alguna restricción de tiempo, de modo que al menos recibo un error si no se mantiene el tiempo?

    
pregunta JakobJ

2 respuestas

6

Si el rendimiento de las transferencias de datos es bajo, puede usar un simple intercambio de manos para realizar el cruce del dominio del reloj:

Su lado de lanzamiento coloca los datos en un registro e invierte una sola marca de bit. La bandera se sincroniza en su dominio de latch clock y se detecta una inversión que indica que hay nuevos datos para volver a registrarse en el dominio de latch clock.

El dominio del reloj de enganche invierte otro bit de reconocimiento que luego se sincroniza nuevamente en el dominio del reloj de lanzamiento, informando al lado de lanzamiento que puede enviar otra palabra de datos.

Aún tiene que tomar las precauciones necesarias en la cadena del sincronizador de un solo bit (al menos 2 registros colocados juntos). También puede encontrar que se requiere un número mayor, ya que la ruta falsa permite al instalador colocar físicamente los dos registros de múltiples bits muy separados. Es posible que deba usar una restricción de demora para limitar la ubicación ( set_max_delay en Altera o define_path_delay en Xilinx).

Obviamente, la velocidad a la que puede transferir palabras es mucho menor que utilizar un FIFO de doble reloj. Dice que ya no le quedan 'FIFO', pero recuerde que tanto Altera como Xilinx son compatibles con pequeños FIFO compuestos por bloques lógicos especiales (MLAB en lenguaje Altera o SLICEM en lenguaje Xilinx).

    
respondido por el Chiggs
0

si los dos relojes se generan desde el mismo DCM sin cambio de fase, podría funcionar si usa el reloj más lento como una señal clk_en, solo porque fast_clock = 2 * slow_clock.

    
respondido por el user36399

Lea otras preguntas en las etiquetas