DMA, cache et script de liens
Déplacer des buffers entre DDR, OCM et BRAM, maintenir la cohérence du cache et placer les sections ELF dans la bonne mémoire.
Pourquoi utiliser un DMA
Une copie réalisée par le processeur consomme des instructions pour chaque mot. Un Direct Memory Access Controller, ou DMA, déplace directement un bloc de données entre deux adresses. Le processeur prépare le transfert, puis peut exécuter une autre tâche ou attendre l'interruption de fin.
Pour rendre les effets de la mémoire et du cache mesurables, nous proposons dans ce cours un benchmark DMA. Ce programme compare quatre chemins.
| Source | Destination | Frontière traversée |
|---|---|---|
| DDR | DDR | Mémoire du PS |
| BRAM | BRAM | Mémoire de la PL |
| DDR | BRAM | PS vers PL |
| BRAM | DDR | PL vers PS |
Le code répète des blocs de 4096 mots et mesure le nombre de cycles avec un timer TTC. Il vérifie ensuite chaque mot du buffer destination. Une mesure sans vérification peut masquer une erreur d'adresse ou de cache.

Préparer un transfert
Le processeur initialise la source et la destination, construit le descripteur, configure le canal DMA puis lance l'opération.
for (u32 i = 0; i < word_count; i++) {
source[i] = 0x10000000U + i;
destination[i] = 0U;
}
Xil_DCacheFlushRange