This shows you the differences between two versions of the page.
|
soc:laboratoare:04:todo [2025/03/25 19:33] horia.moroianu3101 |
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 să stingă un LED la un anumit interval de timp. Astfel, vom folosi un FSM simplu, cu doar două stări. **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 lucru, veț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 stins. Automatul 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. **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 1 secundă. <code> t00 *-*-*-*- | + | * Timpul petrecut de automat în fiecare stare (Tn) trebuie să fie de 1 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. **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ă mențineți aprinsă culoarea verde. | - În starea inițială mențineți aprinsă culoarea verde. | ||
| - La apăsarea unui buton, cronometrați un interval de 1 secundă. | - La apăsarea unui buton, cronometrați un interval de 1 secundă. | ||
| Line 35: | Line 38: | ||
| - Apoi, modificați culoarea în roșu și mențineți-o timp de 3 secunde. | - Apoi, modificați culoarea în roșu și mențineți-o timp de 3 secunde. | ||
| - Reveniți la starea inițială. | - Reveniți la starea inițială. | ||
| + | **Completați** fișierul ''**xdc**'' și **încărcați** soluția **pe FPGA**. | ||
| - | + | <note important> | |
| - | <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).\\ | + | |
| - | **Pentru simulare tratați intrările de tip buton ca fiind deja eșantionate, deoarece schimbarea de semnal se produce instantaneu, fara niciun fel de zgomot.** | + | |
| Având în vedere că nu ați mai lucrat cu **define**, aveți un exemplu de cum se folosește: | Având în vedere că nu ați mai lucrat cu **define**, aveți un exemplu de cum se folosește: | ||
| <code> | <code> | ||
| Line 45: | Line 46: | ||
| out = `DEFINE_EXAMPLE; | out = `DEFINE_EXAMPLE; | ||
| </code> | </code> | ||
| + | </note> | ||
| - | În plus, dacă folosiți butonul de CPU Reset, să luați în considerare că funcționează în logică negată. | + | <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). În plus, dacă folosiți butonul de CPU Reset, să luați în considerare că funcționează în logică negată. | ||
| </note> | </note> | ||
| Line 55: | Line 57: | ||
| - Starea inițială – Mașinile au verde, iar pietonii trebuie să aștepte (roșu). | - Starea inițială – Mașinile au verde, iar pietonii trebuie să aștepte (roșu). | ||
| - 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. | - 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. | ||
| - | - Avertizarea mașinilor – Mașinile pot trec pe galben timp de 1 secundă, iar pietonii rămân pe roșu. | + | - Avertizarea mașinilor – Mașinile pot trece pe galben timp de 1 secundă, iar pietonii încă așteaptă la roșu. |
| - Trecerea pietonilor – Mașinile se opresc la roșu, iar pietonii primesc verde timp de 3 secunde, permițând traversarea. | - 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/stins, de patru ori la intervale de 0.5 secunde), indicând sfârșitul timpului de traversare. | - Avertizare pietoni – Pietonii primesc un semnal intermitent (verde/stins, de patru ori la intervale de 0.5 secunde), indicând sfârșitul timpului de traversare. | ||
| - Sistemul revine la starea inițială. | - Sistemul revine la starea inițială. | ||
| - | **Completați** fișierul ''**xdc**'' pentru modul și încărcați pe FPGA. | + | **Completați** fișierul ''**xdc**'' și **încărcați** soluția **pe FPGA**. |
| <note tip> | <note tip> | ||
| - | Pentru ca LED-ul 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) | + | 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) |
| </note> | </note> | ||