Puerto dual, interfaz serial, almacenado en búfer, registro de desplazamiento

Tengo un problema "interesante".

El diseño propuesto, para un sistema en el que estoy trabajando, necesita usar 16 ADC seriales de 16 bits y necesito interconectar los resultados de los 16 ADC con un flujo serial síncrono que se ejecuta a 40 Mbits por segundo. Habrá un tamaño de trama de 289 bits que comprende: -

  • Un encabezado de 17 bits seguido de
  • 16x 17 bits de valores ADC

Se asignan 17 bits por ADC aunque los ADC sean de 16 bits. Esto significa una velocidad de cuadro de 7.225 microsegundos. Bastante fácil usando un EPLD de los proveedores normales.

Por cierto, el bit 17 invierte el LSB de cada ADC para mantener el codificador de datos en funcionamiento; reduce los períodos "muertos" en el flujo de datos en aproximadamente un 50%. También tenga en cuenta que los ADC 16x se "convierten" simultáneamente (una parte importante de la especificación).

El problema comienza cuando observa los ADC potenciales: la mayoría tarda aproximadamente uno o dos microsegundos (por ejemplo) en "convertir", dejando aproximadamente 5 microsegundos para transmitir los datos desde ellos y esta es la raíz del problema. En esos 5 microsegundos, necesitaríamos extraer 16x 16 bits de datos, agregar el 17.º bit adicional y esto significa que tendríamos que transmitir (para evitar la estupidez de la complejidad del EPLD), a una velocidad de datos (para esos 5 microsegundos) de 54,4 Mbits por segundo. ¡Tiene que ser 40 Mbits por segundo desafortunadamente (malditos burócratas)!

Entonces, lo que estoy buscando son ideas y, de ahí, el título de la pregunta: si extraemos los datos de los ADC 16x y los transmitimos en un registro de "retención" en serie, cuando esté completo, podemos transmitir con más tranquilidad. velocidad de 40 Mbits por segundo. Esto, como lo veo, requiere un registro de desplazamiento en serie de 272 bits de largo (16 x 17) que, una vez lleno, se transfiere instantáneamente (modo paralelo) a un registro de desplazamiento idéntico para generar los datos a una velocidad más constante. Un registro de desplazamiento se llena a una velocidad mientras que el otro transmite los datos previamente almacenados.

Entonces, mi pregunta principal es: ¿existe tal dispositivo y, si no, cuáles son las recomendaciones de las personas? Tal vez use un EPLD a medida para hacer esto. Por supuesto, necesitaría al menos 544 flip-flops y esto es más grande que la mayoría de los EPLD. He considerado (durante unos diez minutos) usar un FPGA, pero el consumo de energía podría ser un problema grave en este diseño. La mayoría de estos diseños que hago funcionan a través de "un espacio" porque el módulo se fija a las máquinas rotativas.

Esta no es mi área específica de experiencia (realmente lo analógico es mi área), así que si me perdí una solución obvia, sea amable. Hay un par de ADC que pueden convertirse en aproximadamente 400 ns, pero estos son dispositivos raros y costosos y físicamente un poco más grandes que un MSSOP de 8 pines. Todos los ADC de 16 bits que se ajustan a la factura en tamaño y costo (es decir, menos de $ 20 cada uno y pequeños dispositivos de 8 pines) tardan más de un microsegundo en convertirse.

Hay muchos FPGA de baja potencia. Actel (ahora Microsemi ), en particular, tiene algunos buenos.
@davetweed gracias amigo. El lunes le echo un vistazo. ¿Son buenos para el tipo de velocidad que estoy viendo?
¿Ha considerado Mux a Sigma Delta ADC con FIFO?
Andy, el último párrafo me intriga. ¿Está diciendo que tiene la intención de usar ADC que vienen en paquetes de 8 bits? Si es así, ¿cómo obtienes los datos de ellos... SPI o I2C? La primera parte de su pregunta me llevó a pensar que tenía salidas paralelas de 16 bits , un asunto completamente diferente.
@JoeHass Paquetes de 8 o 10 pines con bus SPI es lo que usamos normalmente; no hay suficiente espacio para tener paquetes paralelos de bytes. El LTC1403A (14 bits) hace exactamente lo que queremos, pero solo tiene 14 bits. Solo necesita unos 40 ns para adquirirse. El límite que tenemos (para el registro continuo de datos es de aproximadamente 400 ns), pero tratar de encontrar uno está resultando difícil, de ahí la pregunta.
@user34084 Los ADC Sigma delta son notoriamente hambrientos de tiempo cuando cambian la entrada a través de un MUX, pero si tiene una idea sobre una posible pieza o circuito, ofrézcala. Sí, he mirado los SD ADC.

Respuestas (2)

Hay muchos FPGA de baja potencia. Actel (ahora Microsemi ), en particular, tiene algunos buenos.

Una vez usé uno de sus productos (lo siento, olvidé exactamente cuál) en un proyecto de auriculares a batería que necesitaba canalizar varios canales de audio digital entre varios ADC y DAC y un chip DSP. El cliente estaba muy contento con la forma en que funcionó.

Saludos Dave, hemos decidido seguir este camino usando el IGLOO FPGA.

Esta parece ser una aplicación ideal para un FPGA. Incluso un FPGA relativamente pequeño podría admitir 16 interfaces SPI distintas para los ADC, y crear un registro de desplazamiento de 289 bits es bastante fácil. La elección de un FPGA en particular dependerá de otras restricciones de diseño, como los voltajes disponibles, los límites de potencia, el tamaño físico y el costo. He pirateado interfaces SPI para un ADC y un DAC usando Verilog. 40MHz tampoco es una frecuencia particularmente alta para los FPGA modernos.

Gracias Joe, está empezando a verse de esta manera. Los voltajes disponibles son 5V pero se pueden reducir a 3V3 y un voltaje central no hay problema. Ya obtuve un EPLD para hacer el encuadre para poder migrarlo al FPGA. Sin embargo, tengo que cuidar el poder. Creo que 150 mA como máximo es todo lo que tengo en 3V3. Habrá hasta diez de estos módulos y mi límite de potencia es probablemente de aproximadamente 2 A a 5 V para los diez.