Documente Academic
Documente Profesional
Documente Cultură
Laborator 02.
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:
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
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
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
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