Uso de valores de memoria en Verilog / VHDL

1

En el integrador IP de Xilinx Vivado, quiero crear un bloque de construcción personalizado. El bloque debe poder acceder al espacio de memoria (posiblemente RAM externa) por sí mismo.

La función de destino del bloque se puede describir en los siguientes pasos:

  • Le doy al bloque de esclavos AXI-MM dos direcciones:
    • 0x ???? _ ??? 0: una dirección de memoria base, por ejemplo, "0x0000_ABC0".
    • 0x ???? _ ??? 4: una dirección de memoria de desplazamiento, por ejemplo. "0x0000_000D".
  • El bloque ahora determinará automáticamente la dirección de la memoria resultante ("0x0000_ABCD") y recuperará los datos de esa ubicación de la memoria, por ejemplo. "0x0000_0100". Esta lectura de datos representa una nueva dirección de memoria.
  • El bloque ahora debería recuperar datos de esa ubicación de memoria (por ejemplo, "0x0000_0005") y escribirlos en la dirección AXI_MM 0x ???? _ ??? 8.

p.s. Estoy usando 0x ???? _ ??? x, ya que la dirección base de AXI-MM depende de la configuración del configurador de IP y de otros posibles bloques conectados.

No he encontrado ninguna descripción de cómo un bloque personalizado debe leerse de la memoria. ¿Cómo debo abordar este problema?

Estoy usando la placa de entrenamiento de SoC ARM / FPGA Zybo Zynq-7000 de Digilent.

    
pregunta leventofset

2 respuestas

0

Como menciona AXI: tiene que escribir un módulo maestro AXI que genere una solicitud de lectura y escritura siguiendo el protocolo AXI. Luego, tiene que escribir el código para aceptar los datos de devolución, ya sea que lea la devolución o escriba los acuses de recibo.

Vivado tiene una IP básica para hacer lecturas y escrituras básicas para ti. Si necesitas algo más allá de eso, tienes que escribirlo tú mismo. He escrito muchos componentes AXI. El protocolo AXI parece muy simple pero es un complejo diabólico para hacerlo bien.

    
respondido por el Oldfart
0

Consulte la Guía de referencia de Xilinx AXI y la referencia del protocolo AMBA AXI .

En particular, consulte la sección A3.2: "Operaciones básicas de lectura y escritura", que detalla cómo funciona el protocolo de enlace válido / listo, y detalla los protocolos de canal para lectura y escritura.

Debe escribir un maestro axi que cree solicitudes de lectura / escritura AXI en el bus AXI y procese la respuesta. Puede utilizar el núcleo DMA para generar estas solicitudes para usted, pero en mi experiencia, la interfaz de comandos del núcleo DMA es prácticamente la misma que la del bus de direcciones AXI.

Para un ejemplo de AXI master, puede usar Vivado para crear un ejemplo de AXI master IP. Consulte esta guía para obtener más información.

En resumen, abre crear un proyecto vivado vacío y ejecuta el "Asistente para crear y empaquetar IP" (página 27)

  

Para ejecutar el asistente Crear y empaquetar nueva IP, en el menú Herramientas,   seleccione Crear y empaquetar nueva IP.

Luego seleccione "Crear un nuevo periférico AXI4" y consulte la página 39 para saber cómo parametrizar su nuevo periférico. Desea agregar una interfaz maestra asignada en memoria AXI. Una vez que haya pasado por este asistente, vivado debería generar un código de ejemplo para su periférico AXI y podrá editarlo como desee.

    
respondido por el stanri

Lea otras preguntas en las etiquetas