Transferencia de datos de FPGA a PC (nuevo en FPGA)

Principiante de FPGA aquí.

Tengo una placa FPGA Basys2 (código en verilog) y deseo que se comunique con mi PC. Actualmente recibe datos de un dispositivo esclavo y los almacena en un registro de 64 bits. Sin embargo, quiero enviar estos datos a mi computadora para procesarlos y procesarlos en matlab.

He hecho algunas investigaciones. Parece que puedo usar la API EPP de digilent o simplemente usar la comunicación UART. [: parece que esto no está disponible ahora, ya que no tengo acceso a un traductor UART]. Sin embargo, no puedo encontrar suficientes ejemplos explicativos sobre ninguno de los métodos. Los ejemplos existentes parecen tener un montón de código "que simplemente funciona". Pero la falta de explicación me hace incapaz de adaptarlo para mi

Por ejemplo, hay una función DeppGetReg(HIF hif, BYTE bAddr, BYTE* pbData, BOOL fOverlap) en la API, pero no sé qué ingresar (específicamente la dirección) para proporcionarle los valores de lectura de FPGA. Solo el documento i podría encontrar fue en este enlace . No tengo ni idea de UART también.

Estos son los puertos de E/S disponibles de FPGA. El único puerto USB se usa para programar el FPGA, no estoy seguro si también puedo tener comunicación a través de ese puerto.ingrese la descripción de la imagen aquí

Le agradecería si puede darme alguna idea sobre dónde comenzar a considerar mi placa FPGA. Gracias de antemano.

El puerto VGA es una salida de video, nada que ver con las comunicaciones en serie RS232 UART. En realidad, esto se explica en la sección BASYS2 "Puerto VGA" del manual de referencia digilentinc.com/Data/Products/BASYS2/Basys2_rm.pdf Si desea utilizar un UART, deberá agregar un traductor de nivel RS232 como como Digilentinc.com PMOD-RS232 utilizando uno de los conectores PMOD.
@MarkU pensé que podría usarse directamente para UART, mi error. ¿Puedo usar el puerto USB único para programar el FPGA, alimentarlo y establecer comunicación UART?
No, el controlador USB en la placa BASYS2 solo admite programación JTAG y lectura/escritura paralela EPP de 8 bits. No UART en serie. Pero RS232 UART es el periférico más fácil de agregar, por lo que es un diagnóstico tan útil. Cualquier traductor de nivel RS232 servirá, MAX232 por ejemplo. O bien, conecte directamente la FPGA a un FTDIchip.com FT232.
Gracias por la información. Parece que primero podría probar el EPP ya que no tengo acceso a ningún hardware adicional en este momento. La lectura/escritura de 8 bits suena bien. Editaré la pregunta.

Respuestas (1)

El puerto USB se puede utilizar para comunicarse con un diseño que se ejecuta en la FPGA, así como para programarlo. El software Digilent Adept se puede utilizar para interactuar con un diseño que implementa este protocolo; también es posible utilizar las bibliotecas de Digilent para escribir su propio software que utiliza este protocolo. (También he escrito un módulo de Perl, Device::Digilentsi lo prefiere a C).

La información sobre el protocolo está disponible en:

https://www.digilentinc.com/Data/Products/ADEPT/DpimRef%20programmers%20manual.pdf

Sin embargo, en resumen: hay un bus paralelo entre el chip de interfaz USB y el FPGA que consta de:

  • Un bus bidireccional de 8 bits, utilizado tanto para direcciones como para datos.
  • Luces estroboscópicas de dirección y datos, y un indicador de escritura, todo señalado desde el host
  • Una señal de "espera" utilizada por la FPGA para indicar cuándo ha atendido una lectura/escritura

El protocolo utilizado trata la FPGA como si tuviera "registros" de 256 bytes, cada uno de los cuales puede ser leído o escrito por el host en cualquier momento. El orden de los eventos para una lectura es:

  • El host afirma la luz estroboscópica de la dirección con el indicador de escritura activado y conduce el bus de datos con el índice del registro que escribirá.
  • El host afirma la luz estroboscópica de datos con el indicador de escritura desactivado y la FPGA impulsa el bus de datos con el valor del registro.

Una escritura funciona de manera similar, excepto que la segunda transferencia tiene el indicador de escritura activado y el host maneja el bus de datos con el valor que se va a escribir.