Étape 8: Direct Memory Access
Le contrôleur DMA donne accès à la RAM du GPU (la puce Micron sur la carte Nexys 3) directement depuis l’interface SRAM. Ce module serait surtout nécessaire pour transférer les données d’image bitmap comme le fond, les tuiles, les sprites à la CRAM. Afin de minimiser l’attente sur l’écran de chargement des jeux, nous devrons trouver un moyen de maximiser le taux de transfert de données par le biais de ce contrôleur.
Nous avons conçu ce module, en envisageant la possibilité que le débit d’entrée pourrait aller jusqu'à 28MHz (dans le cas où un cycle d’écriture à l’Interface MCU a eu 6 horloges AHB pour le STM32), mais dans la pratique, en raison des signaux bruyants à l’Interface MCU, le débit de données n’iraient jamais aussi élevé que (serait plus probablement entre 3 MHz et 10 MHz).
En dehors du module de gestion de Registre, ce contrôleur peut être séparé en deux sous-modules ; le récepteur d’Interface MCU qui est chargé de surveiller État du transfert et de mise en mémoire tampon des données entrantes s’il y a un transfert DMA en cours. La mise en mémoire tampon se fait grâce à un total de six 16 Ko BlockRAMs, et ces tampons sont regroupés dans un bus d’adresse unique sur le côté de l’orifice de l’écriture. Le deuxième module auxiliaire de ce contrôleur est l’émetteur de contrôleur de RAM, ce module a pour tâche de "vider" ces tampons en écrivant à la RAM, lorsqu’ils sont remplis avec suffisamment de données.
(Les modes de fonctionnement détaillés et limite la bande passante théorique seront développés ici bientôt.)
Démo
Dans la vidéo, l’émulateur MCU est utilisé pour alimenter la sortie d’un compteur 16 bits comme source de données entrantes de la MCU et ces données sont transférées à la zone de 300 x 200 de la couche 0. Vous pouvez trouver des images des données avant et après l’opération de DMA.