Sunteți pe pagina 1din 19

Sisteme cu FPGA

Laborator 02.

Numărător parametrizabil CntNbits_L.


Tema1: Simularea numărătorului

Albert Fazakas
Departamentul de Bazele Electronicii
Albert.Fazakas@bel.utcluj.ro
Obiective
 Lucrarea - și Tema1 – de față presupune că:
• Ați parcurs Lab 01_Vivado_Intro_Cnt4Bits
• Ați creat proiectul și componenta Cnt4Bits, ați creat Testbench și ați simulat numărătorul
 Dacă nu ați parcurs pașii de mai sus, întoarceți-vă la 01_Vivado_Intro_Cnt4Bits și parcurgeți-l

Obiective:

1. Refolosim numărătorul Cnt4Bits (varianta „Full Option”) pentru a crea un numărător


parametrizabil, pe N biți, care numără până la o valoare de limită LIMIT
• N (denumit NUMBITS) și LIMIT vor fi parametri - în VHDL se numesc Generics

2. Refolosim Testbench pentru Cnt4Bits pentru a simula numărătorul

2
Salvăm proiectul sub altă denumire
 Descărcați fișierul Ip_repo.zip de pe Teams și dezarhivați-l (folosind comanda Extract Here)
• Calea spre directorul Ip_repo nu poate conține nici spații, nici caractere speciale!
o Exemplu: C:/Temp
 Salvați proiectul
sub altă denumire:

3
Adăugăm sursele
 În File Explorer, navigați în subdirectorul C:\Temp\Ip_Repo.
• Copiați în C:\Temp fișierele .\HDL_Modules\CntNbits_L.vhd și .\Sim_Modules\
Sim_CntNBits_L.vhd
o Apoi, adăugați
fișierele
în proiectul Vivado:

4
Localizarea fișierelor sursă într-un proiect Vivado
 De ce nu am adăugat fișierele direct, din subdirectorul C:\Temp\Ip_Repo\HDL_Modules,
respectiv .\Sim_Modules?
• Navigați în subdirectorul proiectului: C:\Temp\NP_CntNbits_L:

5
Localizarea fișierelor sursă într-un proiect Vivado
 De ce nu am adăugat fișierele direct, din subdirectorul C:\Temp\Ip_Repo\HDL_Modules, respectiv .\
Sim_Modules?
 Răspuns: Dacă am fi adăugat sursele HDL direct de sub C:\Temp\Ip_Repo\HDL_Modules respectiv .\
Sim_Modules,
• Atunci calea de acces la sursele HDL ar fi fost
.\Nume_Proiect\Nume_Proiect.srcs\sources_1\imports\Temp\Ip_Repo\HDL_Modules\
• Similar pentru calea de acces la sursele de simulare

În acest mod, se poate ajunge foarte repede la limita de 240 caractere în calea de acces (impus de către
sistemul Windows)
• La depășirea limitei, proiectul sub Windows devine inutilizabil: nu poate fi arhivat, sintetizat,
implementat etc.
Tocmai din acest motiv, încercați să țineți căile de acces cât mai scurte
• Gândiți-vă de două ori înainte de a păstra proiectele SFPGA în subdirectoare de forma
.\Scoala\An_IV\Sem_I\SFPGA\Proiecte
6
1. Refolosirea numărătorului Cnt4Bit
 Ștergeți sursele Cnt4Bits.vhd și Sim_Cnt4Bits.vhd, și fișierul .wcfg din proiect:

7
Biblioteca și definirea parametrilor (generics)
 Numărătorul va număra doar până la o
valoare LIMIT
• Care va fi un număr întreg (integer),
pozitiv (unsigned)
 Din acest motiv, trebuie să ne folosim
de funcții de conversie dintre
std_logic_vector și integer (unsigned)
• Atunci, decomentăm biblioteca IEEE.NUMERIC_STD
 Definiția entității cuprinde
cei doi parametri, ambii întregi
• Denumiți în VHDL ca generic
• Observați: ultimul element
nu e separat de ;
• La declarație, construcția
generic (... ); se termină cu ;
8
Semnale cu dimensiuni parametrizabile
 După ce am declarat parametrii,
îi putem folosi
 Astfel, porturile Din și Q au
lățimile (dimensiunile)
parametrizate:
 Semnalul Q_Intern este și el
parametrizat:
 În arhitectură, definim
două constante de tip
std_logic_vector, ambele
cu lățimea parametrizată:

9
Procesul de numărare
 Trebuie să ne asigurăm că Q_Intern nu va fi
mai mare, decât LIMIT, sub nici o condiție
• Avem nevoie să „protejăm” valoarea lui
 La încărcare
• Se mai numește cod de protecție

 La incrementare: numără până la LIMIT


 Respectiv la decrementare: revine la LIMIT
 La rândul lui, condițiile pentru TC se schimbă:
Se va activa când Q ajunge la LIMIT:

10
Testbench pentru Cnt_Nbits_L
 Și în Testbench trebuie să folosim biblioteca IEEE.NUMERIC_STD:
 Mai • Declararea componentei e similară cu
departe:
exemplul Cnt4Bits

• Însă NUMBITS și LIMIT sunt cunoscute


doar în interiorul componentei, nu și
în Testbench:
• Trebuie să le declarăm – ca valori
• Semnalele interne Din și Q sunt parametrizate, iar Din are și valoare inițială:
constante
• Am ales NUMBITS = 4, LIMIT = 9

