This shows you the differences between two versions of the page.
ac-is:lab:lab07 [2021/09/27 16:37] 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ă ====== | ||
- | |||
Î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 25: | 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 104: | 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 132: | ||
<html><p align="center">Exemplu de shiftare aritmetică la dreapta</p></html> | <html><p align="center">Exemplu de shiftare aritmetică la dreapta</p></html> | ||
- | În Verilog, operatorii de shiftare aritmetică sunt %%''<<<''%% și %%''>>>''%%. :!: Aceștia au efectul scontat doar dacă variabila a fost declarată ''signed'' (ex: ''reg signed [15:0] a;''). | + | {{ .:lab07:sar_2.png?200 | Exemplu de shiftare aritmetică la dreapta}} |
+ | <html><p align="center">Exemplu de shiftare aritmetică la dreapta</p></html> | ||
+ | |||
+ | În Verilog, operatorii de shiftare aritmetică sunt %%''<<<''%% și %%''>>>''%%. | ||
+ | |||
+ | :!: Aceștia au efectul scontat doar dacă variabila a fost declarată ''signed'' (ex: ''reg signed [15:0] a;''). | ||
<note important>Shiftarea logică spre stânga (''SHL'') și shiftarea aritmetică spre stânga (''SAL'') se efectuează în același mod. Se păstrează, însă, ambele mnemonici (''SHL'' / ''SAL'') pentru a se putea păstra contextul folosirii acestora, logic sau aritmetic.</note> | <note important>Shiftarea logică spre stânga (''SHL'') și shiftarea aritmetică spre stânga (''SAL'') se efectuează în același mod. Se păstrează, însă, ambele mnemonici (''SHL'' / ''SAL'') pentru a se putea păstra contextul folosirii acestora, logic sau aritmetic.</note> | ||
Line 178: | Line 184: | ||
- **(2p)** Implementați operația //ADC// (eng. //ADd with Carry//) în cadrul unității aritmetice-logice. :!: **Nu uitați indicatorii de condiții!**. | - **(2p)** Implementați operația //ADC// (eng. //ADd with Carry//) în cadrul unității aritmetice-logice. :!: **Nu uitați indicatorii de condiții!**. | ||
* 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%. | ||
- | * Hint: descrierea indicatorilor se găsește în tabelul de la pag. 9 din {{..:resurse:ac5.pdf|curs}} sau în [[.:lab07#descrierea-detaliata-a-indicatorilor-de-conditii|textul]] laboratorului. | + | * Hint: descrierea indicatorilor se găsește în tabelul de la pag. 9 din {{..:resurse:ac5.pdf|curs}} sau în [[.:lab07#Descrierea detaliată a indicatorilor de condiții|textul laboratorului]]. |
- **(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%. | ||
* Demonstrarea funcționării corecte pentru acordarea punctajului se face prin crearea unui fișier de test pentru modulul ''alu'' asemănător [[..:tutoriale:2-ise-simulare| tutorialului]]. | * Demonstrarea funcționării corecte pentru acordarea punctajului se face prin crearea unui fișier de test pentru modulul ''alu'' asemănător [[..:tutoriale:2-ise-simulare| tutorialului]]. | ||
- | * Hint: descrierea indicatorilor pentru fiecare operație se găsește în tabelul de la pag. 9 și descrierile de la pag. 10 și 11 din {{..:resurse:ac5.pdf|curs}} sau în [[.:lab07#descrierea-detaliata-a-indicatorilor-de-conditii|textul]] [[.:lab07#descriere-operatii|laboratorului]]. | + | * Hint: descrierea indicatorilor pentru fiecare operație se găsește în tabelul de la pag. 9 și descrierile de la pag. 10 și 11 din {{..:resurse:ac5.pdf|curs}} sau în [[.:lab07#Descrierea detaliată a indicatorilor de condiții|textul laboratorului]]. |
Line 195: | 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="/ac/wiki/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> |
---- | ---- | ||
- | * [[:internal:alu|Ghid asistent]] | + | * {{.:lab07:sol:lab8_skel.zip|Soluție laborator}} |
+ | * [[ac-is:internal:guidelines|Ghid asistent]] | ||
</ifauth> | </ifauth> | ||
+ |