Cómo almacenar datos en una tarjeta SD o almacenarlos en una computadora con un cable USB usando un FPGA

La manera más fácil de escribir datos directamente desde su diseño implementado en FPGA es implementar un controlador SPI (Serial Peripheral Interface) también en el FPGA. Esto supone que la tarjeta SD que tiene a mano también tiene una interfaz SPI. Luego puede leer también desde la tarjeta SD. Si la tarjeta SD que tiene no tiene una interfaz SPI (como la versión SPI 4.3 en adelante, el soporte SPI se hizo opcional para los proveedores de tarjetas SD), entonces será una tarea difícil que omitiré por el momento o puede consultar Interfaz Nand Flash con SPARTAN 3 FPGA para obtener más información. En lo que respecta a la velocidad, debe verificar si se puede lograr, ya que depende de la implementación del controlador SPI y de cómo se conectará a la interfaz SPI en la tarjeta SD. La otra forma de almacenar estos valores en su PC es conectar su diseño dentro del FPGA al puerto serie y luego transmitir esos valores para que los registre un hiperterminal. Nexsys4 tiene un puerto serie (UART).

Sin embargo, según su descripción simple actual, no está muy claro por qué desea almacenar los resultados o registrar el contenido en la tarjeta SD / PC. Si el contenido del registro en su diseño no cambiará durante la ejecución del diseño, cada vez que cargue su diseño en FPGA, el contenido del registro también se cargará si codifica los valores del registro en la descripción RTL. ¿Qué haría incluso si los resultados / contenidos de registro se escriben en la tarjeta SD? ¿Volverá a leer esos mismos valores cuando realice una nueva ejecución de su diseño en el FPGA? Si eso es cierto y siempre será así, entonces codificarlos de forma segura asegura que en el encendido del dispositivo y en cada configuración del dispositivo, esos valores estarán allí en los registros.

Si mis suposiciones sobre su caso de uso son incorrectas, debe proporcionar más detalles para obtener una respuesta más útil.

Me gustaría enumerar su comentario sobre la respuesta de Sharad Sinha primero, ya que ofrece una mejor idea de lo que está tratando de lograr:

Básicamente, tengo una entrada analógica que quiero estudiar en una computadora. Voy a pasar la entrada analógica a través de un ADC de 16 bits muestreado a 10 megamuestras por segundo. No puedo usar el ADC en chip proporcionado por Altrix -7 ya que tiene capacidades limitadas. Mi objetivo es almacenar esta entrada continua de 16 bits del ADC en una computadora. Por lo tanto, estoy usando la placa Digilent Nexys 4 para cumplir mi tarea “.

Hay varios aspectos de esta pregunta ahora, que incluyen:

  1. Escribir datos en la tarjeta SD
  2. Transferencia de datos desde FPGA a PC usando un cable USB
  3. Cómo almacenar / manejar velocidades de datos rápidas de 20 MBps (160 Mbps)
  4. Una combinación de 1,2,3

Miremos cada uno de ellos uno por uno e intentemos llegar a cuál sería la mejor opción para continuar.

Interfaz con tarjeta SD

El manual de referencia de Nexys4 indica la presencia de una ranura micro SD en la placa. La forma más fácil de interactuar con esto es usar el modo SPI para leer y escribir datos, como mencionó Sharad Sinha.

Suponiendo que pueda usar un procesador integrado como microblaze, recomendaría el controlador FatFs para administrar el sistema de archivos. Esto simplificaría no solo el diseño HW (los maestros SPI son IP muy simples y deberían estar disponibles en la suite de Vivado) sino también los controladores SW ya que implementar un sistema de archivos es un proyecto en sí mismo. Portar FatFs no es demasiado difícil y está claramente documentado. He usado esta combinación en uno de mis proyectos de pasatiempo con el fin de capturar datos de audio. Puede echar un vistazo a este archivo para ver cómo se vería la transferencia.

