Sunteți pe pagina 1din 5

Descrierea Custom IP Core și a proiectelor de referință

Descrierea Custom IP Core și a proiectelor de referință


Ip Core se află în .\Original\Custom_Ip_Core. Pentru a le putea folosi, trebuie să adăugați acest repository în
proiectul Vivado.

ssg_decoder_1.0 – AXI Seven-Segment Decoder

Porturile de ieșire AN_OUT și SSG_OUT, reprezintă, evident, anozii respectiv segmenții afișajului de 7 segmente.

Harta și descrierea regiștrilor:

31 24 23 16 15 8 7 0
Adresa: BASEADDR, denumirea: DATA_REG, R/W
DATA7[3:0] DATA6[3:0] DATA5[3:0] DATA4[3:0] DATA3[3:0] DATA2[3:0] DATA1[3:0] DATA0[3:0]
Descriere: Fiecare câte 4 biți reprezintă datele care vor fi decodificate și afișate (în hexazecimal) pe digit-ul
corespunzător (DATA) la Digit0, Data1 la Digit1 etc.

Adresa: BASEADDR + 0x4, denumirea: DP_REG, R/W


7 0
DP7 ..... DP0
Descriere: Setând 1 pe fiecare bit, se aprinde punctul zecimal pe digit-ul corespunzator

Adresa: BASEADDR + 0x8, denumirea: BLANK_REG, R/W


7 0
BLANK7 ..... BLANK0
Descriere: Setând 1 pe fiecare bit, se stinge digit-ul corespunzător
BLANK are prioritate față de toate celelalte semnale.

Adresa: BASEADDR + 0xC, denumirea: USE_SEG_REG, R/W


7 0
USE_SEG7 ..... USE_SEG0
Descriere: Setând 1 pe una sau mai mulți biți putem controla individual fiecare segment din digitul
corespunzător. Segmenții din digitul selectat se aprind în funcție de valoarea din octetul corespunzător
SEG_IN_HI_REG sau SEG_IN_LO_REG (vezi mai jos)
Adresa: BASEADDR + 0x10, denumirea: SEG_IN_HI_REG, R/W
SEG_IN7 SEG_IN6 SEG_IN5 SEG_IN4
Adresa: BASEADDR + 0x14, denumirea: SEG_IN_LO_REG, R/W
SEG_IN3 SEG_IN2 SEG_IN1 SEG_IN0
Descriere: Fiecare octet din regiștrii de mai sus corespunde cu segmenții unui digit (7 biți, bitul cel mai
semnificativ nu este folosit). Dacă USE_SEGn corespunzător este 1 logic, atunci segmenții se aprind, setînd 1

logic pe biții SEG_INn corespunzător. Formatul segmenților este , unde A – bitul cel mai puțin
semnificativ(0), iar G e bitul cel mai semnificativ (6)

Pag. 1
Descrierea Custom IP Core și a proiectelor de referință

Adresa: BASEADDR + 0x14, denumirea: RFR_RATE_REG, R/W


3 0
Descriere: Reprezintă rata de reîmprospătarea a afișajului (Valoarea 0: 0.5Hz...0xA: 1KHz... 0xF:50MHz)
Scriind la acest registru are efect doar, dacă în Customize IP parametrul REFRESH_MODE a fost ales 1. Altfel,
rata de reîmprospătare e dată de parametrul REFRESH_FREQUENCY_HZ

Proiect de referință ./Original/Lab/Lab11/Mb_V1_2.xpr.zip. Proiectul demonstrează modurile de afișare ale


ssg_decoder

rtc_1.0 – AXI Real-Time Clock

Acesta reprezintă un ceas în timp real. Datele sunt păstrate în format BCD. Ceasul poate fi setat scriind la registrul
adresei de bază. Semnalul BLINK reprezintă un semnal dreptunghiular cu factorul de umplere de 50%, cu frecvența
bazei de timp selectate (implicit 1Hz), iar TICK reprezintă un impuls sincron cu tactul sistem, având frecvența egală cu
a bazei de timp.

Harta și descrierea regiștrilor:

