This shows you the differences between two versions of the page.
ac-is:lab:lab06 [2021/11/07 21:28] alexandru.predescu [Exerciții] |
ac-is:lab:lab06 [2023/11/25 19:33] (current) teodor.dicu [Resurse] |
||
---|---|---|---|
Line 123: | Line 123: | ||
După cum se poate observa, cea de-a doua operație aritmetică este ADC, adică adunare cu transport (carry). Semnificația este următoarea: dacă de la operația anterioară de adunare a apărut transport, acest transport va trebui propagat în octeții superiori. Astfel, operația ADD, în cazul în care a apărut transport, setează bitul T din registrul IND. Operația ADC realizează suma între operanzi, dar include în calcul și acest bit de transport. | După cum se poate observa, cea de-a doua operație aritmetică este ADC, adică adunare cu transport (carry). Semnificația este următoarea: dacă de la operația anterioară de adunare a apărut transport, acest transport va trebui propagat în octeții superiori. Astfel, operația ADD, în cazul în care a apărut transport, setează bitul T din registrul IND. Operația ADC realizează suma între operanzi, dar include în calcul și acest bit de transport. | ||
- | Un alt exemplu este saltul condiționat. O instrucțiune de tip «if (a=2)» se va implementa astfel: | + | Un alt exemplu este saltul condiționat. O instrucțiune de tip «if (a==2)» se va implementa astfel: |
<code asm> | <code asm> | ||
CMP RA,2 | CMP RA,2 | ||
Line 327: | Line 327: | ||
- **(1p)** Explicați conținutul fișierului //calc_didactic/calc_didactic.v// corelându-l cu schema bloc a calculatorului didactic din secțiunea [[lab06#Resursele calculatorului didactic|Resursele calculatorului didactic]]. Rulați proiectul pe placa de laborator și urmăriți execuția primei instrucțiuni. | - **(1p)** Explicați conținutul fișierului //calc_didactic/calc_didactic.v// corelându-l cu schema bloc a calculatorului didactic din secțiunea [[lab06#Resursele calculatorului didactic|Resursele calculatorului didactic]]. Rulați proiectul pe placa de laborator și urmăriți execuția primei instrucțiuni. | ||
- | * //Hint:// Citiți secțiunea [[#testare]] pentru informații despre testarea calculatorului didactic pe placa de laborator. | + | * //Hint:// Citiți secțiunea [[#testare]] (N/A) pentru informații despre testarea calculatorului didactic pe placa de laborator. |
- **(3p)** Implementați modulul //register// pornind de la declarația din fișierul //calc_didactic/register.v//. | - **(3p)** Implementați modulul //register// pornind de la declarația din fișierul //calc_didactic/register.v//. | ||
* //Hint:// Revedeți [[.:lab05#Depozitarea informației digitale: Registrul| laboratorul 5]]. | * //Hint:// Revedeți [[.:lab05#Depozitarea informației digitale: Registrul| laboratorul 5]]. | ||
- | /* * Semnalele ''oe'' și ''we'' reprezintă //Output Enable//, respectiv //Write Enable//. | + | * //Hint:// Pentru testarea pe placă (N/A) revedeţi [[..:tutoriale:5-ise-programare| tutorialul]] de programare. Asignarea pinilor I/O este deja realizată în fișierul .ucf din schelet. |
- | * ''oe'' controleaza ieșirea registrului. Când ''oe'' este //high// ieșirea este activă având valoarea memorată de registru. Când ''oe'' este //low// ieșirea va fi 0. :!: Acest semnal trebuie să fie **asincron**: modificarea lui va avea efect imediat asupra ieșirii și nu se va aștepta tranziția semnalului de ceas. | + | |
- | * ''we'' controlează scrierea în registru. Când ''we'' este //high// registrul va memora valoarea aflată în semnalul de intrare. Când ''we'' este //low// valoarea registrului nu se va modifica, ignorând practic semnalul de intrare. :!: Acest semnal trebuie să fie **sincron**: modificarea valorii memorate de registru se face doar în momentul tranziției semnalului de ceas. | + | |
- | * Semnalul ''disp_out'' este folosit pentru afișare/debugging pe display, iar valoarea acestuia trebuie să fie cea memorată de registru în momentul curent. În mod normal acest semnal nu este prezent într-un calculator. :!: Acest semnal **nu trebuie** să fie afectat de ''oe'', valoarea disponibilă pe ''disp_out'' fiind în orice moment egală cu valoarea memorată de registru. | + | |
- | * Semnalul de reset ''rst'' este activ pe //high// (1). | + | |
- | * //Hint:// Puteți folosi operatorul condiţional (revedeţi [[.:lab02#operatori| laboratorul 2]]) | + | |
- | * //Hint:// Pentru testarea pe placă revedeţi [[..:tutoriale:5-ise-programare| tutorialul]] de programare. Asignarea pinilor I/O este deja realizată în fișierul .ucf din schelet.*/ | + | |
- **(3p)** Implementați modulul //registers//, care reprezintă bancul celor 8 registre generale, pornind de la declarația din fișierul //calc_didactic/registers.v//. | - **(3p)** Implementați modulul //registers//, care reprezintă bancul celor 8 registre generale, pornind de la declarația din fișierul //calc_didactic/registers.v//. | ||
* Semnalul ''addr'' identifică registrul selectat (dintre cele 8) pentru citire/scriere. Corespondența dintre valoarea lui ''addr'' și registrul selectat este dată de prima și, respectiv ultima coloană a celui de-al doilea tabel din {{..:resurse:cheat-sheet.pdf| cheat-sheet}}. | * Semnalul ''addr'' identifică registrul selectat (dintre cele 8) pentru citire/scriere. Corespondența dintre valoarea lui ''addr'' și registrul selectat este dată de prima și, respectiv ultima coloană a celui de-al doilea tabel din {{..:resurse:cheat-sheet.pdf| cheat-sheet}}. | ||
Line 343: | Line 337: | ||
- **(3p)** Implementați în unitatea de comandă etapa de //fetch// a execuției unei instrucțiuni. | - **(3p)** Implementați în unitatea de comandă etapa de //fetch// a execuției unei instrucțiuni. | ||
+ | {{ :ac-is:lab:lab06:fetch.png?200 | Diagrama de stări}} | ||
+ | |||
+ | /* * Semnalele ''oe'' și ''we'' reprezintă //Output Enable//, respectiv //Write Enable//. | ||
+ | * ''oe'' controleaza ieșirea registrului. Când ''oe'' este //high// ieșirea este activă având valoarea memorată de registru. Când ''oe'' este //low// ieșirea va fi 0. :!: Acest semnal trebuie să fie **asincron**: modificarea lui va avea efect imediat asupra ieșirii și nu se va aștepta tranziția semnalului de ceas. | ||
+ | * ''we'' controlează scrierea în registru. Când ''we'' este //high// registrul va memora valoarea aflată în semnalul de intrare. Când ''we'' este //low// valoarea registrului nu se va modifica, ignorând practic semnalul de intrare. :!: Acest semnal trebuie să fie **sincron**: modificarea valorii memorate de registru se face doar în momentul tranziției semnalului de ceas. | ||
+ | * Semnalul ''disp_out'' este folosit pentru afișare/debugging pe display, iar valoarea acestuia trebuie să fie cea memorată de registru în momentul curent. În mod normal acest semnal nu este prezent într-un calculator. :!: Acest semnal **nu trebuie** să fie afectat de ''oe'', valoarea disponibilă pe ''disp_out'' fiind în orice moment egală cu valoarea memorată de registru. | ||
+ | * Semnalul de reset ''rst'' este activ pe //high// (1). | ||
+ | * //Hint:// Puteți folosi operatorul condiţional (revedeţi [[.:lab02#operatori| laboratorul 2]]) | ||
+ | */ | ||
===== Testare (N/A) ===== | ===== Testare (N/A) ===== | ||
Line 368: | Line 371: | ||
===== Resurse ===== | ===== Resurse ===== | ||
* {{.:lab06:lab6_skel.zip|Schelet de cod}} | * {{.:lab06:lab6_skel.zip|Schelet de cod}} | ||
- | * {{.:lab06:sol:lab6_sol.zip|Soluție laborator}} (disponibilă începând cu 09.11.2019) | ||
* <html><a class="media mediafile mf_pdf" href="/ac/wiki/lab/lab06?do=export_pdf">PDF laborator</a></html> | * <html><a class="media mediafile mf_pdf" href="/ac/wiki/lab/lab06?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}} | ||
- | |||
- | |||
- | ===== Resurse ===== | ||
* <html><a class="media mediafile mf_pdf" href="https://ocw.cs.pub.ro/courses/ac-is/lab/lab06?do=export_pdf">PDF laborator</a></html> | * <html><a class="media mediafile mf_pdf" href="https://ocw.cs.pub.ro/courses/ac-is/lab/lab06?do=export_pdf">PDF laborator</a></html> | ||
+ | * {{.:lab06:sol:lab6_sol.zip|Soluție laborator}} | ||
- | + | <ifauth @ac-is> | |
- | <ifauth @user> | + | |
---- | ---- | ||
+ | * {{.:lab06:sol:lab6_sol.zip|Soluție laborator}} | ||
* [[ac-is:internal:guidelines|Ghid asistent]] | * [[ac-is:internal:guidelines|Ghid asistent]] | ||
</ifauth> | </ifauth> | ||