Table des matières:

Conception d'un contrôleur de cache simple en VHDL : 4 étapes
Conception d'un contrôleur de cache simple en VHDL : 4 étapes

Vidéo: Conception d'un contrôleur de cache simple en VHDL : 4 étapes

Vidéo: Conception d'un contrôleur de cache simple en VHDL : 4 étapes
Vidéo: Etapes d'exécution d'une instruction dans le microprocesseur 2024, Novembre
Anonim
Conception d'un contrôleur de cache simple en VHDL
Conception d'un contrôleur de cache simple en VHDL

J'écris ce instructable, car j'ai trouvé un peu difficile d'obtenir du code VHDL de référence pour apprendre et commencer à concevoir un contrôleur de cache. J'ai donc conçu moi-même un contrôleur de cache à partir de zéro et l'ai testé avec succès sur FPGA. J'ai présenté ici un simple contrôleur de cache mappé directement, ainsi que modélisé un système processeur-mémoire entier pour tester le contrôleur de cache. J'espère que vous trouverez cette instructable utile comme référence pour concevoir vos propres contrôleurs de cache.

Étape 1: Spécifications

Caractéristiques
Caractéristiques

Voici les principales spécifications du contrôleur de cache que nous allons concevoir:

  • Cartographie directe. (allez à ce lien si vous recherchez un contrôleur de cache mappé associatif)
  • Cache bloquant à banque unique.
  • Politique d'écriture directe sur les hits d'écriture.
  • Politique d'allocation sans écriture ou de contournement en cas d'échec d'écriture.
  • Pas de tampon d'écriture ou d'autres optimisations.
  • Tag Array est incorporé.

En plus de cela, nous allons également concevoir une mémoire cache et un système de mémoire principale.

Les spécifications par défaut (configurables) de la mémoire cache:

  • Cache à banque unique de 256 octets.
  • 16 lignes de cache, chaque ligne de cache (bloc) = 16 octets.

Les spécifications de la mémoire principale:

  • Mémoire de lecture/écriture synchrone.
  • Mémoire entrelacée multi-banques - quatre banques de mémoire.
  • Chaque taille de banque = 1 Ko chacune. Par conséquent, taille totale = 4 ko.
  • Mémoire adressable de mots (4 octets) avec bus d'adresse 10 bits.
  • Bande passante plus élevée pour la lecture. Lire la largeur des données = 16 octets en un cycle d'horloge.
  • Largeur des données d'écriture = 4 octets.

REMARQUE: consultez mon plus récent instructable si vous recherchez une conception de contrôleur de cache associatif à 4 voies

Étape 2: Vue RTL de l'ensemble du système

Vue RTL de l'ensemble du système
Vue RTL de l'ensemble du système

La représentation RTL complète du module supérieur est illustrée sur la figure (à l'exception du processeur). Les spécifications par défaut des bus sont:

  • Tous les bus de données sont des bus 32 bits.
  • Bus d'adresse = Bus 32 bits (Mais seulement 10 bits sont adressables ici par la Mémoire).
  • Bloc de données = 128 bits (bus à large bande passante pour la lecture).
  • Tous les composants sont pilotés par la même horloge.

Étape 3: Tester l'environnement

Le Top Module a été testé à l'aide d'un banc de test, qui modélise simplement un processeur non pipeline (car concevoir un processeur entier n'est pas du tout facile !!). Le banc de test génère fréquemment des requêtes de lecture/écriture de données dans la mémoire. Cela se moque des instructions "Load" et "Store" typiques, communes à tous les programmes exécutés par un processeur. Les résultats du test ont vérifié avec succès la fonctionnalité du contrôleur de cache. Voici les statistiques de test observées:

  • Tous les signaux Read/Write Miss et Hit ont été générés correctement.
  • Toutes les opérations de lecture/écriture de données ont réussi.
  • Aucun problème d'incohérence/incohérence des données détecté.
  • La conception a été vérifiée avec succès pour un Maxm. Fréquence de fonctionnement de l'horloge = 110 MHz dans la carte Xilinx Virtex-4 ML-403 (système complet), 195 MHz pour le contrôleur de cache seul.
  • Des RAM de bloc ont été déduites pour la mémoire principale. Tous les autres tableaux ont été implémentés sur des LUT.

Étape 4: Fichiers joints

Les fichiers suivants sont joints ici avec ce blog:

  • Fichiers. VHD de Cache Controller, Cache Data Array, Main Memory System.
  • Banc d'essai.
  • Documentation sur le contrôleur de cache.

Remarques:

  • Parcourez la documentation pour bien comprendre les spécifications du contrôleur de cache présentées ici.
  • Toute modification du code dépend d'autres modules. Donc, les changements doivent être faits judicieusement. Faites attention à tous les commentaires et en-têtes que j'ai donnés.
  • Si, pour une raison quelconque, les RAM de bloc ne sont pas déduites pour la mémoire principale, RÉDUISEZ la taille de la mémoire, puis modifiez la largeur du bus d'adresses dans les fichiers, etc. Ainsi, la même mémoire peut être implémentée sur des LUT ou sur une RAM distribuée. Cela permettra d'économiser le temps de routage et les ressources. Ou, accédez à la documentation FPGA spécifique et recherchez le code compatible pour Block RAM et modifiez le code en conséquence, et utilisez les mêmes spécifications de largeur de bus d'adresse. Même technique pour les FPGA Altera.

Conseillé: