Table des matières:

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

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

Vidéo: Conception d'un contrôleur de cache associatif simple à quatre voies en VHDL : 4 étapes
Vidéo: Dialogues de l'ensa Nantes | Des histoires de bonnes femmes - normes, corps, féminismes 2024, Novembre
Anonim
Conception d'un contrôleur de cache associatif simple à quatre voies en VHDL
Conception d'un contrôleur de cache associatif simple à quatre voies en VHDL

Dans mon instructable précédent, nous avons vu comment concevoir un contrôleur de cache mappé direct simple. Cette fois, nous avançons d'un pas. Nous allons concevoir un simple contrôleur de cache associatif à quatre voies. Avantage ? Moins de taux d'échec, mais au détriment des performances. Tout comme mon blog précédent, nous concevrons et émulons un environnement complet de processeur, de mémoire principale et de cache pour tester notre contrôleur de cache. J'espère que vous trouverez ceci comme une référence utile pour comprendre les concepts et concevoir vos propres contrôleurs de cache à l'avenir. Comme le modèle de processeur (banc de test) et le système de mémoire principale sont exactement les mêmes que sur mon blog précédent, je ne les expliquerai plus. Veuillez vous référer à l'instructable précédente pour plus de détails à ce sujet.

Étape 1: Spécifications

Caractéristiques
Caractéristiques

Aperçu rapide des spécifications du contrôleur de cache présentées ici:

  • Contrôleur de cache associatif à quatre voies (consultez ce lien si vous recherchez un contrôleur de cache mappé direct).
  • Cache bloquant à banque unique.
  • Politique d'écriture directe sur les résultats d'écriture.
  • Politique de contournement sur les échecs d'écriture.
  • Politique de remplacement des arbres pseudo-LRU (pLRU).
  • Tag Array dans le contrôleur.
  • Paramètres configurables.

Les spécifications par défaut pour la mémoire cache et la mémoire principale sont les mêmes que celles de mon instructable précédent. Veuillez vous y référer.

É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: Résultats des tests

Le module supérieur a été testé à l'aide d'un banc de test, qui modélise simplement un processeur non pipeline, tout comme nous l'avons fait dans le dernier instructable. 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 des quatre manières.
  • L'algorithme pLRU est vérifié avec succès pour le remplacement des lignes de cache.
  • 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 = 100 MHz dans la carte Xilinx Virtex-4 ML-403 (système complet), 110 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é: