This shows you the differences between two versions of the page.
soc:laboratoare:06 [2025/04/10 14:08] stefan.maruntis [3. Sumatoare] |
soc:laboratoare:06 [2025/04/22 20:34] (current) stefan.maruntis [Exerciții] |
||
---|---|---|---|
Line 69: | Line 69: | ||
Unitatea Aritmetico-Logică este o componentă care se ocupă de aproape toate calculele numerice necesare unui procesor. În ciclul de prelucrare a instrucţiunilor, în diverse etape procesorul are nevoie de rezultatele unor calcule, fie că sunt solicitate de o intrucţiune explicită cum este //add// din limbajul de asamblare, fie dintr-un motiv intern (de exemplu adresa absolută a unei date se calculează în funcţie de //segment// şi //offset//, ceea ce implică nevoia unor calcule). | Unitatea Aritmetico-Logică este o componentă care se ocupă de aproape toate calculele numerice necesare unui procesor. În ciclul de prelucrare a instrucţiunilor, în diverse etape procesorul are nevoie de rezultatele unor calcule, fie că sunt solicitate de o intrucţiune explicită cum este //add// din limbajul de asamblare, fie dintr-un motiv intern (de exemplu adresa absolută a unei date se calculează în funcţie de //segment// şi //offset//, ceea ce implică nevoia unor calcule). | ||
- | O UAL poate fi proiectată să execute, în principiu, orice operație. Totuși, cu cât operațiile devin mai complexe UAL devine mai scumpă, ocupă mai mult loc și disipă mai multă căldură. Operațiile care sunt, în general, suportate de toate UAL sunt: | + | O UAL poate fi proiectată să execute, în principiu, orice operație. Totuși, cu cât operațiile devin mai complexe, UAL devine mai scumpă, ocupă mai mult loc și disipă mai multă căldură. Operațiile care sunt, în general, suportate de toate UAL sunt: |
* Operații logice: AND, OR, NOT, XOR, NOR, NAND, etc. | * Operații logice: AND, OR, NOT, XOR, NOR, NAND, etc. | ||
* Operații de shift: shift stânga, shift dreapta, shift circular, etc. | * Operații de shift: shift stânga, shift dreapta, shift circular, etc. | ||
Line 109: | Line 109: | ||
* **(0.5p)** 3 : ''ADD'' (folosiți ''task2'') | * **(0.5p)** 3 : ''ADD'' (folosiți ''task2'') | ||
* **(0.5p)** 4 : ''SUB'' (folosiți ''task3'') | * **(0.5p)** 4 : ''SUB'' (folosiți ''task3'') | ||
- | |||
- | <hidden> | ||
- | **Bonus:** - Încărcați modulul ''task3.v'' pe placa de dezvoltare din laborator. | ||
- | |||
- | * Switch-urile vor fi folosite pentru a da valoare intrărilor: ''i_w_a'', ''i_w_b'' și ''i_w_op_sel''; | ||
- | * Butoanele vor fi folosite ''pentru i_w_reset''; | ||
- | * Afișajul cu 7 segmente va afișa rezultatul operației în format zecimal (utilizați modulul din display_7_segment_driver.v); | ||
- | * LED-urile din dreptul switch-urilor vor afișa valoarea în format binar a intrărilor: ''i_w_a'', ''i_w_b'' și ''i_w_op_sel''; | ||
- | * Folosiți doar 4 dintre cele 8 cifre de pe afișaj (spre exemplu cele cu anozii AN0-AN3). | ||
- | |||
- | |||
- | - (4p) Implementați un sumator/scăzător pe 8 biți cu ajutorul plăcii de laborator. | ||
- | - Caracteristici: | ||
- | - 2 operanzi pe 8 biţi | ||
- | - Afişare operanzi şi rezultat pe afişajul cu 7 segmente | ||
- | - Afişare progres pe cele 8 LED-uri | ||
- | - Mod de operare: | ||
- | - Preluare operand 1 -> prin apăsarea unui 'push-button' | ||
- | - Preluare operand 2 -> prin apăsarea aceluiaşi 'push-button' | ||
- | * !!! Până la apăsarea butonului, pe afişajul cu 7 segmente va fi afişată valoarea operandului | ||
- | - Afişare: | ||
- | * rezultat -> dacă este ţinut apăsat butonul corespunzător unei operaţii | ||
- | * 'APAS' -> dacă nu este apăsat niciun buton | ||
- | - La apăsarea butonului de reset, circuitul se întoarce la preluarea primului operand | ||
- | * **Citiţi comentariile din modul şi urmăriţi TODO-urile!** | ||
- | </hidden> | ||
===== Resurse ===== | ===== Resurse ===== | ||
* [[https://github.com/cs-pub-ro/SOC/tree/main/lab06|Scheletul de laborator]] | * [[https://github.com/cs-pub-ro/SOC/tree/main/lab06|Scheletul de laborator]] |