31 24 23 16 15 8 7 0
Adresa: BASEADDR, denumirea: RTC_REG, R/W
31 25 24-BLINK ZHR[3:0] HR[3:0] ZMIN[3:0] MIN[3:0] ZSEC[3:0] SEC[3:0]
Descriere: Fiecare câte 4 biți reprezintă ora în format BCD. Scriind la acest registru se setează ceasul.
Observație: Datele sunt reprezentate în format BCD, motiv pentru care citind de la acest registru și trimițănd
datele la ssg_decoder, se poate afișa ceasul, fără a fi necesar o altă conversie de date.
Pentru a seta ceasul trebuie ținut cont de formatul BCD. Astfel, de exemplu, pentru a seta ceasul la 13:59:01,
în registru va trebui scris 0x135901.
În cazul în care se scriu date incorecte, numărătoarele din interior se setează la valoarea maximă posibilă. De
exemplu, dacă se scrie în registru 0x428299, atunci în numărătoare se va înscrie 0x225259
Bitul 24 al registrului este identic cu semnalul BLINK – pentru a semnaliza funcționarea ceasului

Adresa: BASEADDR + 0x4, denumirea: TIMEBASE_REG, R/W


1 0
TB1 TB0
Descriere: Cei doi biți din Timebase_Reg modifică baza de timp la care lucrează ceasul în timp real. Registrul
TIMEBASE_REG modifică baza de timp în felul următor:
00 – 1Hz (implicit)
01- 2Hz
10 – 10Hz
11 – 50Hz

Pag. 2
Descrierea Custom IP Core și a proiectelor de referință

Proiect de referință: .\Original\Reference_Proiects\L.2.xpr.zip. Acesta setează ceasul la început la 9:58:23. Ceasul


poate fi ajustat apăsând BTNL (se incrementează orele) sau BTNR (minutele). Aplicația folosește întreruperile de la
butoanele GPIO

StopWatch_1.0 – AXI StopWatch

Acesta reprezintă un cronometru cu o rezoluție de 1ms. Semnalul BLINK, de 10Hz, are același rol ca și în cazul rtc_1.0.

Harta și descrierea regiștrilor:

31 28 27 0
Adresa: BASEADDR, denumirea: Stopwatch_Reg, RO (Read-Only)
31-29 28-BLINK ZMIN[3:0] MIN[3:0] ZSEC[3:0] SEC[3:0] SM[3:0] ZM[3:0] M[3:0]
Descriere: Fiecare câte 4 biți reprezintă cronometrul în format BCD.Registrul este Read-Only. Scriind la acest
registru nu va avea efect.

Adresa: BASEADDR + 0x4, denumirea: Control_Reg, R/W


1 0
RESET ENABLE
Descriere: Cei doi biți controlează cronometrul: RESET resetează, iar ENABLE pornește cronometrul. RESET
este prioritar.

Proiect de referință: .\Original\Reference_Proiects\M.2.xpr.zip. Cronometrul poate fi setat din butoanele (GPIO)


BTNU - start, BTNC - Stop, BTND – Reset. Aplicația folosește întreruperile de la butoanele GPIO.

CdTimer_1.0: - AXI Countdown Timer

Acesta reprezintă un temporizator cu decrementare, maxim 99999 secunde (aprox. 27 ore). Datele sunt
păstrate în format BCD. Semnalele TICK și BLINK au aceeași semnificație, ca și în cazul rtc_1.0. Semnalul irq este
semnal de întrerupere. Temporizatorul va genera întrerupere când, în decrementare ajunge la 0.

Harta și descrierea regiștrilor:

31 20 19 16 15 8 7 0

Pag. 3
Descrierea Custom IP Core și a proiectelor de referință

Adresa: BASEADDR, denumirea: CdTimer_Reg, RO


31 21 20-BLINK ZMSEC[3:0] MSEC[3:0] SSEC[3:0] ZSEC[3:0] SEC[3:0]
Descriere: Fiecare câte 4 biți reprezintă secunde, zeci secunde etc. în format BCD. Registrul e Read-Only.
Scriind la acest registru nu va avea efect.
Bitul 20 al registrului este identic cu semnalul BLINK – pentru a semnaliza funcționarea temporizatorului

Adresa: BASEADDR + 0x4, denumirea: LOAD_REG, R/W


