Interfaz de memoria de alta velocidad entre 2 FPGA (Virtex 6)

1

Tengo una placa con 2 FPGA Virtex 6, que están conectadas entre sí a través de 64 líneas IO paralelas que pueden funcionar hasta 400 MHz. Un FPGA, llamémoslo B, también tiene 2 GB de memoria DDR3 conectados. También necesito acceso de alta velocidad a esta memoria en FPGA A (que no tiene ningún DDR3 conectado). Finalmente, el plan es almacenar en caché las cosas en BRAM en FPGA B y transferirlas a FPGA A.

Entonces, estoy tratando de diseñar una interfaz de alta velocidad entre los dos FPGA para hacer solo esto, pero no sé por dónde empezar. Estoy pensando en los FIFO para amortiguar la dirección y la solicitud de datos.

¿Sabe de alguna interfaz / protocolo que se ajuste a mi aplicación? Si me puede dirigir a cualquier documento, también sería genial.

    
pregunta dla59

5 respuestas

2
  1. Implementar un controlador DDR en FPGA B.
  2. Conecte el controlador DDR a un controlador de interfaz de memoria compartida.
  3. Conecte el bus de interfaz de memoria compartida A a las partes internas de FPGA B.
  4. Conecte el bus de interfaz de memoria compartida B a los pines de E / S FPGA B.

Es posible que deba hacer algunos compromisos, por supuesto: 32 bits para datos, 31 bits para dirección, 1 línea de control probablemente no funcione; Realmente necesitas más como 70 I / O. Si puedes vivir con datos de 16 bits, entonces días felices.

    
respondido por el markt
2

Como es Xilinx, puede usar Aurora para interactuar entre los FPGA - Tendría que implementar su propio protocolo de acceso a la memoria por encima de él, pero le permite obtener fácilmente un ancho de banda muy alto entre chips utilizando los pines SerDes (GTP) incorporados. Se encargará de todas las conexiones de canal y enlace de canales y le ahorrará el dolor de intentar enrutar (otro) bus paralelo de alta velocidad entre los FPGA.

    
respondido por el Martin Thompson
2

Capa física

¿Los 64 GPIO son todo lo que tienes o tienes alguna otra conexión entre los FPGA? Según lo indicado por Martin Thompson, para ancho de banda sería mejor usar conexiones en serie de alta velocidad si están disponibles.

Suponiendo que su publicación original contenga todos los datos relevantes y que solo tenga 64 GPIO, entonces deberá pensar cómo va a alcanzar la frecuencia objetivo de 400MHz establecida. A pesar de que ese podría ser el valor de la hoja de datos, hay muchas cosas que pueden impedirle alcanzar esta frecuencia. Consulte esta respuesta relacionada: of-gpio-pins-of-modern-cheap-fpga / 95767 # 95767 "> Frecuencia de conmutación máxima de pines GPIO de FPGA barato y moderno

También debe decidir si desea perder ciclos potencialmente girando el bus (es decir, teniendo un bus de datos bidireccional) o desperdiciando los pines / ancho de banda separando el bus en cada dirección. Claramente, será más fácil de implementar si los pines son entradas o salidas dedicadas, por lo que si puede satisfacer sus requisitos de ancho de banda de esta manera, será mucho más rápido de implementar.

Capa de protocolo

Una opción sería emular un dispositivo SRAM o QDR, sin embargo, deberías agregar algo para compensar la latencia variable. Espero que la mejor opción sea una interfaz de memoria simplificada: ya sea AXI-4 lite, Avalon o Wishbone, elija su opción. Luego puede usar componentes estándar para almacenar solicitudes y respuestas en el búfer.

    
respondido por el Chiggs
1

Si no puede conectar el FPGA A a su propio banco de memoria, entonces me atrevería a decir que las líneas GPIO de 400 MHz entre las dos son su mejor apuesta. Usándolos en la configuración básica de SPI o algo así.

Si la placa se enruta correctamente, podría intentar hacer algún tipo de comunicación PCIe entre los dos, pero eso es muy circunstancial.

Podrías aventurarte en intentar hacer USB de alta velocidad entre los dos, pero eso requeriría implementar una pila OTG en ambos.

    
respondido por el Funkyguy
0

También puedes intentar usar la comunicación de enlace entre los dos (es posible que tengas que corregir manualmente el código para esto). Implementé un enlace de comunicación de 4 bits y lo ejecuté a una velocidad de 1 Gbps.

    
respondido por el samjay

Lea otras preguntas en las etiquetas