11
Testbench pentru Cnt_Nbits_L
 Instanțierea componentei: E similară cu exemplul
Cnt4Bits
• Iar parametrii Generic se conectează la fel ca porturile,
folosind Generic map
 Însă, atenție! Construcția Generic map (...) nu se
termină cu ;
• De reamintit Slide 8: Declararea generic(..)
în componentă se termină cu ;

12
Testarea comenzilor în procesul principal
 Câteva mici diferențe față de procesul pentru testarea Cnt4Bits:
• Pentru a testa Roll Over și Roll Under,
condițiile folosesc valori
cu lățime parametrizată:
o Roll Over trebuie să se facă la valoarea LIMIT
o La fel pentru Roll Under: trebuie să se revină
la LIMIT. Mai lăsăm două decrementări
 Trebuie să verificăm codul de protecție la Load
• Încărcăm o valoare mai mare, decât LIMIT
(în exemplul prezentat, LIMIT = 9)
o Numărătorul va trebui să încarce LIMIT
• La rândul lui, testăm și Load cu valori permise
o Încărcăm o valoare mai mică, decât LIMIT
o Numărătorul va trebui să încarce valoarea

13
Testarea comenzilor în procesul principal
 În codul numărătorului, procesul de numărare
• Prima dată, RESETn este testat
• Apoi Load, iar pe urmă CE
 Rezultă, că asta e ordinea de prioritate
a semnalelor de comandă: RESETn, Load, apoi CE
 După testarea Load, în Testbench
se testează prioritatea comenzilor:
 Prima dată se activează toate comenzile
• Apoi, după câteva perioade de tact,
• Se dezactivează, în ordinea priorității, comenzile
• Se urmărește pe diagrama de semnal efectul
comenzilor
 La sfârșit, numărătorul este lăsat în starea de
incrementare
14
Simularea proiectului: NUMBITS = 4, LIMIT = 9
 Urmăriți video:

15
Tema de casă 1: CntNbits_L
 Alocări de teme: „Alocari_Tema1_CntNbits_L.pdf” respectiv
„Specifications_1_CntNbits_L.pdf”
 Modificați numărătorul parametrizabil CntNbits_L și Testbench asociat, conform specificațiilor
din alocări:
• Lățimea numărătorului (N) și limita (LIMIT) se modifică
• Modificați codul numărătorului, astfel ca ordinea de prioritate a semnalelor de comandă să
fie cea din alocări
 Simulați numărătorul, astfel ca ordinea de testare a comenzilor și starea finală a
numărătorului să corespundă cu cele din alocări

 Atenție! Codul numărătorului și al testbench este incomplet parametrizat. La modificarea


lățimii numărătorului și pornirea simulării se vor genera erori

16
Tema de casă 1: CntNbits_L
 Atenție! Codul numărătorului și al testbench este incomplet parametrizat. La modificarea
lățimii numărătorului și pornirea simulării se vor genera erori
• Modificați codul numărătorului și al Testbench ca să corectați erorile
• însă, corectați erorile nu doar pentru lățimea alocată: Numărătorul și Testbench trebuie să
poată fi simulat la orice lățime (1..32)
• În documentație se cere să specificați modificările efectuate (se acceptă și capturi de ecran)
• La documentarea corectării erorilor, nu se acceptă codul complet al numărătorului /
testbench copiat în document, nici în formă de text, nici în formă de captură
o doar secvențele de cod relevante
o Cod complet în documentație înseamnă depunctare: demonstrează că nu cunoașteți, de fapt,
codul

17
Tema de casă 1: CntNbits_L
 Documentați rezultatele într-un document Word/PowerPoint/PDF (cum vă e mai ușor).
Documentul va cuprinde
• Specificațiile temei de casă
• Evidențierea erorilor corectate (vezi slide-urile precedente)
• Codul VHDL al numărătorului CntNbits_L. Doar procesul de numărare!
• Rezultatele de simulare, care evidențiază fiecare pas în testarea comenzilor și ordinea, în care se
testează comenzile, alocată din specificații
o Se așteaptă aprox. 2..4 capturi de ecran
o Evidențiați fiecare pas în
diagrama de semnale,
cu elemente grafice
și/sau explicații text.
o Numerotați figurile
 Exemplu:
CU ROL CD ROL Load > LIMIT
Fig. 1. Testarea CU ROL, CD ROL și Load > LIMIT
18
Tema de casă 1: CntNbits_L
 În Assignment va trebui să încărcați:
• Proiectul Vivado arhivat
• Documentația menționată mai sus
 Pentru a arhiva proiectul în Vivado: File->Project->Archive..
• Pentru locația arhivei și locația temporară:
o Alegeți căi de acces cât mai scurte
 Pe cât posibil, nu folosiți alt program extern de arhivare
(zip, rar etc.) la arhivarea proiectelor Vivado!
• Motiv: Pe parcursul arhivării, Vivado verifică și „curăță”
structura proiectului.
• Programele externe nu vor face acest lucru, iar din
această cauză structura proiectului poate fi stricată.
o E posibil ca, după arhivare cu program extern, după
dezarhivare proiectul nu va mai putea fi deschis sub Vivado
 În acest caz va trebui recreat proiectul
și readăugate sursele 19

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