Innehållsförteckning:

Design av en enkel cachekontroller i VHDL: 4 steg
Design av en enkel cachekontroller i VHDL: 4 steg

Video: Design av en enkel cachekontroller i VHDL: 4 steg

Video: Design av en enkel cachekontroller i VHDL: 4 steg
Video: The AV & Custom Systems Driver in iRidium project 2024, November
Anonim
Design av en enkel cachekontroller i VHDL
Design av en enkel cachekontroller i VHDL

Jag skriver det här instruerbart, eftersom jag tyckte att det var lite svårt att få lite referens -VHDL -kod att lära sig och börja designa en cache -kontroller. Så jag designade själv en cachekontroller från grunden och testade den framgångsrikt på FPGA. Jag har presenterat en enkel direkt mappad cachekontroller här, samt modellerat ett helt processor-minnessystem för att testa cachekontrollern. Jag hoppas att ni tycker att detta kan vara användbart som referens för att designa era egna cachekontroller.

Steg 1: Specifikationer

Specifikationer
Specifikationer

Det här är huvudspecifikationerna för Cache Controller som vi ska designa:

  • Direct Mapped. (gå till den här länken om du letar efter Associative Mapped Cache Controller)
  • Enbankad, blockerande cache.
  • Genomskrivningspolicy för skrivträffar.
  • Tilldelning utan skrivning eller skrivning kring policy om skrivfel.
  • Ingen skrivbuffert eller andra optimeringar.
  • Tag Array är inkorporerat.

Förutom det kommer vi också att utforma ett cacheminne och ett huvudminnessystem.

Standardspecifikationerna för cacheminnet:

  • 256 bytes enkelbankad cache.
  • 16 cachelinjer, varje cachelinje (block) = 16 byte.

Specifikationerna för huvudminnet:

  • Synkron läs-/skrivminne.
  • Multi -banked Interleaved Memory - fyra minnesbanker.
  • Varje bankstorlek = 1 kB vardera. Alltså total storlek = 4 kB.
  • Word (4 Bytes) adresserbart minne med 10-bitars adressbuss.
  • Högre bandbredd för läsning. Läs databredd = 16 Bytes i en klockcykel.
  • Skriv databredd = 4 byte.

OBS: kolla min nyare instruerbara om du letar efter 4-vägs associerad cachecontroller-design

Steg 2: RTL -vy av hela systemet

RTL -vy över hela systemet
RTL -vy över hela systemet

Komplett RTL -representation av toppmodulen visas i figuren (exklusive processorn). Standardspecifikationer för bussarna är:

  • Alla databussar är 32-bitars bussar.
  • Adressbuss = 32-bitars buss (men endast 10 bitar kan adresseras här av minnet).
  • Datablock = 128 bitar (Wide Bandwidth Bus for Read).
  • Alla komponenter drivs av samma klocka.

Steg 3: Testmiljö

Toppmodulen testades med en testbänk, som helt enkelt modellerar en icke-pipelinerad processor (eftersom det inte alls är enkelt att designa en hel processor !!). Testbänken genererar ofta läs-/skrivdataförfrågningar till minnet. Detta hånar typiska "Load" och "Store" instruktioner, vanliga i alla program som körs av en processor. Testresultaten har verifierat funktionen hos cachekontrollern. Följande är teststatistiken som observerats:

  • Alla läs/skriv miss- och träffsignaler genererades korrekt.
  • Alla läs-/skrivdataoperationer lyckades.
  • Inga datainkoherens/inkonsekvensproblem upptäcktes.
  • Designen lyckades tajma verifieras för en Maxm. Klocka Driftsfrekvens = 110 MHz i Xilinx Virtex-4 ML-403 Board (hela systemet), 195 MHz för Cache Controller ensam.
  • Block RAM -minnen utlästes för huvudminnet. Alla andra matriser implementerades på LUT.

Steg 4: Bifogade filer

Följande filer bifogas här med denna blogg:

  • . VHD -filer från Cache Controller, Cache Data Array, Main Memory System.
  • Testbänk.
  • Dokumentation om Cache Controller.

Anmärkningar:

  • Gå igenom dokumentationen för fullständig förståelse av specifikationerna för Cache Controller som presenteras här.
  • Eventuella ändringar i koden är beroende av andra moduler. Så, ändringarna bör göras på ett klokt sätt. Var uppmärksam på alla kommentarer och rubriker som jag har gett.
  • Om det av någon anledning inte utläses block -RAM för huvudminnet, MINSKA storleken på minnet, följt av ändringar i adressbussbredder över filerna och så vidare. Så att samma minne kan implementeras antingen på LUT eller distribuerat RAM. Detta sparar tid och resurser. Eller, gå till den specifika FPGA -dokumentationen och hitta den kompatibla koden för Block RAM och redigera koden i enlighet därmed och använd samma adressbussbreddsspecifikationer. Samma teknik för Altera FPGA.

Rekommenderad: