Title: DMA
1DMA
- Direct Memory Access
- Accès Direct en Mémoire
- rene.beuchat_at_epfl.ch
- rene.beuchat_at_eig.unige.ch
2Plan
- Problème
- Architecture d'un Système informatique minimum
- Scrutation / Interruption
- DMA
- Types de transferts
- Mémoire dual-port
- Contrôleur DMA
3Problème
- Dans un système informatique, l'accès au
périphériques (interfaces programmables) peut
être réalisé par le processeur à travers des
instructions de transferts - Des registres de statuts permettent au processeur
de déterminer si des données peuvent être
transférées et l'état des transferts (erreurs)
4Problème (2)
- Par scrutation de registres de status, le
processeur synchronise les transferts - Wait (status_transfert OK )
- Effectue le transfert
- Ou
- If (status_transfert OK )
- Effectue le transfert
- EndIf
5Scrutation
6Scrutation
- Avec la scrutation le système est synchrone, le
programme contrôle exactement lorsqu'il peut
accéder à une ressource - Inconvénient, le programme doit souvent tester
les statuts pour rien, et suffisamment souvent
pour ne pas rater de données
7Interruption
- Pour que le processeur ne perde pas de temps à
scruter inutilement des interfaces, les
interruptions matérielles permettent de ne
monopoliser le processeur que lorsqu'un service
est à effectuer - La synchronisation avec le consommateur/producteur
d'information est à traiter par logiciel
(message, sémaphore, FIFO, etc)
8Interruption
9Interruption
- Les interruptions mettent en uvre du matériel
spécialisé et dépendent du processeur utilisé
(vecteur, type d'accès à la routine de
traitement, etc) - De nombreuses instructions sont souvent
nécessaires pour le traitement de l'interruption
(sauvetage de contexte, test de la requête,
transfert I/O-mémoire, interrupt handler, ) ?
bande passante limitée
10DMA
- Pour des systèmes où le taux de transfert entre
les I/O et la mémoire est élevé, la scrutation ou
les interruptions sont inutilisables - Un système plus performant est nécessaire ? DMA
- Le transfert est effectué par une unité
spécialisée le contrôleur DMA
11DMA
12DMA
- Le contrôleur DMA effectue les transferts à la
place du processeur - Il doit donc avoir le contrôle des bus
- d'adresses
- de données
- de contrôle de transferts
- Avant d'effectuer le transfert un arbitrage doit
avoir lieu - Un seul maître peut accéder une unité esclave à
un instant donné
13Contrôleur DMA un interface programmable
14Contrôleur DMA un interface programmable (2)
- Le contrôleur DMA est un interface programmable
qu'il faut programmer par le processeur avant
qu'il ne soit opérationnel - Exemple de transfert double cycle I/O ? mémoire
15DMA transfert I/O ? mémoire
Requête de transfert
16DMA transfert I/O ? mémoire
Demande du bus au processeur
17DMA transfert I/O ? mémoire
Transfert IP ? Ctrl DMA
18DMA transfert I/O ? mémoire
Transfert Ctrl DMA ? Mémoire
19DMA transfert I/O ? mémoire
Interruption de fin de transfert(s)
20DMA fin de transfert(s)
- Lorsqu'un paquet de données a été transféré, le
processeur est averti par interruption ou il peut
utiliser la scrutation d'un registre de statuts - Pour que le DMA soit utile, il faut qu'une
certaine quantité de données soit transférées
21Transfert simple cycle
- Pour une plus grande efficacité de transfert,
l'accès intermédiaire par le contrôleur n'est pas
forcément nécessaire - Un accès direct I/O ? mémoire est possible
22DMA, simple cycle
23Simple cycle
- Problème de taille des bus de données ? mémoire
- Les données mises en mémoire doivent pouvoir être
accédées ensuite par le processeur à des adresses
contiguës. Si l'interface programmable source est
de largeur de bus lt que la largeur de la mémoire,
des passeurs d'alignement de la donnée doivent
être rajoutés.
24Simple cycle
25Transfert mémoire-mémoire (1)
- L'unité DMA peut être utilisée pour transférer
des données de mémoire à mémoire plus
efficacement qu'un processeur. Dans ce cas un
passage par un registre interne a généralement
lieu.
26Transfert mémoire-mémoire (1)
27Transfert mémoire-mémoire (2)
28Programmation
- Le contrôleur DMA est un interface programmable.
Il doit par conséquence être initialisé avant son
utilisation. - Plusieurs méthodes sont possibles en fonction du
circuit utilisé - Par accès à des registres internes
- Par des descripteurs en mémoire chargés
automatiquement (par DMA) par le contrôleur
29Programmation (2)
- Un ensemble de descripteurs minimaux sont
disponibles sur pratiquement tous les contrôleurs
DMA - Adresse source
- Adresse destination
- Longueur à transférer/transférée
- Mode de fonctionnement
- Statuts
- Contrôle des interruptions
30Registres de base
31Registres de base
- Souvent un pointeur se trouve dans le contrôleur
sur un descripteur en mémoire - Ce descripteur contient les divers paramètres
décrivant le transfert et les adresses des
buffers source/destination - Si le pointeur spécifie une adresse mémoire,
cette adresse sera incrémentée à chaque accès - Si le pointeur spécifie une adresse d'interface
programmable (I/O), l'adresse ne sera pas
modifiée
32Registres de base
33Registres de base
- Un seul descripteur de buffer est limitatif, si
de nouvelles données sont à recevoir et que le
buffer précédent n'est pas encore libéré, des
données seront perdues. Un tableau de
descripteurs est alors généralement proposé
34Descripteurs en mémoire
35Descripteurs en mémoire
- Avec un tableau de descripteurs, il est possible
de ne pas être à cours de buffers de réception
pour autant que le débit de réception des données
ne dépasse pas la capacité de traitement des
données reçues. - Une gestion des buffers est à réaliser pour
maintenir l'ordre du tampon des descripteurs
36Descripteurs en mémoire
- Une liste chaînée de descripteurs permet une
plus grande souplesse dans la gestion des
descripteurs, leur remise en jeu peut être
quelconque
37Descripteurs en mémoire
38Mémoire à double accès
- Pour effectuer les transferts en parallèle avec
l'utilisation d'un processeur, des bus séparés
peuvent être utilisés - La mémoire est vue alors comme une mémoire à
double (triple, n-) accès - Les bus multiplexés peuvent être réalisés avec
des mémoires conventionnelles et des
buffers/arbitre externes ou en circuits
spécialisés
39Mémoire à double accès
40Mémoire à double accès
41Mémoire à double accès
- Le modèle mémoire à double accès est similaire à
un système multiprocesseur à mémoire partagée
commune - Ce modèle correspond aux bus fonds de panier
multi-maîtres
42Conclusion
- Les unités DMA permettent de décharger le
processeur dans des tâches de transferts de
données par paquets - Le transfert est "câblé" et non plus exécuté par
des instructions d'un processeur ? débits accrus - Assemblage de données possibles
- Filtres de données possibles
43Conclusion
- La fin d'un transfert peut être traité par
scrutation ou interruption par le processeur. - Le transfert DMA est réalisé pour le transfert
des données. - Actuellement beaucoup d'interfaces programmables
contiennent directement un contrôleur DMA intégré
(réseaux, SCSI, disque, )
44DMA sur FPGA
- Des corps DMA en HDL (VHDL/Verilog) sont
réalisables ou disponibles pour FPGA - Corps synthétisables à intégrer sur logique
programmable - Exemple DMA pour bus Avalon
45DMA pour Avalon
- Architecture de lunité DMA
- Bus de lecture
- FIFO intermédiaire
- Bus décriture
- Unité de contrôle programmable
46Registres de contrôle
- Vu par le processeur comme interface programmable
- Zone de 8 registres de 32 bits
47Registre de statuts
- Informations sur létat du contrôleur
- Une écriture met à 0 les bits len, weop, reop,
et done
48Statuts
- done est activé en fin de transfert
- Une interruption peut être effectuée si elle est
autorisée - Les bits len, weop, et reop permettent de
connaître la cause de fin de transfert. - Lorsque done est désactivé par une écriture sur
ce registre, la requête dinterruption est
désactivée
49Registres de contrôle
- Readaddress, writeaddress, length déterminent les
adresses de source , destination et la longueur
du transfert - length est défini en nombre doctets
- La largeur des registres est déterminé à la
génération du module
50Registre de contrôle
- Le registre de contrôle spécifie les modes de
fonctionnement et autorisations diverses
51Contrôle
- Rcon et wcon spécifient si ladresse de lecture,
resp. décriture est fixe (1) ou à incrémenter
(0) - Selon la taille du transfert et _con indiqué les
adresses sincrémentent de 0, 1, 2 ou 4
52Structure logicielle du DMA
- typedef volatile struct
- int np_dma_status // status register
- int np_dma_read_address // read address
- int np_dma_write_address // write address
- int np_dma_length // length in bytes
- int np_dma_reserved1 // reserved
- int np_dma_reserved2 // reserved
- int np_dma_control // control register
- int np_dma_reserved3 // reserved
- np_dma
53Procédures de transferts
54Procédure de base
- static void dma_shared (
- np_dma dma, // adresse contrôleur DMA
- int bytes_per_transfer, // nb
octets/transfert (1,2,4) - void source_address, // adresse source
- void destination_address, // adresse
destination - int transfer_count, // longueur transfert
- int mode // mode (rcon, wcon)
- )
- int control_bits 0
- // 1. Halt anything that's going on
- dma-gtnp_dma_control 0
55suite
- // 2. Set up everything except the go-bar
-
- dma-gtnp_dma_status 0
- dma-gtnp_dma_read_address (int)source_address
- dma-gtnp_dma_write_address (int)destination_add
ress - dma-gtnp_dma_length transfer_count
bytes_per_transfer
56- // 3. construct the control word...
- control_bits
- mode // wcon, rcon bits
- (bytes_per_transfer 7) // low three
bits of control reg - ((bytes_per_transfer 8) ?
np_dma_control_doubleword_mask 0) - ((bytes_per_transfer 16) ?
np_dma_control_quadword_mask 0) - np_dma_control_le_en_mask // enable
length (else runs forever) - np_dma_control_go_mask // and... go!
- dma-gtnp_dma_control control_bits
57Suite et fin
- // 4. Wait til it's all done !! Polling !!
- while((dma-gtnp_dma_status np_dma_status_busy_m
ask) ! 0) -
- return
-
58