puente AXI de HPS a FPGA De1-soc

0

Trabajo en DE1-Soc. Estoy usando un BSP de Linux (consola de Linux) que encontré en la imagen de Linux del sitio web de terasic.

Tengo algunas preguntas sobre el puente AXI. De hecho, me gustaría enviar algunos datos del hps al fpga a través del puente AXI (HPS-a-FPGA AXI) y luego usar esos datos mediante el FPGA. Creé un proyecto de Quartus basado en el DE1-SOC-GHRD. El DE1-SOC-GHRD incluye el archivo soc_system.qsys que incluye hps_0 (componente HPS). Me gustaría usar el EPCQ para almacenar la configuración fpga (.sof) y la tarjeta sD para Linux y mi aplicación.

¿Alguien me puede dar algunos consejos sobre cómo usar el puente AXI? ¿Qué hacer para el FPGA y qué hacer para el procesador?

Soy nuevo en Soc, y me resultó difícil entender cómo funciona. Leí el manual del ciclón V pero siento que me perdí algo y no sé qué.

actualizacion :

Utilicé Qsys para generar mi componente hps y mi sistema. Creé 2 componentes esclavos (lectura y escritura) (esclavos asignados en la memoria de Avalon) y puedo a través del puente liviano de HPS a FPGA asignar la dirección del primer esclavo (escritura) y escribir datos. También con el segundo puedo leer datos de él por los hps. El problema es que el puente ligero de HPS a FPGA tiene una capacidad de 32 bits. Así que me gustaría usar el puente HPS a FPGA que tiene una capacidad de 128 bits. Hice lo mismo que hice con el peso ligero. pero no funciona No se porque ??

¿Cuál es la diferencia entre esos dos puentes? ¿Hay algo que añadir (configuración)? ¿No encontré la dirección base del puente HPS a FPGA? ¿Dónde puedo encontrarlo?

por ejemplo: lo que hice para el puente ligero

primero:

define HW_REGS_BASE ( ALT_STM_OFST )

define HW_REGS_SPAN ( 0x04000000 )

define HW_REGS_MASK ( HW_REGS_SPAN - 1 )

define WRITE 0x0

define READ 0x10


// lightweight base address

define ALT_LWFPGASLVS_OFST        0xff200000


virtual_base = mmap( NULL, HW_REGS_SPAN, ( PROT_READ | PROT_WRITE ), MAP_SHARED, fd, HW_REGS_BASE );

entonces:

// address for write

h2f_write=virtual_base + ( ( unsigned long  )( ALT_LWFPGASLVS_OFST + WRITE ) & ( unsigned long)( HW_REGS_MASK ) );

//address for read

h2f_read=virtual_base + ( ( unsigned long  )( ALT_LWFPGASLVS_OFST + READ ) & ( unsigned long)( HW_REGS_MASK ) );
    
pregunta Jalal Tellal

1 respuesta

1

lo segundo que necesitas saber es quién eres (tu futuro dispositivo): ¿un maestro o un esclavo? Un maestro AXI puede iniciar transacciones, pero el esclavo no puede, solo puede responder a una iniciación maestra. mientras que lo primero es muy probable que usted (debería) utilizar el AXI como un bloque de IP en su diseño, por lo tanto, el manual de ciclones no le ayudará, pero sí lo hará la documentación del AXI IP Block, las guías del usuario, los ejemplos, etc.

normalmente, el entorno de desarrollo de FPGA integra la herramienta para heredar y configurar varios bloques de IP. En Altera Quartus II, MegaCore IP Library responde por esto.

por lo tanto, mi consejo para ti es que aprendas más profundamente el quartus :-)

buena suerte.

    
respondido por el alex

Lea otras preguntas en las etiquetas