La Red de Conocimientos Pedagógicos - Conocimientos primarios - Cómo utilizar la memoria DDR2 en la FPGA de Altera

Cómo utilizar la memoria DDR2 en la FPGA de Altera

Recientemente, se ha intentado utilizar memoria DDR2 en la FPGA de Altera. Primero, descargué algunos ejemplos de Internet. Desafortunadamente, todos estos ejemplos se basan en sopcbuilder. La memoria está conectada directamente a la CPU de nios y no requiere nuestra intervención manual. codificar y almacenar datos temporales, etc., no pueden reflejar las ventajas de DDR. Si la parte lógica del usuario (equivalente al dispositivo principal) desea ocupar un gran ancho de banda y compartir DDR con la CPU nios, entonces se debe utilizar el modo de transmisión activa o streaming de Avalon. Como no sé mucho sobre estos dos modos, primero me preparo para usar lógica pura para operar DDR en Quartus.

Después de usar el asistente para generar IP (HPC II o Uniphy core) en Quartus, tomando Uniphy como ejemplo, en la versión 10.0sp1, use el modo medio y la longitud máxima de ráfaga de Avalon se establece en 64. De acuerdo con el diagrama de tiempo en la hoja de datos de IP, escribí un código de control. Después de repetirlo varias veces, el código puede ejecutarse normalmente y los datos se leen y escriben correctamente. Pero hay algunas preguntas:

1. Durante un proceso de lectura/escritura en ráfaga, no se permite la operación continua, es decir, no se puede generar/escribir un dato en un reloj. Durante el proceso de ráfaga, la señal de retroalimentación local_ready del controlador ocasionalmente se establecerá en nivel bajo durante nuestro proceso de ráfaga, por lo que solo podemos conservar la dirección y esperar. Después de iniciar la ráfaga, el controlador generará datos en un intervalo determinado. Este tiempo es variable. Sin embargo, una vez que comienza a generar datos, no genera datos continuamente como otros núcleos de control DDR, sino que se interrumpirá aleatoriamente. Esta incertidumbre causa muchos inconvenientes cuando la usamos. Dado que los números no se pueden contar continuamente, ¿aún así se le puede llamar una explosión repentina? ¿Qué significa realmente lo repentino?

2. La dirección del banco es fija. Durante una ráfaga, los datos se pueden leer 64 veces seguidas, pero no se pueden escribir.

3. Según su manual, durante el proceso de lectura en ráfaga, siempre que la señal local_ready sea válida en este momento, incluso si los datos en ráfaga aún no han llegado, la operación de escritura en ráfaga se puede realizar directamente. en este momento. ¿Es útil un proceso de control tan complicado en productos reales?

Dado que nunca he estado expuesto a ejemplos del uso real de DDR para la transmisión de datos a gran escala, el uso de DDR también se realiza a puerta cerrada y puede que esté tomando un camino equivocado, espero que todos puedan hacerlo. corrígeme. No sé cómo se usa la memoria DDR de manera eficiente en FPGA. Espero que los internautas con experiencia en esta área puedan darme algún consejo.

Además, consulté la documentación técnica del bus Avalon. La conclusión de los datos es que cuando el bus Avalon está transmitiendo activamente, no puede garantizar que los datos se envíen una vez por reloj. garantiza que no se bloqueará después de que se inicie una ráfaga. Se interrumpen otros dispositivos maestros. Supongamos que un dispositivo esclavo, como DDR, solo admite transmisión en ráfaga. Cuando está colgado en el bus, ¿solo se puede acceder a otros dispositivos maestros en modo ráfaga? ¿O se maximizará el ancho de banda de acceso obtenido accediendo en modo ráfaga? Si el dispositivo esclavo solo admite de forma nativa 16 longitudes de ráfaga y el dispositivo maestro desea realizar ráfagas de 24 longitudes a la vez, ¿la estructura del conmutador Avalon cambiará automáticamente para iniciar dos transferencias al dispositivo esclavo? No entiendo muy bien algunos detalles de arbitraje de la estructura de Avalon y personalizar el dispositivo principal no puede mejorar su rendimiento.