31 20 ZMSEC[3:0] MSEC[3:0] SSEC[3:0] ZSEC[3:0] SEC[3:0]
Descriere: Acesta e registrul la care trebuie scris pentru a inițializa temporizatorul. Fiecare câte 4 biți
reprezintă secunde, zeci secunde etc. în format BCD.
La terminarea numărării, temporizatorul se va reîncărca la valoarea din acest registru

Adresa: BASEADDR + 0x8, denumirea: CTRL_REG, R/W


3 2 1 0
TB1 TB0 LOAD
ENABLE
Descriere: TB1, TB0 modifică baza de timp la care lucrează temporizatorul, în felul următor:
00 – 1Hz (implicit)
01- 2Hz
10 – 10Hz
11 – 50Hz
LOAD: Dacă e 1, temporizatorul se încarcă din valoarea LOAD_REG. LOAD e prioritar asupra Enable, astfel,
dacă dorim să decrementăm temporizatorul, LOAD trebuie setat la 0
ENABLE: Permite numărarea (decrementarea temporizatorului)

Adresa: BASEADDR + 0xC, denumirea: IRQ_REG, R/WZ


0
IRQ
Descriere: Acesta reprezintă registrul de status întrerupere. Bitul IRQ se setează în cazul în care
temporizatorul s-a decrementat la 0. Scriind orice la acest registru se șterge bitul IRQ

Proiect de referință: .\Original\Reference_Proiects\N.2.xpr.zip Se afișează valoarea inițială a temporizatorului


(pornește de la 120S , se afișează în format MM:SS). La apăsarea consecutivă a BTNC pornește temporizatorul. Dacă
temporizatorul ajunge la 0, se aprind LED-urile in secvența 0xFF00-0x00FF (alarmă). Dacă numărarea nu a ajuns la 0 și
se apasă BTNC din nou, temporizatorul se resetează (la 120S). Pornirea se face apăsând BTNC din nou. Aplicația
folosește întreruperile de la butoanele GPIO și întreruperea CdTimer_1.0

Butoane_1_0:

Pag. 4
Descrierea Custom IP Core și a proiectelor de referință

Acesta reprezintă un monitor a acțiunii celor 5 butoane de comandă: Center, Up, Left, Right, Down.
Semnalul BTN, evident, se conectează la cele 5 butoane de pe placa de dezvoltare. Evident, GPIO pentru Pushbuttons
trebuie deconectat. Semnalul irq este semnal de întrerupere, care se activează la una din acțiunile butoanelor.

Harta și descrierea regiștrilor:

31 19 16 15 8 7 0
20
Adresa: BASEADDR, denumirea: BTN_DATA, RO
31 20 BTND_DATA BTNR_DATA BTNL_DATA BTNU_DATA BTNC_DATA
Descriere: Fiecare câte 4 biți reprezintă datele unui buton, în felul următor:
BTNX:
3 2 1 0
BTN LongPress Dubluclick Click
Unde BTN reprezintă valoarea curentă a butonului.
Se va genera întrerupere pentru cele trei evenimente (Click, DubluClick, LongPress), și pentru evenimentul de
eliberare a butonului după LongPress.
Observație: Pentru detectarea eliberării de la LongPress valoarea citită este 0x00. Pentru a detecta
DubluClick, valoarea care trebuie citită este 0x9 (bug al core-ului).
Registrul e Read-Only. Scriind la acest registru nu va avea efect.

Adresa: BASEADDR + 0x8, denumirea: IRQ_STATUS_REG, R/W


4 3 2 1 0
BTND BTNR BTNL BTNU BTNC
Descriere: Acest registru reprezintă registrul de stare de întreruperi. De aici se poate determina, pe care
buton a apărut un eveniment.
Scriind orice valoare la acest registru va șterge registrul

În cazul în care a apărut un eveniment pe un buton, însă acest eveniment nu a fost trata de către o rutină de
întrerupere, apăsarea unui alt buton va suprascrie regiștrii BTN_DATA și IRQ_STATUS_REG.

Proiect de referință: .\Original\Reference_Proiects\B.1.xpr.zip. Acesta citește și afișează în terminal


evenimentele de la cele cinci butoane. Aplicația folosește întreruperile de la Ip Core. Butoane_1.0.

Pag. 5

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