Sunteți pe pagina 1din 5

Teme de proiect

1. Controllere pt transfer de date pe SPI, UART, I2C, etc.


- o interfata master pe care se fac WRs/RDs catre controller, se acceseaza
registrii/fifo/memorii interne: req, rdwr, ack, addr, wdata, rdata, dvalid
- controllerul contine: registri de configurare (configurarea protocolului de transfer),
registri de status, registri de date, FIFO-uri pt tx/rx
- semnale de iesire de tip intrerupere, pulse: tx_done, rx_done
- semnale de iesire de status, level: tx_full, rx_full
- block-ul de cntrl care modeleaza protocolul, FSM
- interfata de transfer pe protocolul standard: SPI, I2C, UART, altele
-SPI/UART/I2C: protocoale standard, pe net se gaseste descrierea protocoalelor
- req/ack/data: masterul ridica req odata cu punerea datei, DUTul raspunde
cu ack cand a luat data, masterul isi coboara req cand vede ack
- req, rdwr, ack, addr, wdata, rdata, dvalid: aproape la fel ca cel de
sus, doar ca aici avem si addr, orientat pe tranzactii de RD/WR
- FIFO: e un block generic pe care multe echipe il vor implementa, il
putem discuta chiar la laborator
- Arbiter: de asemenea
- FSM: de asemenea

2. Controllere VGA, P2S, etc

3. Switch
4. Router
- un block care routeaza date/bytes de la 4 porturi de intrare (port_in) la 4 porturi
de iesire (port_out)
- port_in[10:0] e structurat in: port_req (port_in[10], activ cand data este valida pe
intrare), port_id (port_in[9:8], destinatia portului de iesire) si port_data
(port_in[7:0], payload data)
- port_in_full: este cate o iesire pe 1 bit pt fiecare port_in care specifica cand
routerul are disponibilitate de a primi date
- port_out[10:0] e structurat in: port_req (port_out[10], activ cand data este valida
pe iesire), port_id (port_out[9:8], portului de intrare de unde a fost routat) si
port_data (port_out[7:0], payload data)
- ca sugestie de arhitectura circuitul poate contine FIFOuri pt porturile de intrare,
FIFOuri pt porturile de iesire, Arbiter-e pt selectarea datelor
- exemplu pt parcursul unei date care ajunge la Router: stocata in FIFOul de
intrare asociat, apoi arbitrata/routat-a catre FIFOul de iesire (in functie de IDul din
header, IDul destinatie din header va fi schimbat in IDul sursa)
- la intrare IDul reprezinta destinatia portului de iesire catre care o data este
trimisa, la iesire IDul reprezinta sursa portului de intrare de la care data provine

