1 Mise en œuvre d’un contrôleur UDMA-4 pour la machine RDISK Steven Derrien Équipe R2D2
2 Contexte n Prototype RDISK de « disque intelligent » Disque dur couplé à un FPGA Traitement de banques de données génomiques Banques accédées essentiellement en lecture n Collaboration avec le Prof. A. Postola Queensland University (Brisbane) Application de simulation « Monte carlo » Possibilité de stage en Australie (à confirmer) n Objectif du mini-projet Améliorer les performances du contrôleur disque – Intégration d’un mode « écriture rapide » – Mise en œuvre du protocole UDMA-4
3 Hard drive 40 GB IDE 5000 RPM 15MB/s avg BW ~ 80$ (en 2001) Xilinx FPGA portes System on a Chip ~ 25$ (en 2001) 100Mbits Ethernet ~ 6$ / puce ~ 50 Mbps 15MB/S 150KB/s to 5MB/s Un prototype RDISK
4 Le principe n Filtrage en matériel (co-processeur) Reconfiguration du FPGA pour chaque appli Filtre spécialisé sur le FPGA Filtre très sélectif (<1%) parallel disk access ( disks) hardware filter switch Host post-processing (performed only on relevant data)
5 RDISK : Le Système Mono Puce 16 bit CPU (15%) Filtre matériel (50% ~ portes) IDE Ctrl (15%) Eth. Ctrl (3%) SDRAM CTRL (10%)
6 Le protocole IDE n Plusieurs normes +/- performantes IDE, UDMA, aujourd’hui SATA Transfert en mode blocs L’unité adressable est le secteur n Principe d’un transfert en mode IDE 1. Ecriture dans les registres de(s) des secteur à lire/écrire. 2. Attente active (lecture de registre d’état) 3. Ecriture de 256 mot sur 16bits 4. Attente active (lecture de registre d’état) 5. Si le transfert concerne plusieurs secteurs on repart en 3
7 Le contrôleur IDE (actuel) Cet automate traite les requêtes d’E/S provenant du CPU, et gère des écritures allant jusqu’à 255 secteurs Cet automate gère les aspects liés au « timing » des signaux du bus IDE
8 Le contrôleur IDE (actuel) n Lecture autonome Lecture de blocs de 128ko Envoyés directement vers le filtre (FIFO) n Limites Seulement des lectures rapides – Les écritures doivent se faire secteur par secteur Transferts en mode PIO-4 – Débit maximum ~15Mo/sec n Améliorations Ecriture rapide par PIO command Gestion de l’UDMA par PIO transfert
9 Le protocole UDMA n La version PIO est limité à 15Mo/sec Insuffisant pour certaines applications Moins rapide que sur un PC n Le mode UDMA permet jusqu’à 66Mo/sec Protocole plus récent / + complexe Nécessite un double connecteur Données échangées sur double front d’un signal
10 n Pour l’écriture : le FPGA qui envoie HSTROBE n Pour la lecture : le Disque envoie DSTROBE Le problème du « source synchronous » Facile à mettre en œuvre avec une bascule « Toggle » Problème : il faut stocker dans un registre les données sur chaque front montant et descendant du signal « DSTROBE ».
11 Le problème du « source synchronous » n Solution 1 : On utilise le signal DSTROBE comme une horloge, qui commande deux registres connectés au bus DD, et qui fonctionnent respectivement sur front montant et descendant. En pratique, cela ne marche pas, car le signal DStrobe est trop bruité pour servir d’horloge, et risque de provoquer des erreurs. Il faut tout faire de manière synchrone avec un seule horloge interne au FPGA
12 n Solution 2 : On échantillonne les données du bus Il y a une relation liant les périodes (a) et (b), on doit donc échantillonner avec un fréquence élevée Pour le projet, le max est 100MHz, et on est « limite » Le problème du « source synchronous » t t+1 t+2 Si à l’instant t+2, on détecte un front sur le signal DSTROBE échantillonné, on sait que la donnée était présente à t. (a) (b)
13 Travail à effectuer n Gestion des écritures dans PIOCommand Modifier le (les) automates VHDL Ajout d’une FIFO pour les données à écrire Valider le fonctionnement sur la carte Gestion du mode UDMA- x Gestion avec sur-echantillonnage (clkx4) Essayer d’aller le + loin (UDMA 4, 5 voire 6) Validation sur de gros volumes de données
14 Bu du cache xr C 82D2 sw r2,2(r13) sw r2, 2(sp) 001E 83D4 sw r3,4(r13) sw r3, 4(sp) loop: D2 lw r2,2(r13) lw r2, 2(sp) D4 lw r3,4(r13) lw r3, 4(sp) add r2,r3,r2 add r2,r2,r and r0,r0 sw r2, 4(sp) D4 sw r2,4(r13) 002A 83D2 sw r3,2(r13) sw r3, 2(sp) 002C D002 imm 0020 br loop 002E A000 jal r0,0(r0) 002E A000 jal r0,0(r0) est perdue Problème : le signal prev_addr devrait commander du cache