This shows you the differences between two versions of the page.
ac-is:lab:lab07 [2021/10/03 14:07] eduard.ciurezu updated lab7 |
ac-is:lab:lab07 [2023/12/03 12:09] (current) ioana.dinu0810 [Resurse] |
||
---|---|---|---|
Line 1: | Line 1: | ||
====== Laboratorul 7 - Calculatorul Didactic: Unitatea Aritmetică-Logică ====== | ====== Laboratorul 7 - Calculatorul Didactic: Unitatea Aritmetică-Logică ====== | ||
- | Pagina va fi disponibilă începând cu data de **13.11.2021**. | ||
- | |||
- | /* | ||
În cadrul acestui laborator se continuă implementarea în Verilog a procesorului didactic prezentat la {{..:resurse:ac5.pdf| curs}} și în [[.:lab06| laboratorul 6]]. | În cadrul acestui laborator se continuă implementarea în Verilog a procesorului didactic prezentat la {{..:resurse:ac5.pdf| curs}} și în [[.:lab06| laboratorul 6]]. | ||
Line 27: | Line 24: | ||
- | * ''T/C'' //(transport, eng: carry)//: Este setat (poziţionat în "1" ) dacă în urma unei adunări rezultă un transport dinspre rangul cel mai semnificativ, altfel ''T'' este şters (trecut în "0"). Transportul ''T'' este setat dacă în urma unei scăderi rezultă un împrumut în cel mai semnificativ bit al rezultatului, altfel este şters. Poate fi interpretat ca depăşire în instrucțiunile cu numere întregi fără semn. Poate fi utilizat în instrucțiunile ''ADC'' şi ''SBB'' pentru a efectua operaţii aritmetice în precizie multiplă. Poate fi testat cu instrucțiuni de salt condiţionat. | + | * ''T/C'' //(transport, eng: carry)//: Este setat (poziţionat în "1" ) dacă în urma unei adunări rezultă un transport dinspre rangul cel mai semnificativ, altfel ''T'' este şters (trecut în "0"). |
+ | * Este setat dacă în urma unei scăderi rezultă un împrumut în cel mai semnificativ bit al rezultatului, altfel este şters. | ||
+ | * Poate fi interpretat ca depăşire în instrucțiunile cu numere întregi fără semn. Poate fi utilizat în instrucțiunile ''ADC'' şi ''SBB'' pentru a efectua operaţii aritmetice în precizie multiplă. Poate fi testat cu instrucțiuni de salt condiţionat. | ||
* ''S'' //(semn)//: | * ''S'' //(semn)//: | ||
* La execuţia operațiilor aritmetice şi logice, indicatorul S este setat la valoarea bitului cel mai semnificativ al rezultatului (bitul de semn). | * La execuţia operațiilor aritmetice şi logice, indicatorul S este setat la valoarea bitului cel mai semnificativ al rezultatului (bitul de semn). | ||
Line 106: | Line 105: | ||
O shiftare logică nu ține cont de semnul operandului. În cazul shiftării logice se ține cont doar de ordinea biților, iar pozițiile care rămân libere sunt umplute cu zerouri. | O shiftare logică nu ține cont de semnul operandului. În cazul shiftării logice se ține cont doar de ordinea biților, iar pozițiile care rămân libere sunt umplute cu zerouri. | ||
- | În imaginile de mai jos se poate observa modul de execuție al shiftărilor logice. | + | În imaginile de mai jos se poate observa modul de execuție a shiftărilor logice. |
- | {{ .:lab07:shl.png?200 | Shiftare logică/aritmetică la stânga}} | + | {{ .:lab07:shl.png?200 | Shiftare logică la stânga}} |
- | <html><p align="center">Shiftare logică/aritmetică la stânga</p></html> | + | <html><p align="center">Shiftare logică la stânga</p></html> |
- | {{ .:lab07:shr.png?200 | Shiftare logică/aritmetică la dreapta}} | + | {{ .:lab07:shr.png?200 | Shiftare logică la dreapta}} |
- | <html><p align="center">Shiftare logică/aritmetică la dreapta</p></html> | + | <html><p align="center">Shiftare logică la dreapta</p></html> |
Iar în figurile de mai jos găsiți un exemplu practic de efectuare a shiftărilor logice spre stânga (''SHL'') și spre dreapta (''SHR''). | Iar în figurile de mai jos găsiți un exemplu practic de efectuare a shiftărilor logice spre stânga (''SHL'') și spre dreapta (''SHR''). | ||
- | {{ .:lab07:shl_sal_example.png?200 | Exemplu de shiftare logică/aritmetică la stânga}} | + | {{ .:lab07:shl_sal_example.png?200 | Exemplu de shiftare logică la stânga}} |
- | <html><p align="center">Exemplu de shiftare logică/aritmetică la stânga</p></html> | + | <html><p align="center">Exemplu de shiftare logică la stânga</p></html> |
- | {{ .:lab07:shr_example.png?200 | Exemplu de shiftare logică/aritmetică la dreapta}} | + | {{ .:lab07:shr_example.png?200 | Exemplu de shiftare logică la dreapta}} |
- | <html><p align="center">Exemplu de shiftare logică/aritmetică la dreapta</p></html> | + | <html><p align="center">Exemplu de shiftare logică la dreapta</p></html> |
În Verilog, operatorii de shiftare logică sunt %%''<<''%% și %%''>>''%%. | În Verilog, operatorii de shiftare logică sunt %%''<<''%% și %%''>>''%%. | ||
Line 131: | Line 130: | ||
{{ .:lab07:sar.png?200 | Exemplu de shiftare aritmetică la dreapta}} | {{ .:lab07:sar.png?200 | Exemplu de shiftare aritmetică la dreapta}} | ||
+ | <html><p align="center">Exemplu de shiftare aritmetică la dreapta</p></html> | ||
+ | |||
+ | {{ .:lab07:sar_2.png?200 | Exemplu de shiftare aritmetică la dreapta}} | ||
<html><p align="center">Exemplu de shiftare aritmetică la dreapta</p></html> | <html><p align="center">Exemplu de shiftare aritmetică la dreapta</p></html> | ||
Line 185: | Line 187: | ||
- **(2p)** Implementați în unitatea de comandă faza de trecere la instrucțiunea următoare, prin incrementarea Contorului Program. Folosiți-vă de operația implementată la exercițiul anterior. | - **(2p)** Implementați în unitatea de comandă faza de trecere la instrucțiunea următoare, prin incrementarea Contorului Program. Folosiți-vă de operația implementată la exercițiul anterior. | ||
* Hint: pentru realizarea de către UC a unui transfer de date între resursele calculatorului revedeți soluția laboratorului anterior. | * Hint: pentru realizarea de către UC a unui transfer de date între resursele calculatorului revedeți soluția laboratorului anterior. | ||
- | - **(4x1.5p)** Implementați următoarele operații în cadrul unității aritmetice-logice. :!: **Nu uitați indicatorii de condiții!**. | + | - **(6x1.5p)** Implementați următoarele operații în cadrul unității aritmetice-logice. :!: **Nu uitați indicatorii de condiții!**. |
- //SBB1// (eng. //SuBstract with Borrow//; calculează //in1// - //in2// - //carry//) | - //SBB1// (eng. //SuBstract with Borrow//; calculează //in1// - //in2// - //carry//) | ||
- //NOT// | - //NOT// | ||
+ | - //OR// | ||
- //XOR// (eng. //eXclusive OR//) | - //XOR// (eng. //eXclusive OR//) | ||
+ | - //SHL// (eng. //Shift Left//) | ||
- //SAR// (eng. //Shift Arithmetic Right//) | - //SAR// (eng. //Shift Arithmetic Right//) | ||
* Implementarea operației fără indicatorii de condiții oferă un punctaj de 50%. | * Implementarea operației fără indicatorii de condiții oferă un punctaj de 50%. | ||
Line 199: | Line 203: | ||
* {{.:lab06:sol:lab7_skel.zip|Schelet de cod}} | * {{.:lab06:sol:lab7_skel.zip|Schelet de cod}} | ||
- | * {{.:lab07:sol:lab7_sol.zip|Soluție laborator}} (disponibilă începând cu 16.11.2019) | ||
* <html><a class="media mediafile mf_pdf" href="https://ocw.cs.pub.ro/courses/ac-is/lab/lab07?do=export_pdf">PDF laborator</a></html> | * <html><a class="media mediafile mf_pdf" href="https://ocw.cs.pub.ro/courses/ac-is/lab/lab07?do=export_pdf">PDF laborator</a></html> | ||
* {{..:resurse:cheat-sheet.pdf|Cheat-sheet calculator didactic}} | * {{..:resurse:cheat-sheet.pdf|Cheat-sheet calculator didactic}} | ||
* {{..:resurse:ac5.pdf|Arhitectura calculatorului didactic}} | * {{..:resurse:ac5.pdf|Arhitectura calculatorului didactic}} | ||
+ | * {{.:lab07:sol:lab8_skel.zip|Soluție laborator}} | ||
- | <ifauth @user> | + | <ifauth @ac-is> |
---- | ---- | ||
+ | * {{.:lab07:sol:lab8_skel.zip|Soluție laborator}} | ||
* [[ac-is:internal:guidelines|Ghid asistent]] | * [[ac-is:internal:guidelines|Ghid asistent]] | ||
</ifauth> | </ifauth> | ||
- | */ | + |