¿Alguien me puede dar algunas ideas sobre la lógica de un convertidor serie-paralelo?

0

En serio, me refiero a la "lógica": no a las puertas AND y OR, sino a la intuición que hay detrás.

Esto será una inversión de tiempo para quienquiera que conteste, ¡así que entiendo a los que no quieren! Estoy utilizando esta mitad como una forma de poner en orden mis pensamientos, pero también para obtener información valiosa de otros en este sitio web.

Aquí está mi situación:

Tengo una CPU que está cableada a un FPGA Kintex-7. Desde la CPU, estoy usando "Xilinx System Generator" (un complemento de Simulink) para programar el FPGA. Desde el FPGA, tenemos 6 cables de fibra óptica RX y 6 cables de fibra óptica TX.

En nuestra configuración actual, estamos utilizando los 6 cables de TX para enviar señales de puerta a un convertidor de medio puente trifásico. Obviamente, usar 6 cables para controlar 6 señales de puerta no es una solución muy elegante.

Lo que me gustaría hacer es eliminar la necesidad de 5 de los cables. Mi plan es tomar toda la información de la señal de la puerta (que solo debería ser de 6 bits a la vez) y enviarla a un FPGA "Lattice" (creo que Lattice es uno de los principales actores en el mercado de FPGA y sus productos). son bastante baratos en Digikey).

Mi idea es la siguiente: en la Red, tener un contador y un incrementador. En el cable de fibra óptica único, el primer bit sería un pulso de reloj: este primer bit restablecería el contador y el incrementador en el FPGA Lattice. Los siguientes 12 bits serían las puertas 1-12. Al reiniciar el contador, creo que sería fácil saber qué señal de puerta ir a dónde: el primer ciclo de reloj después del reinicio disparará la primera puerta, el segundo disparará la segunda, y así sucesivamente.

Mientras escribía esto, me di cuenta de que esto no va a ser trivial: asegurarse de que el FPGA Kintex-7 y el FPGA Lattice estén bloqueados en fase y reloj no sea una tarea simple. Creo que esta es el área en la que más necesito ayuda. Una vez que pueda hacer que los relojes del FPGA se bloqueen, creo que esta será una tarea fácil.

¿Alguna opinión sobre cómo puedo lograr esto? Tener 6 cables de fibra óptica TX / RX haciendo el trabajo de 1 cable me hace temblar; Sé que puedo

    
pregunta Lerbi

3 respuestas

1
  

Una vez que pueda hacer que los relojes del FPGA se bloqueen entre sí

En lugar de hacer esto, considere usar la solución típica para transferir datos en serie de alta velocidad a lo largo de un solo carril: use una codificación de la cual se pueda recuperar el reloj. 8b / 10b es quizás la codificación más común para esto, utilizada en HDMI / DVI / DisplayPort / Firewire / SATA / SAS y así sucesivamente. 8b / 10b asegurará que su señal esté equilibrada en CC y tenga suficientes bordes para recuperar un reloj de manera confiable.

No estoy muy familiarizado con los FPGA de Lattice, pero la mayoría de los FPGA (con la excepción de los dispositivos de bajo costo muy han incorporado bloques SERDES. La IP del transceptor puede en gran medida la configuración de estos transceptores. Dado que están utilizando un Kintex-7, debe tener transceptores GTX a su disposición, que pueden funcionar bastante rápido (12.5 Gbps). Además, es probable que desee implementar algún protocolo rudimentario (para llevar información de tiempo más refinada) sobre la Codificación 8b / 10b, pero para su caso de uso probablemente sea bastante simple.

No proporcionó ningún detalle de su (s) transceptor (es) de fibra, pero supongo que está diseñado para funcionar con un poco de transceptor en serie de alta velocidad, y debería ser fácil de conectar a los transceptores en ambos extremos . ¿Cuál es el intervalo entre las señales de la puerta (es decir, a qué velocidad de reloj está operando el extremo lejano)? Si es lo suficientemente largo, puede enviar un símbolo completo para indicar cada cambio de estado de la puerta. Sería útil vincular un diagrama de tiempo de las unidades de puerta.

    
respondido por el uint128_t
1

Esencialmente, usted está solicitando un circuito para convertir el código paralelo de 6 bits en un enlace en serie y luego volver a serializarlo en 6 canales. La industria electrónica ha inventado este tipo de circuitos hace mucho tiempo. Esta línea de circuitos integrados se llama "SERDES". Ejemplo: Variascompañíasfabricancircuitossimilaresparatodotipodeaplicaciones,TI,ONsemi,Maxim,Intersil,etc.XilinxFPGA'ahaincorporadobloquesSerDesIOdealtavelocidad.Googlepara"serdes", encontrará muchas referencias.

    
respondido por el Ale..chenski
1

como uint128_t ha señalado indirectamente, este problema se ha resuelto muchas veces. 8b / 10b es bastante antiguo, hay otros más nuevos y más antiguos. Y numerosas formas de serializar y extraer los datos. Si se extraen datos y se puede tolerar un poco de latencia, se almacenan y se reparten con un encabezado como una cadena suficientemente larga de ceros y unos como patrón y luego los datos. Si necesita una revisión continua de los estándares de modulación de códigos de pulso IRIG 106 capítulo 4, ha existido por siempre, apenas vale la pena escribir un estándar, es una solución algo obvia. Solo realice una conversión directa paralela a la serie, pero coloque un marco alrededor de él con un patrón de sincronización que pueda encontrar en el otro extremo, como uart, pero con más de 8 o 9 bits por marco. Puedes ir incluso más simple y tomar la idea mil-std-1553. Use bifase-l (vea las definiciones de código en pcm de irig, una o dos de estas se usan en otras áreas usando nombres diferentes como manchester o manchester II) que le aseguran que no tendrá más de dos celdas de medio bit al mismo nivel ... para el patrón de sincronización viola a propósito tres semiceldas, tres bajas, luego un número de bits, repite, es fácil detectar el patrón de sincronización y vuelve a paralelizar los datos. biphase-l (manchester II y otros nombres) facilita la recuperación del reloj y el bloqueo en el flujo de datos, luego necesita un patrón de sincronización de algún tipo para saber dónde comenzar a cortar los bytes / palabras del flujo de bits. Busque las tecnologías que uint128_t señaló. Tal vez agregue un poco más de pcie, ethernet. Ethernet de velocidad más lenta usa 8b / 10b más rápido usa algo similar pero menos gastos generales.

    
respondido por el old_timer

Lea otras preguntas en las etiquetas