Differences

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

Link to this comparison view

soc:laboratoare:04:todo [2024/03/28 11:42]
teodor_stefan.dutu Replace reference to lab03 with reference to lab03bis
soc:laboratoare:04:todo [2026/03/22 17:11] (current)
robert_fabian.tudor
Line 1: Line 1:
    
-**Task 1** (2p + 0.25p + 0.25p) **Implementați un modul** care să aprindă și se stingă un LED la un anumit ​interval de timp. Astfelvom folosi ​un FSM simplu, cu doar două stări. ​După simularea cu succes ​circuitului, **completați** fișierul ''​**xdc**''​ și **încărcați** soluția **pe FPGA**+**Task 1** (2p + 0.25p + 0.25p) **Implementați un modul** care să aprindă și să stingă un LED la un interval ​regulat ​de timp. Pentru a realiza acest lucruveți construi ​un automat finit simplu, cu doar două stări:  
-    *În prima stare, LED-ul va fi stins, se va aștepta un anumit interval de timp (1s), iar apoi trece in starea 2. +    ***Starea 1:** LED-ul este stinsAutomatul așteaptă timp de 1 secundă, după care tranzitează în starea 2. 
-    *Starea a doua, în care va petrece același interval de timp, dar aprins.+    ***Starea 2:** LED-ul este aprins. Automatul ​așteaptă același interval de 1 secundădupă care revine în starea 1. 
 +**Completați** fișierul ''​**xdc**''​ și **încărcați** soluția **pe FPGA**.
 Urmăriți TODO-urile din schelet! Urmăriți TODO-urile din schelet!
  
  
-**Task 2** (2.5p + 0.25p + 0.75p) Chiar dacă a trecut ​Craciunul, acum știm destul de multe pentru a realiza o simplă instalație de pom. Implementați un FSM care să producă ​următoarea ​secvență folosind LED-urile. După simularea cu succes a circuitului,​ **completați** fișierul ''​**xdc**''​ și **încărcați** soluția **pe FPGA**.+**Task 2** (2.5p + 0.25p + 0.75p) Chiar dacă a trecut ​Crăciunul, acum știm destul de multe pentru a realiza o simplă instalație de pom. Implementați un FSM care să producă secvența de mai jos folosind LED-urile. ​
   * "​*"​ înseamnă că LED-ul este aprins;   * "​*"​ înseamnă că LED-ul este aprins;
   * "​-"​ înseamnă că LED-ul respectiv este stins;   * "​-"​ înseamnă că LED-ul respectiv este stins;
   * T00, T01, ..., T14 sunt stările posibile ale LED-urilor;   * T00, T01, ..., T14 sunt stările posibile ale LED-urilor;
