¿Cómo introducir datos en una IP dura de PCIe?

2

Quiero implementar un módulo FPGA que pueda comunicarse usando PCIe. Estoy usando Stratix IV GX que tiene PCIe Hard IP. Cómo puedo usar este módulo Hard IP para comunicarme.

Para desarrollar mi módulo, debería entender los detalles de la interfaz de IP dura (principalmente entradas y salidas), que no encuentro en línea. ¿Puede alguien ayudarme con lo mismo?

    
pregunta tollin jose

1 respuesta

5

Hay dos formas principales de usar un bus PCI entre un FPGA y un procesador. Tenga en cuenta que digo PCI en la respuesta porque no hay nada especial en lo que digo sobre PCIe; incluye PCI.

El primero está utilizando los BAR BAR (Registro de dirección base). Estos son espacios de direcciones declarados por el dispositivo PCIe (por ejemplo, un dispositivo podría declarar que tiene un BAR0 de 4 KB) que el sistema operativo asigna a la memoria virtual. La lectura / escritura a esta dirección en los resultados del procesador en la solicitud de transferencia de bus en el dispositivo PCI, básicamente proporciona al FPGA un puerto de dirección con datos y dirección.

La segunda forma es usar el dispositivo como un bus maestro de DMA (acceso directo a la memoria). En este modo, el dispositivo puede iniciar la transferencia de memoria a / desde la memoria del sistema (la que usa el procesador). Esto es muy eficiente ya que el procesador no se bloquea por la transferencia, es decir, puede hacer otra cosa mientras el dispositivo lee / escribe en la memoria del procesador.

Tenga en cuenta que el dispositivo PCIe también puede activar interrupciones en el procesador, por ejemplo, para indicar que se requiere / realiza una transferencia DMA.

Un sistema típico de procesador-FPGA PCIe definirá un conjunto de registros en las PCI BAR y los utilizará para indicar al FPGA dónde están las direcciones del búfer DMA para que pueda transferir datos sin la necesidad de la intervención del procesador. Como puede adivinar, no desea que el dispositivo escriba en ninguna dirección de memoria del procesador ...

Para ponerlo en términos simples, los BAR son fáciles de usar y lentos, los DMA son rápidos y complicados de configurar. Tenga en cuenta que lo más probable es que necesite un controlador para manejar su dispositivo PCI en el procesador, y la lógica del programa para responder a la transferencia de BAR e iniciar DMA.

Le recomendaría que consulte los diseños de referencia de altera antes de profundizar en PCIe; y que obtenga un libro de referencia sobre el estándar PCIe. Es posible que también necesite aprender más sobre cómo escribir controladores para cualquier sistema que use su procesador. Los BAR son fáciles y ni siquiera requieren un controlador, pero si necesita PCIe, desea usar DMA.

    
respondido por el Jonathan Drolet

Lea otras preguntas en las etiquetas