Ahora, aquí está el truco. El modo SPI es una interfaz muy, muy lenta. FatFs puede alcanzar velocidades en el rango de Mbps, pero nunca pude superar los 128 Kbps en mi configuración. En pocas palabras, el modo SPI nunca podrá manejar las velocidades de 160Mbps de datos que necesita capturar. Esto trae la siguiente sección.

Manejo de tasas de datos rápidas

El objetivo aquí es asegurar que todos los datos provenientes de una fuente de alta velocidad sean muestreados y almacenados sin perder ninguna muestra en el medio. Mi sugerencia en su caso sería utilizar un modelo ‘almacenar y reenviar’ para los datos de ADC. La placa Nexys4 tiene una SRAM externa de 16 MB que parece ser perfecta (o los bloques de memoria FPGA internos también serán suficientes, pero son limitados y pueden interferir con STA y PnR). La muestra ADC será recibida continuamente a 160Mbps por el FPGA y usted puede escribir directamente estas muestras en la SRAM externa en un modo FIFO. Una vez que la memoria esté llena, puede comenzar a transferir estos datos a su conveniencia a cualquier lugar. La limitación aquí es que no puede almacenar más de 16 MB de datos a la vez, lo que significa que su ventana de muestreo es de 800 ms como máximo.

Transferencia de datos desde FPGA a PC a través de USB

El manual de Nexys4 indica la presencia de un host USB que es un controlador PIC. Sin embargo, esto solo se puede usar para la interfaz del mouse / teclado PS2, lo que no será útil en este caso. Incluso si hay disponible un puerto USB completo, será bastante complejo cuando intente integrar un controlador USB IP y su FW. Como mencionó Sharad Sinha, el método más simple sería usar el USB-UART para la comunicación con la PC. Las IP RS232 son muy simples de implementar y los controladores FTDI (el chip que convierte entre RS232 y USB en el Nexys4) hacen que la interfaz sea simple. Nuevamente, esta es una interfaz muy lenta que generalmente funciona a 115200bps y no se puede conectar directamente a la secuencia ADC de 160Mbps. De ahí la necesidad de un enfoque de ‘almacenar y reenviar’.

Espero que esto haya sido útil para seguir adelante. Avíseme si enfrenta dificultades o necesita más aclaraciones; haré todo lo posible para ayudar.

More Interesting

¿Cómo instalo MS Office después de restablecer mi computadora portátil?

¿Es esta computadora construir una estación de trabajo decente para hacer el aprendizaje automático y el trabajo de programación?

¿Para qué se utilizan las máquinas virtuales?

¿Son 4GB suficientes para ejecutar Sony Vegas si eso es todo para lo que estoy usando la computadora?

¿Cuál es la diferencia entre una pantalla de 1366 × 768 y una de 1920 × 1080 en una computadora portátil de 15.6 '?

USB vs MicroSD: ¿cuál es más rápido y más confiable?

¿Cuál es la necesidad de convertir datos en forma binaria en computadoras?

¿Realmente necesito desfragmentar mi disco duro antes de instalar Ubuntu (EDITAR: mantener Windows 10)?

¿Qué CPU es mejor, cuarta generación i5 o séptima generación i3 para trabajo gráfico y edición de video de 360 ​​grados?

¿Cuáles son los pros y los contras de los SSD (unidades de estado sólido)?

¿Cuál es la anatomía de la configuración del controlador de la tarjeta gráfica?

¿Es lógico optar por una computadora portátil para juegos por $ 1000 y usarla por más de 3 años o comprar una computadora portátil de $ 500 a $ 600 y actualizar a menudo considerando la reventa y la computadora portátil como una prueba futura?

¿Cuál es la mejor combinación de teléfono inteligente / computadora portátil para el trabajador móvil?

Cómo eliminar de forma segura usb usando el teclado

¿Cómo son las computadoras portátiles de Apple superiores a otras?