Bonjour à tous,
toujours en train de travailler sur mon projet d'intégration de Leon3 sur un FPGA (je devrais bientôt avoir le matériel), mon patron aimerait intégrer un DMA au sein du softcore.
Oui mais, qu'est-ce que c'est qu'un DMA ? Sur internet, on peut lire "Les canaux DMA permettent de réaliser des transferts directs de données entre la mémoire vive d'un ordinateur et des périphériques. L'avantage de ce procédé est de ne pas passer par le microprocesseur qui peut ainsi se consacrer à d'autres tâches. L'utilisation de canaux DMA améliore donc les performances d'un ordinateur."
Oui mais ça ne me dit pas exactement comment ça fonctionne. Quelqu'un aurait-il un cours dessus ou une bonne explication ?
D'avance merci..
DMA : Késako ?
Modérateur : Modérateur
Le fonctionnement DMA, pour résumer, c'est que le processeur central configure un transfert, et ensuite, laisse les choses évoluer de leur coté, pour exécuter le reste de son code. Lorsque la donnée est disponible, le gestionnaire DMA va invoquer une interruption spécifique pour le signaler au processeur, qui va du coup faire l'action que tu as prévue. C'est utile si tu dois faire un transfert vers une interface lente sans être bloqué.
Une autre facon de voir les choses, c'est de te dire que ton processeur va accéder à un périphérique à travers des buffers. Quand il veut écrire vers le périphérique, plutot que d'attendre que celui ci soit pret, il écrit dans le buffer adéquat en configurant ce qu'il faut, et zou, le buffer se débrouille tout seul pour faire parvenir la donnée correctement. Quand il lit sur une interface, le processeur fait une demande au buffer entrant, et reprend sa tache d'exécution courante. Lorsque le buffer contient la donnée qui a été demandée, hop, interruption pour traiter cette donnée, et voila.
Une autre facon de voir les choses, c'est de te dire que ton processeur va accéder à un périphérique à travers des buffers. Quand il veut écrire vers le périphérique, plutot que d'attendre que celui ci soit pret, il écrit dans le buffer adéquat en configurant ce qu'il faut, et zou, le buffer se débrouille tout seul pour faire parvenir la donnée correctement. Quand il lit sur une interface, le processeur fait une demande au buffer entrant, et reprend sa tache d'exécution courante. Lorsque le buffer contient la donnée qui a été demandée, hop, interruption pour traiter cette donnée, et voila.