VHDL: Buffer ADC a USB usando Fifo

1

Estoy tratando de entender cuál es la forma correcta de realizar dicha aplicación, así que no solicite el código completo porque cada componente funciona bien por sí solo. Estoy luchando para que trabajen juntos. Todavía no conozco el enfoque correcto.

Tengo tres módulos vhdl adc, ft2232 usb y fifo.

  1. El módulo ADC está obteniendo muestras sobre spi. Su frecuencia de muestreo es de 500 KHz.
  2. El módulo USB es una implementación usb ft2232h donde está logrando una transferencia de aproximadamente 2 megabytes a la PC.
  3. El módulo Fifo funciona también donde puedo leer y escribir datos en él. Utilicé este código a continuación también probé el ip core de xilinx en ambos trabajos. código Fifo

Quiero búfer adc muestras directamente a la PC. Pero lo que me confunde es que fifo no puede servir simultáneamente para las operaciones de escritura de adc y de lectura de usb. Ya que son dos procesos separados, podrían intentar usar fifo al mismo tiempo. Debo definir un indicador de ocupado para esperar durante las operaciones de lectura o escritura.

Aprecio cualquier ayuda.

    
pregunta nandflash1

2 respuestas

2
  

Pero lo que me confunde es que fifo no puede servir para las operaciones de lectura de usb y de lectura de usb simultáneamente.

Claro que puede! Es por eso que tiene puertos de escritura y lectura separados. Operan de forma completamente independiente entre sí.

    
respondido por el Dave Tweed
0

Según nuestro uso de los núcleos IP de Xilinx, voy a suponer que está utilizando un FPGA Xilinx.

Tanto Xlinx ISE como Vivado tienen plantillas de idioma para FIFO que admiten la lectura de un proceso y la escritura de otro proceso.

A nivel de hardware, los FPGA de Xilinx tienen RAM de bloque de 18K / 36K bits que se pueden usar como FIFO. Las RAM de bloque tienen puertos de lectura y escritura separados a los que se puede acceder mediante diferentes procesos (e incluso diferentes dominios de reloj) al mismo tiempo. Los sintetizadores Xilinx suelen ser muy buenos para inferir el uso de RAM de bloque si escribe su FIFO de manera similar a las plantillas de las guías del usuario de Síntesis.

En las FPGA Xilinx de la serie 7, también puede usar primitivas de un LUT-6 para construir FIFO pequeños de hasta 64 entradas de profundidad. Cada LUT-6 se puede usar como una memoria RAM de doble puerto de 64 x 1 bit, por lo que usaría un número de elementos de LUT-6 iguales a los de sus elementos FIFO. De nuevo, el sintetizador usualmente infiere los elementos RAM64X1D basados en LUT-6 si codifica el FIFO de acuerdo con las plantillas de Xilinx. El uso similar de los elementos LUT-4 en FPGA más antiguos también debería ser posible.

La mayoría de los FIFO tienen una marca llena / vacía. No debería necesitar un indicador de ocupado separado ya que se admite la lectura / escritura concurrente.

    
respondido por el user4574

Lea otras preguntas en las etiquetas