-  * Durata tranziției ​de la starea ​Tn la Tn+1 trebuie să fie de secundă. <​code> ​   t00 *-*-*-*-+  * Timpul petrecut ​de automat în fiecare stare (Tntrebuie să fie de secundă, după care se face tranziția la următoarea stare (Tn+1). <​code> ​   t00 *-*-*-*-
     t01 -*-*-*-*     t01 -*-*-*-*
     t02 *-*-*-*-     t02 *-*-*-*-
Line 26: Line 27:
     t14 -**-*--*     t14 -**-*--*
     mergi la t00</​code>​     mergi la t00</​code>​
 +    ​
 +**Completați** fișierul ''​**xdc**''​ și **încărcați** soluția **pe FPGA**.
     ​     ​
 <note tip> **Hint!** \\ **Pentru întârzierea tranziției trebuie să folosiți un timer.** Timer-ul este un circuit simplu care numără într-un contor tranzițiile ceasului. Astfel, pentru cronometrare folosiți frecvența ceasului ca să aflați câte tranziții trebuie numărate. **Apoi, blocați FSM-ul în starea curentă până când contorul ajunge la valoare dorită.** \\ Pentru simulare, va trebui să micșorați intervalul cronometrat.</​note>​ <note tip> **Hint!** \\ **Pentru întârzierea tranziției trebuie să folosiți un timer.** Timer-ul este un circuit simplu care numără într-un contor tranzițiile ceasului. Astfel, pentru cronometrare folosiți frecvența ceasului ca să aflați câte tranziții trebuie numărate. **Apoi, blocați FSM-ul în starea curentă până când contorul ajunge la valoare dorită.** \\ Pentru simulare, va trebui să micșorați intervalul cronometrat.</​note>​
  
-**Task 3** (2.5p + 0.5p + 1p) Implementați un modul care să simuleze comportamentul unui semafor pentru ​pietoni ​controlat prin apăsarea unui buton. ​După simularea cu succes a circuitului, ​**completați** fișierul ''​**xdc**''​ și **încărcați** soluția ​**pe FPGA**+**Task 3** (2.5p + 0.5p + 1p) Implementați un modul care să simuleze comportamentul unui semafor pentru ​mașini, ​controlat prin apăsarea unui buton. ​Pentru acest task vom folosi unul dintre ​**LED-urile RGB** de pe placă. Modul de operare al automatului este prezentat mai jos
-  - În starea inițială ​sunt aprinse primele 4 LED-uri (simulând ​culoarea ​rosie a semaforului)+  - În starea inițială ​mențineți aprinsă ​culoarea ​verde
-  - Când este primit semnalul de la buton, cronometrați un interval de 2 secunde+  - La apăsarea unui buton, cronometrați un interval de 1 secundă
-  - După expirarea celor 2 secundetranziționați în starea următoareunde se aprind celelalte 4 LED-uri. Acestea rămân aprinse pentru încă 2 secunde. +  - După acest intervalschimbați culoarea LED-ului ​în galben și mențineți-o timp de 1 secundă
-  - La expirarea cuantei de timp alocate pentru culoarea verde, se revine ​la starea inițială.+  - Apoimodificați culoarea în roșu și mențineți-o timp de 3 secunde. 
 +  - Reveniți ​la starea inițială
 +**Completați** fișierul ''​**xdc**''​ și **încărcați** soluția **pe FPGA**.
  
 +<note important>​
 +Având în vedere că nu ați mai lucrat cu **define**, aveți un exemplu de cum se folosește:
 +<​code>​
 +`define DEFINE_EXAMPLE 20
 +out = `DEFINE_EXAMPLE;​
 +</​code>​
 +</​note>​
  
-<note important>​Pentru a asigura o funcționare corectă pe un circuit real, trebuie să folosiți în mod normal un debouncer, pe care să îl atașați butonului folosit (vezi secțiunea [[:​soc:​laboratoare:​03bis:​debouncing|Switch debouncing]] din laborator).\\ +<note important>​ 
-**Pentru simulare tratați intrările ​de tip buton ca fiind deja eșantionatedeoarece schimbarea de semnal se produce instantaneu,​ fara niciun fel de zgomot.**+Pentru a asigura o funcționare corectă pe un circuit real, trebuie să folosiți în mod normal un debouncer, pe care să îl atașați butonului folosit (vezi secțiunea [[:​soc:​laboratoare:​03bis:​debouncing|Switch debouncing]] din laborator). ​În plus, dacă folosiți butonul ​de CPU Resetsă luați în considerare că funcționează în logică negată.
 </​note>​ </​note>​
  
  
-**Bonus** (3pConsiderăm ADN-ul unei specii ca fiind o succesiune ​de nucleotideadenină(A)guanină(G), citozină(C) şi timină(T). Implementațun modul care să identifice exemplarele mutante, care au în succesiunea ​de nucleotide secvenţa **GGTC**Trebuie să creaţi un automat Moore care: +**Bonus** (1pPornind de la implementarea anterioară,​ dorim să adăugăm un semafor pentru pietoni, utilizând și al doilea LED RGB de pe FPGA. 
-  - Primeşte ​la fiecare pas câte o nucleotidă;​ +Funcționarea automatului este descrisă astfel:\\ 
-  - Dacă identifică ​un exemplar mutantse blochează într-o stare rezervată. +  - Starea inițială – Mașinile au verdeiar pietonii trebuie să aștepte ​(roșu)
-Porturi modul: +  - Apăsarea butonului – Când un pieton apasă butonul, se inițiază un temporizator de 1 secundă, după care mașinile intră ​în faza de avertizare. 
-    intrări: clock, reset (pentru posibilitatea introducerii altui ADN) şcele 4 nucleotide; (pentru nucleotide putem folosi butoane, adică porturi pe un 1 bit) +  - Avertizarea mașinilor – Mașinile pot trece pe galben timp de 1 secundă, iar pietonii încă așteaptă la roșu. 
-    ​ieșire: mutant (un LED care, dacă este aprins, semnalează detecţia unui mutant).+  - Trecerea pietonilor – Mașinile se opresc ​la roșu, iar pietonii primesc verde timp de 3 secunde, permițând traversarea. 
 +  - Avertizare pietoni – Pietonii primesc ​un semnal intermitent (verde/​stinsde patru ori la intervale de 0.5 secunde), indicând sfârșitul timpului de traversare. 
 +  ​Sistemul revine la starea inițială. 
 + 
 +**Completați** fișierul ''​**xdc**''​ și **încărcați** soluția **pe FPGA**.
  
 <note tip> <note tip>
-FSM-ul trebuie ​să fie capabil să identifice pattern-ul menționat și să trateze corect inclusiv input-urile eronate. +Pentru ca LED-urile RGB să nu funcționeze la intensitate maximă, am folosit o metodă numită PWM (Pulse-Width Modulation). Pentru cei interesați, vă recomandăm ​să citiți [[https://​ocw.cs.pub.ro/​courses/​apm/​laboratoare/​07#​:~:​text=Edit-,PWM,-Pulse%2Dwidth%20modulation|această]] secțiune din laboratul de APM. (mic spoiler)
-(Spre exemplu"​ATCG"​ este greșit"​AAAAAAA"​ este greșit"​**GGTC**"​ este corect, "​ATC**GGTC**"​ este corect, "​GGG**GGTC**"​ este corect, "​**GGTC**A"​ este corect)+
 </​note>​ </​note>​
  
-**Completați** fișierul ''​**xdc**''​ pentru modulul de detecție al mutanților (**Task 4**) și **încărcați** soluția **pe FPGA**. 
-    * intrări: un switch pentru resetare şi 4 push-buttons pentru nucleotide; 
-    * ieșiri: un led care se aprinde cand se detecteaza un mutant. 
soc/laboratoare/04/todo.1711618955.txt.gz · Last modified: 2024/03/28 11:42 by teodor_stefan.dutu
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