5. BCD2Segments converter:
- un converter care sa preia date/numere, de exemplu...de la 4 clienti, sa le stocheze in
buffers/FIFO, fiecare client cu FIFOul lui
- 4 clienti de intrare cu interfete de genul: req, ack, data_in[15:0]
- datele/numerele din FIFOs sa fie luate de catre un arbiter, apoi se extrag cifrele
numarului, apoi cifrele se convertesc in coduri de 7Segments si puse pe iesire, tinute
acolo un timp (specificat de o intrare
timer_in)
- iesirea converter: vld_out (activ cat timp avem date valide pe iesire),
4 X data_out[7:0] (cate o data_out pt fiecare cifra a numarului convertit)
6. Sistem transfer date full-duplex
Module componente:
● (1) Buffer de date:
- o memorie dual port (2RW - fiecare port permite doar read sau doar write);
1KByte organizat ca si 1024x8
- un port de scris/citit folosit de clientul de intrare
- un port de scris/citit folosit de cei doi clienți de iesire
- bufferul generează si următoarele indicații de status: full/empty/used words,
eroare dacă scriem cand e full sau citim cand e empty
● (2) Banc de registrii :
- utilizează protocolul APB pentru a scrie/citi regiștrii
- registrii RO pentru buffer: full, empty, used words, eroare (write cand e full, read
cand e empty)
- registrii RW pentru clientul de intrare: start address; transfer length; start
processing (genereaza un puls);
- registrii RO pentru clientul de intrare: transfer done;
- registrii RW pentru clientul de iesire (x2 sunt doi clienti): transfer length; start
processing (genereaza un puls);
- registrii RO pentru clientul de iesire (x2 sunt doi clienti): transfer done;
● (3) Client de intrare :
- utilizează protocolul valid/ready + date de scriere + date de citire + tipul
transferului (citire/scriere)
- pana pulsul de start processing nu este primit de la banc-ul de registrii, ready
este resetat (0);
- in timpul unui transfer write, ready este tot timpul setat (1)
- in timpul unui transfer read, ready trebuie sa fie setat doar in momenul in care
data citita este disponibila de la data buffer
- modulul primeste de la bancul de registrii un puls de start processing
- modulul primeste de la bancul de registrii adresa de start (locatia din buffer de
unde sa inceapa scrierea/citirea) + lungimea transferului (cate locatii se citesc/scriu)
- modulul face accese de citire/scriere spre data buffer - interfata clasica de
access la memorie (addr, rw, cen, wrdata, rdata)
- cand toate datele din transfer au fost citite/scrise, modulul aserteaza un puls de
transfer done;
● (4) Client de iesire:
- utilizează protocolul request acknowledge + adresa + date de scriere + date de
citire + tipul transferului (citire/scriere)
- pana pulsul de start processing nu este primit de la banc-ul de registrii,
acknowledge-ul ramane resetat (0);
- in timpul unui transfer, acknowledge este controlat de accessul la data buffer -
arbitrul va hotara cine are access la memorie
- modulul primește de la bancul de regiștri un puls de start processing
- modulul primește de la bancul de regiștri lungimea transferului (cate locații se
citesc/scriu)
- modulul face accese de citire scriere spre arbitru - protocolul este valid/ready
- cand toate datele din transfer au fost citite/scrise, modulul aserteaza un puls de
transfer done;
● (5) Arbitru valid/ready
- modulul primește accese de citire/scriere de la cei doi clienți de ieșire
(protocolul fiind valid/ready)
- modulul arbitreaza cei doi clienți folosind fie Round Robin sau Weighted Round
Robin
- modulul converteste cererea de la castigatorul arbitrarii in transfer spre data
buffer - interfața clasică de access la memorie (addr, rw, cen, wrdata, rdata)

7. FIFO cu threshold configurabil


- proiectarea unei memorii de tip FIFO pt stocarea de date pe 8/16/32 biti
- o interfata de scriere/write: wr_req, data_in, fifo_full
- o interfata de citire/read: rd_req, data_out, fifo_empty
- pt o complexitate mai ridicata: wr_clk diferit de rd_clk (FIFO asincron)
- o intrare fifo_depth care specifica adancimea FIFOului
- modulul sa aiba protectie HW pt cazurile: scriere cand FIFO e FULL, citire cand
FIFO este EMPTY

8. Programmable Counter
- o interfata care sa scrie/citeasca niste registri care sa comande un counter
- interfata de acces registri: req, rdwr, ack, addr, wdata, rdata, dvalid
- registru de control, exemplu de campuri: counter_enable, counter_direction,
counter_clear, counter_load, etc
- registru pt incarcarea counterului: counter_data
- registru de status, care da valoarea curenta a counterului: counter_out
- eventual suport pt intrerupere: o iesire de intrerupere - counter_intr_req, un bit de
control - counter_intrp_en, intreruperea sa fie data cand valoarea curenta a
counterului este egala cu registrul counter_data
- o iesire counter_out care contine valoarea curenta a counterului

9. Programmable Watch
- o interfata care sa scrie/citeasca niste registri care sa comande un Watch
- interfata de acces registri: req, rdwr, ack, addr, wdata, rdata, dvalid
- registru de control, exemplu de campuri: watch_enable, watch_set, watch_clear,
etc
- registri pt setarea Watch: hour_reg, min_reg, sec_reg
- registru pt divizarea clk: clk_divider, pt obtinerea duratei de o secunda, in functie
de perioada clk
- iesiri pt ora curenta: hour_out, min_out, sec_out

10. PWM generator

S-ar putea să vă placă și