desarrollando un enlace serial simple en FPGA

3

Estoy intentando desarrollar un enlace de datos digitales basado en FPGA (espartano 3E) donde el transmisor serializa una entrada paralela de 8 bits a un solo canal. En el lado del receptor, quiero recuperar los datos mediante la serialización. No estoy agregando complejidad de recuperación de reloj en este punto. Puedo serializar los datos en el lado del transmisor donde la entrada de 8 bits se puede multiplexar usando un contador simple. Quiero entender cómo demultiplexar la señal en el lado Rx. ¿Cómo puedo controlar el Rx cuando se inicia la demultiplexación de datos, de modo que pueda obtener una salida paralela exacta de 8 bits tal como se envía en el lado de entrada Tx? Déjeme saber si necesita cualquier otra información.

    
pregunta Falcon98

2 respuestas

1

Para una comunicación en serie de baja velocidad, puede enviar datos, reloj y sincronización de cuadros. Los dos primeros son obvios. La señal de sincronización de trama se puede enviar de varias maneras, al comienzo de cada paquete de 8 bits o al final. En el lado de recepción, si la sincronización de cuadros se envía al final del paquete de 8 bits, se puede utilizar como una señal de habilitación de bloqueo en el convertidor serie a paralelo en el receptor

    
respondido por el Claudio Avi Chami
4

En los enlaces en serie, tiene un hardware en ambos extremos llamado un bloque SERDES (serializador-deserializador). La función del bloque SERDES es garantizar que los datos se multiplexen en la secuencia en el punto correcto, y los datos se demultiplexen desde la corriente en el punto correcto.

El lado de TX es bastante sencillo como has determinado. Hay dos opciones que vienen a la mente:

  • Un contador y un multiplexor. Cuente de 0 a n e introdúzcalo en un mux para seleccionar los datos. Un registro de tubería en la salida sería útil.
  • La otra forma más típica es un registro de desplazamiento simple con carga paralela, salida en serie.

Sugeriría esto último porque será más fácil para el diseño cumplir con la sincronización en frecuencias más altas, y también usar menos recursos, ya que las Spartan 3E pueden crear registros de desplazamiento en la RAM.

Para el lado de RX las cosas son más difíciles. Debe poder determinar qué bit es el primer bit de la secuencia. Para esto de nuevo hay tres formas típicas:

  • Usando un formato de paquete específico, como UART (RS-232). Habría un largo período del bit de "parada", y luego la resincronización ocurre cuando se detecta un bit de "inicio".

  • Usando una señal de sincronización. Por ejemplo, puede tener una señal adicional que normalmente se conoce como "Reloj de cuadro" que tiene un período que coincide con la velocidad de datos paralelos (es decir, velocidad de serie / n).

  • Al usar un proceso llamado "Entrenamiento de enlace" o "Alineación", al comienzo (después de que el diseño se reinicia), envía continuamente un valor de datos conocido a ambos lados del enlace conocido como palabra de entrenamiento por ejemplo, 4'b11110000)

Para el primer ejemplo, le dejaré que se refiera al funcionamiento de UART. Este proceso está bien para pequeñas ráfagas de datos, pero para flujos continuos largos es fácil desincronizarse.

En el segundo ejemplo, su receptor puede usar el reloj de cuadro directamente para determinar cuál es el primer bit. Por ejemplo, si su transmisor establece el reloj de cuadro alto solo para el primer bit de datos, entonces, cuando el receptor ve una señal alta, sabe que el bit actual es el primer bit.

En el tercer ejemplo, el transmisor enviará un flujo continuo de la palabra de entrenamiento. El receptor, cuando sale del reinicio, buscará esta palabra al realizar una operación conocida como "Deslizamiento de bits"; esencialmente, cambia la alineación de los datos en el registro de desplazamiento del receptor. El receptor continúa realizando operaciones de deslizamiento de bits hasta que los datos que recibe coinciden con la palabra de entrenamiento. A continuación, le indica al transmisor que se ha establecido un enlace, o que el transmisor está configurado para dejar de enviar palabras de entrenamiento después de un número específico de ciclos.

Los FPGA también suelen tener algún tipo de bloque SERDES incorporado en la periferia (cerca de los pines). Si el Spartan 3E tiene tales bloques, puede usarlos para formar la base de su enlace.

El bloque SERDES típicamente tendrá en la transmisión el hardware requerido para la serialización de un bus paralelo, y en la recepción de lo contrario (hardware de deserialización). Si el FPGA es lo suficientemente avanzado, probablemente encontrará que el bloque SERDES también tendrá una señal de control de deslizamiento de bits.

    
respondido por el Tom Carpenter

Lea otras preguntas en las etiquetas