This shows you the differences between two versions of the page.
|
pm:prj2026:farhad_ali.gul:teodora.lacraru [2026/05/09 17:30] teodora.lacraru [Schema electrică] |
pm:prj2026:farhad_ali.gul:teodora.lacraru [2026/05/20 15:27] (current) teodora.lacraru [Descriere Generală] |
||
|---|---|---|---|
| Line 13: | Line 13: | ||
| ===== Descriere Generală ===== | ===== Descriere Generală ===== | ||
| - | |||
| Sistemul funcționează pe principiul unei bucle de procesare interactive, folosind microcontrolerul ATmega328P ca unitate centrală de control. | 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. | |
| - | * **Input:** Utilizatorul introduce o adresă de memorie (8 biți) prin consola serială (UART) de pe PC. În paralel, un potențiometru conectat la un canal ADC permite ajustarea continuă a latenței simulate a memoriei RAM (între 0 și 4 secunde). | + | * **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. |
| - | * **Procesare și Decodificare:** Microcontrolerul descompune adresa primită în două câmpuri: **Index** (pentru selecția uneia dintre cele 8 linii de cache) și **Tag** (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. |
| - | * **Clasificare:** În cazul unui MISS, sistemul clasifică automat tipul erorii: **Compulsory Miss** (linie goală, prima accesare), **Conflict Miss** (linie ocupată, dar cu Tag diferit) sau **Capacity Miss** (rata de înlocuire foarte mare, setul de lucru depășește cele 8 linii). | + | * **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: |
| - | * **Output și Feedback:** Rezultatul este afișat simultan pe mai multe canale: starea internă a cache-ului (Valid Bit-uri și Tag-uri) este vizualizată printr-o matrice de LED-uri controlată prin shift registere (SPI), datele extrase apar în binar pe un LED Bar Graph, iar adresa solicitată, rezultatul HIT/MISS și statisticile de performanță (Hit Rate) sunt afișate pe un ecran LCD 16×2 (I2C). Un buzzer pasiv oferă feedback sonor diferențiat — ton înalt pentru HIT, ton grav pentru MISS. | + | * Coloana 1 (LED-uri verzi): Valid Bit pentru fiecare dintre cele 8 linii |
| - | * **Statistici în timp real:** După fiecare acces, sistemul recalculează Hit Rate-ul ca raport între accesele de tip HIT și totalul accesărilor, oferind o măsură cantitativă a eficienței cache-ului pentru tipul de adrese introduse de utilizator. | + | * 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. | ||
| {{:pm:prj2026:farhad_ali.gul:schema_bloc.png.jpeg?600|Schema bloc a sistemului}} | {{:pm:prj2026:farhad_ali.gul:schema_bloc.png.jpeg?600|Schema bloc a sistemului}} | ||
| - | |||
| ===== Hardware Design ===== | ===== Hardware Design ===== | ||
| Line 44: | Line 46: | ||
| * **Mediu de dezvoltare:** PlatformIO. | * **Mediu de dezvoltare:** PlatformIO. | ||
| - | * **Biblioteci și resurse folosite:** Configurarea timer-elor pentru PWM, a magistralei SPI pentru shift registere și a magistralei I2C (TWI) pentru LCD se va realiza prin accesarea directă a regiștrilor AVR. Pentru LCD se va folosi o bibliotecă minimală de tip ''LiquidCrystal_I2C''. | + | * **Biblioteci și resurse folosite:** Codul este scris în C, prin accesarea directă a regiștrilor AVR. |
| - | * **Algoritmi și structuri implementate:** Logica principală a programului va fi structurată în jurul unui set de funcții dedicate: decodificarea adresei (extragere Index și Tag), funcția de căutare în cache (lookup), funcția de actualizare a cache-ului în caz de MISS, funcția de clasificare a tipului de MISS și funcția de actualizare a afișajelor (LCD + matrice LED-uri prin SPI). Cache-ul va fi reprezentat intern printr-o structură de date cu 8 intrări, fiecare conținând Valid Bit, Tag și data asociată. | + | * **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ță: | ||
| + | - Adresa este parsată și validată; valorile invalide sunt respinse cu un mesaj de eroare. | ||
| + | - Adresa este descompusă prin operații pe biți: Index = ''adresa & 0x07'', Tag = ''(adresa >> 3) & 0x1F''. | ||
| + | - 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. | ||
| + | - Contorul de HIT-uri și totalul accesărilor sunt actualizate, iar Hit Rate-ul este recalculat ca raport procentual. | ||
| + | - 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. | ||
| + | - Buzzer-ul emite un ton specific tipului de rezultat (HIT scurt și înalt, Compulsory Miss mediu, Conflict Miss grav și prelungit). | ||
| + | - După încheierea sunetului, programul revine la așteptarea unei noi adrese. | ||
| ===== Bibliografie/Resurse ===== | ===== Bibliografie/Resurse ===== | ||