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:

  • Starea 1: LED-ul este stins. Automatul așteaptă timp de 1 secundă, după care tranzitează în starea 2.
  • 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!

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 respectiv este stins;
  • T00, T01, …, T14 sunt stările posibile ale LED-urilor;
  • 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).
        t00 *-*-*-*-
        t01 -*-*-*-*
        t02 *-*-*-*-
        t03 -*-*-*-*
        t04 *------*
        t05 -*----*-
        t06 --*--*--
        t07 ---**---
        t08 --*--*--
        t09 -*----*-
        t10 *------*
        t11 -**-*--*
        t12 *---**-*
        t13 *---*-**
        t14 -**-*--*
        mergi la t00

Completați fișierul xdc și încărcați soluția pe FPGA.

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.

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.

  1. În starea inițială mențineți aprinsă culoarea verde.
  2. La apăsarea unui buton, cronometrați un interval de 1 secundă.
  3. După acest interval, schimbați culoarea LED-ului în galben și mențineți-o timp de 1 secundă.
  4. Apoi, modificați culoarea în roșu și mențineți-o timp de 3 secunde.
  5. Reveniți la starea inițială.

Completați fișierul xdc și încărcați soluția pe FPGA.

Având în vedere că nu ați mai lucrat cu define, aveți un exemplu de cum se folosește:

`define DEFINE_EXAMPLE 20
out = `DEFINE_EXAMPLE;

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 Switch debouncing din laborator). În plus, dacă folosiți butonul de CPU Reset, să luați în considerare că funcționează în logică negată.

Bonus (1p) Pornind de la implementarea anterioară, dorim să adăugăm un semafor pentru pietoni, utilizând și al doilea LED RGB de pe FPGA. Funcționarea automatului este descrisă astfel:

  1. Starea inițială – Mașinile au verde, iar pietonii trebuie să aștepte (roșu).
  2. 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.
  3. Avertizarea mașinilor – Mașinile pot trece pe galben timp de 1 secundă, iar pietonii încă așteaptă la roșu.
  4. Trecerea pietonilor – Mașinile se opresc la roșu, iar pietonii primesc verde timp de 3 secunde, permițând traversarea.
  5. 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.
  6. Sistemul revine la starea inițială.

Completați fișierul xdc și încărcați soluția pe FPGA.

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 această secțiune din laboratul de APM. (mic spoiler)

soc/laboratoare/04/todo.txt · Last modified: 2026/03/22 17:11 by robert_fabian.tudor
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