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:22]
alexandru.predescu [Moduri de adresare]
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//​.
-    ​* Semnalele ''​oe''​ și ''​we''​ reprezintă //Output Enable//, respectiv //Write Enable//.  +    * //​Hint:// ​Revedeți [[.:lab05#Depozitarea informației digitale: Registrul| laboratorul ​5]]. 
-      * ''​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. +    * //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.
-      * ''​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 342: 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}}
  
  
-===== Testare =====+/* * 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) =====
  
 Testarea implementării se face pe placa de laborator, scheletul de cod conținând deja o variantă binară a tuturor modulelor necesare pentru functionare. Această variantă binară este înlocuită automat în momentul în care completați conținutul modulelor cerute cu implementarea voastră. Testarea implementării se face pe placa de laborator, scheletul de cod conținând deja o variantă binară a tuturor modulelor necesare pentru functionare. Această variantă binară este înlocuită automat în momentul în care completați conținutul modulelor cerute cu implementarea voastră.
Line 367: 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.1636312975.txt.gz · Last modified: 2021/11/07 21:22 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