Controlador DRAM de Altera con UniPHY

4

Estoy tratando de trasladar un diseño de Xilinx a Altera, y tengo problemas con el controlador DRAM IP (para un Cyclone-V y un LPDDR2 mem).

He logrado generar la IP, pero no entiendo qué reloj debería usarse para la interfaz Avalon-MM.

He visto un diseño de muestra que usa Qsys, el avl_0 bus está marcado con associated clock = mp_cmd_clk0 , no el reloj usado por la CPU NIOSII, que es pll_ref_clock usado por el PLL del controlador de memoria.

Como mi diseño solo usa VHDL, no NIOS ni ningún otro Altera IP, me gustaría evitar que Qsys conecte los bloques.

Entonces:

  • ¿Cuál es el reloj de referencia para el bus Avalon? pll_ref_clk , afi_clk , afi_half_clk , ¿algo más?

  • ¿Puedo elegir la frecuencia, o es una proporción fija basada en el índice de DRAM, el ancho del bus?

(Como comparación, el controlador Xilinx MIG DRAM tiene FIFO internos, los relojes son entradas y pueden tener cualquier frecuencia)

EDIT

Finalmente he encontrado información relevante.

enlace (10MB!)

Volumen III, Capítulo 4: Interfaz de memoria dura.

El bus Avalon [ses] es administrado por el "Multi-Port Front End (MPFE)"

Los buses Avalon están asociados con las señales mp_cmd_xxx_clk , mp_rfifo_xxx_clk , mp_wfifo_xxx_clk , y hay cierta resincronización interna en el controlador de memoria para que Se puede utilizar cualquier reloj: "El MPFE maneja el cruce del reloj entre la lógica del usuario y la interfaz de la memoria dura".

No todas las familias de Altera FPGA parecen tener esa característica disponible, o usan diferentes controladores. Este controlador DRAM de Altera para Cyclone V tiene finalmente características muy similares a las de Xilinx MIG IP.

    
pregunta TEMLIB

1 respuesta

2

Los relojes se utilizan de la siguiente manera:

pll_ref_clk = El reloj que se alimenta a la entrada del PLL. Esto tiene que coincidir con cualquier configuración que tenga en el núcleo de IP para que se genere la frecuencia de reloj de memoria correcta.

afi_clk = Este es el reloj usado para la interfaz Avalon-MM. Hay una señal de reinicio correspondiente afi_reset que es sincrónica (creo que en Deassert) con afi_clk .

afi_half_clk = Esto es opcional y está habilitado por un parámetro en el núcleo de IP. Básicamente, este es un reloj síncrono a afi_clk pero a la mitad de la frecuencia.

Entonces, cuando estés conectando la interfaz de Avalon-MM, deberías usar afi_clk para tu lógica.

La frecuencia de los relojes depende de la configuración del núcleo de su IP. Básicamente, usted especifica la frecuencia de la memoria, que es la velocidad de reloj utilizada para la memoria física. Luego hay un parámetro que le permite seleccionar un modo de operación para la interfaz Avalon-MM. Tienes las siguientes opciones:

Full Rate = La interfaz Avalon-MM funciona a la misma frecuencia que la memoria. Para la memoria RAM DDR, tiene datos cronometrados en ambos bordes, pero internamente no puede hacer eso, por lo que para lograr la misma velocidad de datos, la interfaz de salida es dos veces el ancho de la memoria.

Half Rate = La frecuencia de reloj de la interfaz Avalon-MM es la mitad de la frecuencia de la memoria. En consecuencia, la interfaz de salida ahora es cuádruple del ancho de la memoria.

Quarter Rate = Ya tienes el patrón. Cuarta la frecuencia del reloj, por lo que el ancho de los datos es 8 multiplicado por el ancho de la memoria.

Estas diferentes configuraciones de velocidad le permiten ejecutar la memoria mucho más rápido de lo que la lógica central del FPGA puede ejecutarse (la periferia del FPGA es mucho más rápida que el núcleo). Por ejemplo, puede tener un chip DDR de 32 bits a 800 MHz que se presenta internamente como un bus de datos de 200 MHz de 256 bits de ancho.

En cuanto a por qué estaban usando el reloj de referencia PLL para el procesador Nios en el diseño de referencia, quién sabe. Hay muchos pequeños errores aquí y allá que encontrará con la documentación y los diseños de ejemplo de Altera.

    
respondido por el Tom Carpenter

Lea otras preguntas en las etiquetas