Simulator Hardware Interactiv de Memorie Cache

Introducere

  • Autor: Lăcraru Teodora-Ioana
  • Grupa: 331CA

Proiectul constă într-un dispozitiv hardware interactiv, construit în jurul microcontrolerului ATmega328P, care simulează în timp real funcționarea unei memorii cache de tip Direct Mapped cu 8 linii. Scopul instrumentului este pur didactic: transformarea unui concept abstract din arhitectura calculatoarelor într-o experiență tactilă și vizuală, permițând studenților să observe direct mecanismele de transfer al datelor între memoria RAM (simulată ca fiind lentă) și memoria cache (rapidă). Prin intermediul unei matrice de LED-uri, al unui ecran LCD și al feedback-ului sonor, utilizatorul poate “vedea” și “auzi” diferența dintre un HIT și un MISS, înțelegând astfel de ce ierarhia de memorie este o componentă esențială a oricărui sistem de calcul modern.

Descriere Generală

Sistemul funcționează pe principiul unei bucle de procesare interactive, folosind microcontrolerul ATmega328P ca unitate centrală de control.

  • Input: Utilizatorul introduce o adresă de memorie pe 8 biți (valori 0–255 în format decimal) prin consola serială (UART) de pe PC.
  • Procesare și Decodificare: Microcontrolerul descompune adresa primită în două câmpuri: Index (3 biți, pentru selecția uneia dintre cele 8 linii de cache) și Tag (5 biți, pentru verificarea conținutului). Algoritmul verifică Valid Bit-ul liniei selectate și compară Tag-ul stocat cu cel solicitat.
  • Clasificare: În cazul unui MISS, sistemul clasifică automat tipul erorii: Compulsory Miss (linie goală, prima accesare) sau Conflict Miss (linie ocupată, dar cu Tag diferit, specific cache-ului Direct Mapped). Pentru fiecare HIT, datele sunt servite imediat din cache fără înlocuire.
  • Output și Feedback Vizual: Starea internă a cache-ului este vizualizată în timp real printr-o matrice de 24 LED-uri organizate în 3 rânduri × 8 coloane, controlate prin 3 shift registere conectate în daisy chain:
    • Coloana 1 (LED-uri verzi): Valid Bit pentru fiecare dintre cele 8 linii
    • Coaloana 2 (LED-uri galbene): bit 0 al Tag-ului stocat pe fiecare linie
    • Coloana 3 (LED-uri galbene): bit 1 al Tag-ului stocat pe fiecare linie

Tag-ul adresei curente este afișat în binar pe un LED Bar Graph cu 8 segmente, iar adresa solicitată, decodificarea (Index, Tag), tipul rezultatului (HIT / MISS Compulsory / MISS Conflict) și statisticile de performanță sunt afișate pe un ecran LCD 16×2.

  • Feedback Sonor: Un buzzer pasiv oferă feedback sonor diferențiat, ton înalt și scurt pentru HIT, ton mediu pentru Compulsory Miss și ton grav prelungit pentru Conflict Miss.
  • Statistici în timp real: După fiecare acces, sistemul recalculează Hit Rate-ul ca raport între accesele de tip HIT și totalul accesărilor. Datele complete ale fiecărui acces (adresa în decimal și binar, Index, Tag, rezultat, Hit Rate cumulativ) sunt transmise simultan pe canalul UART, facilitând analiza comportamentului cache-ului în diferite scenarii.

Schema bloc a sistemului

Hardware Design

Lista de componente

  • Microcontroler: 1× Plăcuță de dezvoltare ATmega328P Xplained Mini
  • Logică de extensie pini: 3× Shift Register 74HC595 (conectate în daisy-chain pe magistrala SPI)
  • Vizualizare Valid Bits: 8× LED-uri verzi
  • Vizualizare Tag Bits: 16× LED-uri galbene (2 biți × 8 linii de cache)
  • Vizualizare date: 1× LED Bar Graph cu 8 segmente
  • Afișaj alfanumeric: 1× Ecran LCD 16×2 cu modul adaptor I2C (PCF8574)
  • Feedback sonor: 1× Buzzer pasiv (comandat prin PWM)
  • Control latență: 1× Potențiometru rotativ 10 kΩ (conectat la ADC)
  • Componente auxiliare: Rezistențe de limitare 220–330 Ω, rezistențe pull-up 4.7 kΩ pentru I2C, condensatori de decuplare, breadboard și fire de conexiune

Schema electrică

Aceasta este schema electrica, insa fara acel LED Bar Graph pentru ca nu era disponibil pe Tinkercad.

Software Design

  • Mediu de dezvoltare: PlatformIO.
  • Biblioteci și resurse folosite: Codul este scris în C, prin accesarea directă a regiștrilor AVR.
  • Algoritmi și structuri implementate: Logica programului este structurată în funcții: decodificarea adresei (Index pe 3 biți, Tag pe 5 biți), căutarea în cache, actualizarea în caz de MISS, clasificarea tipului de MISS și actualizarea afișajelor. Cache-ul este reprezentat printr-o structură cu 8 intrări, fiecare conținând Valid Bit și Tag.
  • Flux de execuție: La pornire, microcontrolerul inițializează toate perifericele (USART, I2C, LCD, shift registere, buzzer, bar graph) și golește cache-ul adica toate Valid Bits pe 0. În bucla principală, programul așteaptă primirea unei adrese de la utilizator prin UART. Când utilizatorul tastează o valoare decimală (0–255) și apasă Enter, se execută următoarea secvență:
    1. Adresa este parsată și validată; valorile invalide sunt respinse cu un mesaj de eroare.
    2. Adresa este descompusă prin operații pe biți: Index = adresa & 0x07, Tag = (adresa » 3) & 0x1F.
    3. Se verifică linia cache indicată de Index: dacă Valid Bit-ul este 0 se generează un Compulsory Miss și linia este populată; dacă Valid Bit-ul este 1 și Tag-urile coincid se înregistrează un HIT; altfel, un Conflict Miss declanșează înlocuirea Tag-ului.
    4. Contorul de HIT-uri și totalul accesărilor sunt actualizate, iar Hit Rate-ul este recalculat ca raport procentual.
    5. Starea cache-ului este reconstruită într-un pattern de 24 biți și transmisă către cele 3 shift registere printr-o singură operație în daisy chain, actualizând simultan toate LED-urile. În paralel, Tag-ul curent este afișat în binar pe LED Bar Graph, iar LCD-ul afișează adresa, decodificarea și statisticile.
    6. Buzzer-ul emite un ton specific tipului de rezultat (HIT scurt și înalt, Compulsory Miss mediu, Conflict Miss grav și prelungit).
    7. După încheierea sunetului, programul revine la așteptarea unei noi adrese.

Bibliografie/Resurse

pm/prj2026/farhad_ali.gul/teodora.lacraru.txt · Last modified: 2026/05/20 15:27 by teodora.lacraru
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0