Differences

This shows you the differences between two versions of the page.

Link to this comparison view

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>​
  
  
ac-is/lab/lab06.1636313280.txt.gz · Last modified: 2021/11/07 21:28 by alexandru.predescu
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0