Transferencia de datos desde Cortex M1 a esclavos AHB

1

Estoy trabajando en la plataforma ACTEL Fusion que proporciona el softcore Cortex M1. ¿Es posible que los esclavos AHB-lite accedan a la memoria Cortex M1? Por ejemplo, si mi archivo C principal tiene una matriz de unsigned_int 's. ¿Es posible pasar la dirección de inicio de la matriz a un esclavo y el esclavo AHB puede acceder a múltiples elementos de la matriz al mismo tiempo? Todo lo que quiero es minimizar las escrituras de memoria en mi periférico de hardware personalizado, de lo contrario, significaría 10 escrituras de memoria para pasar uint x [10]. ¿Hay alguna otra solución? El sistema AHB-lite contiene coreMemCtrl, CoreAhbSRAM y CoreAhbNvm.

    
pregunta Ganesh

1 respuesta

1

(nota: estoy abordando el caso general de un procesador moderadamente avanzado que interactúa con el tejido FPGA, en lugar de los detalles de este núcleo específico en esta tecnología de proveedor)

Si entiendo correctamente, desea que el esclavo acceda a los elementos de la matriz de manera verdaderamente paralela, es decir, no solo omitiendo el núcleo del procesador y utilizando DMA para acceder a ellos de forma secuencial.

Claramente, una memoria de acceso secuencial convencional no puede admitir el acceso a una amplitud física mayor que su ancho de tiempo real (es decir, si tenía una memoria de 64 bits y era un puerto dual, conceptualmente podría organizar un acceso paralelo) a 4 elementos de 32 bits. Si su memoria es FPGA block rams, es posible que pueda configurar las cosas para que tengan un ancho de acceso muy amplio en el segundo puerto y obtener los 10 valores de una sola vez de esta manera)

Si está limitado a una "memoria" más común, lo que podría hacer en su lugar es utilizar la IO asignada en la memoria para asignar una serie de registros de "hardware" (como en LUT) en el espacio de la memoria del procesador, y hacer que también alimenten directamente su periférico en paralelo. Con un poco de codificación cuidadosa, puede configurar el programa para usar esto como una ubicación de almacenamiento, aunque puede requerir un trabajo adicional para integrarlo de una forma tan rápida como el acceso a la memoria principal, y deberá asegurarse de que sea a la vez declarado volátil y que no se aplica ningún almacenamiento en caché.

Es posible que también desee pensar en la frecuencia con la que el programa necesita actualizar estos valores. ¿Desea tener copias de trabajo en la memoria ordinaria y realizar copias programáticas en la memoria asignada de E / S en determinados momentos? ¿O desea utilizar la IO asignada en memoria como almacenamiento de variables de trabajo?

    
respondido por el Chris Stratton

Lea otras preguntas en las etiquetas