Étape 1: Une Architecture globale et Flexible
Notre équipe a conçu l’architecture globale du GPU
Nous avons commencé par une recherche bibliographique sur les conceptions commerciales ou académiques utilisé pour l’accélération graphique 2D.
Les points d’intérêt sont :
- Comment les données vidéo sont transférées à la sortie d’affichage ?
- Comment les différent modules de retouche pourrait fonctionner en parallèle sans endommager les uns des autres ? Comment l’accès aux données vidéo faudrait-il ?
- Comment le MCU doit configurer les différents modules du GPU ?
- Quel devrait être le format de pixel sélectionné pour répondre aux exigences ?
Nous avons choisi une architecture qui est générique et flexible, ce qui permet de place pour de nouvelles améliorations sur le projet et nous permettant de facilement ajouter ou supprimer des modules différents. L’architecture fournie dans l’image est inspirée de quelques existants de qui nous avons gardé les aspects qui semblait utile à nos spécifications.
Dans cette architecture, l’utilisation d’une mémoire vidéo partagée bus et l’utilisation d’un autobus unificateur de Registre sont les principaux composants qui offrent flexibilité énorme pour des changements dans le GPU.
Pour résumer les rôles des différents modules, l' Interface MCU (équipe MCU) permet le STM32 écrire dans les registres de plusieurs modules, grâce à un maître unique, plusieurs esclaves Instruction Bus, les données écrites peuvent configurer différents aspects du GPU ou lancer une opération de traitement d’image. Parmi ces modules, nous avons Contrôleur d’affichage vidéo, qui fournit les signaux de synchronisation droite pour la sortie VGA ou LCD, et le Frame Buffer va aussi être synchronisée pour ce module.
Le Frame Buffer est responsable de l’extraction de lignes à afficher de la mémoire, appliquer un mélange et le défilement des fonctionnalités et, surtout, il est chargé de fournir les données RVB correctes au bon moment (en synchronisation avec le VDC). La récupération de la ligne se faite via un bus mémoire graphique optimisé, fourni par le Contrôleur de RAM. La taille en pixels et la résolution d’affichage sont choisis pour permettre le FB aller chercher les quatre lignes en une seule horizontale découpage période (détaillée plus tard), laissant la plus période de suppression de trame verticale et les périodes d’affichage d’image des opérations de traitement.
Ce contrôleur fournit un bus mémoire partagée axée sur la priorité qui est utilisé par tous les modules nécessitant un accès à la RAM. Parmi ceux que nous avons Bloc Processing Unit, qui peut fonctionner sur des portions de l’image rectangulaire, Génératrice Primitive, qui permet de générer des figures géométriques à la destination spécifiée et Contrôleur DMA permet de transférer rapidement les données d’image vers la mémoire.
Et enfin, LCD Configuration Unit (MCU équipe) est utilisé pour faire des transferts de données SPI dans la
Registres internes du contrôleur LCD ; Ces Registre peut être modifiée pour régler la luminosité, de contraste et de nombreuses autres fonctionnalités de l’écran LCD.
Avec cette structure, nous avons réussi à fournir les principales fonctionnalités de la suite :
- RBGA 16-bit Pixel (rouge vert bleu Alpha) affichée sur écran LCD 24-bit ou 8-bit VGA,
- Frame Buffer prenant en charge jusqu'à 4 affichage indépendant et capable de défiler, couches, configurable en taille,
- Entièrement personnalisable 16Mo de RAM, affichage couche et sprite adresses sont définies, par l’utilisateur
- SRAM-comme l’interface avec le microcontrôleur STM32 grâce à traducteur d’adresses EFM,
- Bus de Registre permettant de configurer facilement les différents modules d’un MCU,
- BPU : Bit-blit, remplissage, modification de composant clair, alpha
- PNR : Générateur primitif fournissant des prixels, de lignes et de cercles et aussi de caractères de texte
- DMA: transfert de données rapides vers la RAM pour charger la texture, sprites, etc..
- LCD: configurable luminosité, contraste, couleur, filtrant à travers un bus SPI.