Inhaltsverzeichnis:

Entwurf eines einfachen Cache-Controllers in VHDL - Gunook
Entwurf eines einfachen Cache-Controllers in VHDL - Gunook

Video: Entwurf eines einfachen Cache-Controllers in VHDL - Gunook

Video: Entwurf eines einfachen Cache-Controllers in VHDL - Gunook
Video: 34C3 - End-to-end formal ISA verification of RISC-V processors with riscv-formal - deutsche Überset 2024, November
Anonim
Entwurf eines einfachen Cache-Controllers in VHDL
Entwurf eines einfachen Cache-Controllers in VHDL

Ich schreibe dieses instructable, weil ich es ein wenig schwierig fand, einen Referenz-VHDL-Code zu bekommen, um zu lernen und einen Cache-Controller zu entwerfen. Also habe ich selbst einen Cache-Controller von Grund auf neu entworfen und erfolgreich auf FPGA getestet. Ich habe hier einen einfachen direkt zugeordneten Cache-Controller vorgestellt sowie ein ganzes Prozessor-Speicher-System modelliert, um den Cache-Controller zu testen. Ich hoffe, Sie finden dieses instructable nützlich als Referenz, um Ihre eigenen Cache-Controller zu entwerfen.

Schritt 1: Spezifikationen

Spezifikationen
Spezifikationen

Dies sind die wichtigsten Spezifikationen des Cache-Controllers, den wir entwerfen werden:

  • Direkt zugeordnet. (Gehen Sie zu diesem Link, wenn Sie nach einem assoziativen zugeordneten Cache-Controller suchen)
  • Single-Banked, blockierender Cache.
  • Write-Through-Richtlinie für Write-Treffer.
  • No-Write-Zuweisungs- oder Write-Around-Richtlinie bei Schreibfehlern.
  • Kein Schreibpuffer oder andere Optimierungen.
  • Tag-Array ist integriert.

Außerdem werden wir einen Cache-Speicher und ein Hauptspeichersystem entwerfen.

Die (konfigurierbaren) Standardspezifikationen des Cache-Speichers:

  • 256 Bytes Single-Banked-Cache.
  • 16 Cache-Zeilen, jede Cache-Zeile (Block) = 16 Bytes.

Die Spezifikationen des Hauptspeichers:

  • Synchroner Lese-/Schreibspeicher.
  • Multi-banked Interleaved Memory - vier Speicherbänke.
  • Jede Bankgröße = jeweils 1 kB. Daher Gesamtgröße = 4 kB.
  • Wort (4 Bytes) adressierbarer Speicher mit 10-Bit-Adressbus.
  • Höhere Bandbreite zum Lesen. Lesedatenbreite = 16 Bytes in einem Taktzyklus.
  • Schreibdatenbreite = 4 Bytes.

HINWEIS: Überprüfen Sie mein neueres anweisbares, wenn Sie nach 4-Wege-assoziativem Cache-Controller-Design suchen

Schritt 2: RTL-Ansicht des gesamten Systems

RTL-Ansicht des gesamten Systems
RTL-Ansicht des gesamten Systems

Die vollständige RTL-Darstellung des Top-Moduls ist in der Abbildung dargestellt (ohne Prozessor). Die Standardspezifikationen für die Busse sind:

  • Alle Datenbusse sind 32-Bit-Busse.
  • Adressbus = 32-Bit-Bus (aber hier sind nur 10 Bits vom Speicher adressierbar).
  • Datenblock = 128 Bit (Bus mit breiter Bandbreite zum Lesen).
  • Alle Komponenten werden von derselben Uhr angetrieben.

Schritt 3: Testumgebung

Das Top-Modul wurde mit einem Prüfstand getestet, der einfach einen Prozessor ohne Pipeline modelliert (denn einen kompletten Prozessor zu entwerfen ist gar nicht so einfach !!). Der Prüfstand generiert häufig Lese-/Schreibdatenanforderungen an den Speicher. Dies verspottet typische "Load"- und "Store"-Befehle, die in allen von einem Prozessor ausgeführten Programmen gemeinsam sind. Die Testergebnisse haben die Funktionalität des Cache Controllers erfolgreich verifiziert. Im Folgenden sind die beobachteten Teststatistiken aufgeführt:

  • Alle Read/Write Miss- und Hit-Signale wurden korrekt generiert.
  • Alle Operationen zum Lesen/Schreiben von Daten waren erfolgreich.
  • Keine Dateninkohärenz-/Inkonsistenzprobleme festgestellt.
  • Das Design wurde erfolgreich für ein Maxm-Timing verifiziert. Taktfrequenz des Betriebs = 110 MHz in Xilinx Virtex-4 ML-403 Board (gesamtes System), 195 MHz für Cache Controller allein.
  • Für den Hauptspeicher wurden Block-RAMs abgeleitet. Alle anderen Arrays wurden auf LUTs implementiert.

Schritt 4: Angehängte Dateien

Folgende Dateien sind hier mit diesem Blog angehängt:

  • . VHD-Dateien von Cache Controller, Cache Data Array, Hauptspeichersystem.
  • Prüfstand.
  • Dokumentation zum Cache-Controller.

Anmerkungen:

  • Gehen Sie die Dokumentation durch, um die Spezifikationen des hier vorgestellten Cache-Controllers vollständig zu verstehen.
  • Alle Änderungen im Code sind von anderen Modulen abhängig. Die Änderungen sollten also mit Bedacht vorgenommen werden. Beachten Sie alle Kommentare und Überschriften, die ich gegeben habe.
  • Wenn aus irgendeinem Grund Block-RAMs für den Hauptspeicher nicht abgeleitet werden, REDUZIEREN Sie die Größe des Speichers, gefolgt von Änderungen der Adressbusbreiten über die Dateien hinweg und so weiter. Damit der gleiche Speicher entweder auf LUTs oder Distributed RAM implementiert werden kann. Dies spart Zeit und Ressourcen für das Routing. Oder gehen Sie zur spezifischen FPGA-Dokumentation und suchen Sie den kompatiblen Code für Block-RAM und bearbeiten Sie den Code entsprechend und verwenden Sie die gleichen Adressbusbreitenspezifikationen. Gleiche Technik für Altera FPGAs.

Empfohlen: