🛠 Despliegue de un nodo IoT con Sapphire RV64: Red y Almacenamiento

Efinix Sapphire RV64: SoC RISC-V de 64 bits configurable para FPGA · intermediaire · Configurez un système embarqué complet sur FPGA Efinix en exploitant les interfaces AXI4 et les extensions RISC-V pour la gestion de données.

Objetivos

Este tutorial tiene como objetivo configurar el SoC Sapphire RV64 para un caso de uso típico de IoT industrial: adquisición de datos mediante interfaces periféricas (SPI/I2C) y transmisión de red. Ilustraremos cómo explotar la arquitectura configurable para asignar los recursos de memoria y las interfaces necesarias, centrándonos en la integración de buses AXI4/APB3 y la gestión de memoria externa.

Hardware necesario

Pasos

  1. Configuración del núcleo VexiiRiscv: En Efinity, instancie el bloque IP Sapphire RV64. Seleccione el núcleo VexiiRiscv. Active las extensiones RV64IMACFD para soporte de punto flotante (cálculos de sensores) y Zba_Zbc_Zbs para optimización de operaciones bit a bit. Si su aplicación requiere un SO completo, active la MMU SV39.
  1. Asignación de memoria: Configure la RAM en chip a 64 KB para la pila y variables críticas. Para almacenar registros o buffers de red, conecte la memoria externa. Por ejemplo, si usa HyperRAM (500 Mbps), configure el controlador de interfaz correspondiente en el bloque IP. Asegúrese de que la caché L1 esté activada para reducir la latencia de acceso.
  1. Interconexión de bus: Conecte el núcleo a los periféricos mediante el bus AXI4 para altas velocidades (memoria externa) y APB3 para periféricos lentos (UART, GPIO). Asigne direcciones de memoria para periféricos I2C (hasta 5 maestros disponibles) y SPI (3 maestros).
  1. Generación de bitstream: Sintetice el diseño. Verifique que se cumplan los tiempos, especialmente si apunta a la frecuencia máxima de 400 MHz. Cargue el bitstream en el FPGA.
  1. Desarrollo de software: Escriba el firmware en C. Use los controladores proporcionados para inicializar las interfaces SPI para leer un sensor. Almacene datos en buffer en la memoria externa. Implemente una pila TCP/IP ligera (como lwIP) usando la interfaz de red (si está disponible vía GPIO/SPI Ethernet o módulo externo) para transmitir datos.

Verificación

Use el depurador RISC-V estándar a través de OpenOCD. Coloque puntos de interrupción de hardware (hasta 4 disponibles) en la rutina de adquisición de datos. Verifique mediante un analizador lógico que las señales SPI/I2C sean correctas. Confirme que los datos se escriben correctamente en la memoria externa leyendo las direcciones correspondientes mediante el depurador.

Para ir más allá

Explore el uso de la caché L2 compartida (64 a 512 KB) para acelerar el acceso a memoria en modo multinúcleo (hasta 4 núcleos). También puede probar el rendimiento con extensiones de punto flotante de doble precisión para procesamiento de señal embebido.

Otros tutoriales para esta placa

Ejemplos de código para esta placa

← Volver a la ficha 🛠 Todos los tutoriales