CID Lab Lucrarea 3: Diferență între versiuni

De la WikiLabs
(Cerințe suplimentare (opționale))
(Exemplu)
 
(Nu s-au afișat 46 de versiuni intermediare efectuate de alți 4 utilizatori)
Linia 3: Linia 3:
 
* [[Introducere. Verilog HDL și ModelSim|Logică booleană și sisteme de numerație]]
 
* [[Introducere. Verilog HDL și ModelSim|Logică booleană și sisteme de numerație]]
 
* Sintaxă [[Verilog]]
 
* Sintaxă [[Verilog]]
* Utilizarea programului de simulare [[ModelSim]]
+
* [[Tutorial_Quartus_II| Utilizarea programului de sinteză Altera Quartus II]]
* [[Introducere în sinteza pe FPGA. Xilinx ISE]]
+
* [http://wiki.dcae.pub.ro/images/f/fc/Pinii_la_care_sunt_conectati_dispozitivele_I-O_pe_placa_experimentala_DE1.pdf Lista pinilor plăcii DE1]
* Utilizarea programului de sinteză [[Tutorial Xilinx ISE|Xilinx ISE]]
+
* [[Circuite secvențiale]], [[Numărătorul]]
* [[Memorii ROM]], [[Dispozitiv de IO: Afișajul cu 7 segmente]], [[Circuite secvențiale]], [[Numărătorul]]
 
  
== Cerințe ==
+
== Exemplu ==
  
* Descrieți în Verilog un modul de control pentru sistemul de afișaj cu 7 segmente. Acesta primește ca intrare valoarea care se dorește afișată (între 0 și 9) și la ieșire va genera codul de control pentru segmente și codul de control pentru cifre. Pentru valori mai mari decât 9, se va lumina forma caracterului E urmat de punct. Singura cifră activă va fi cea din dreapta (AN0). Scrieți un modul de test pentru acest circuit în care să dați la intrare toate valorile de la 0 la 9, și una mai mare decât 9. Simulați modulul în Modelsim.
+
Descrieți în Verilog un numărător pe 32 de biți cu reset sincron. Legați semnalul de reset la butonul KEY3. Legați cei mai puțin semnificativi 4 biți ai ieșirii numărătorului pe ledurile verzi LEDG3 - LEDG0 și biții [26:23] pe ledurile roșii LEDR3-LEDR0. Observați variația de viteză.
* Descrieți în Verilog un numărător pe 32 de biți. Scrieți un modul de test pentru acest circuit care să simuleze 30 de perioade de ceas. Simulați modulul în Modelsim.
 
* Folosind modulele anterioare și blocuri de instanțiere, descrieți în Verilog un circuit (numit Timer) care să utilizeze afișajul cu 7 segmente pentru arăta valoarea numărătorului. Sintetizați circuitul în Xilinx ISE și configurați placa de FPGA.
 
  
'''Atenție:''' Plăcile prezente în laborator au un generator de ceas cu frecvența de 50MHz (pinul P77 pentru Spartan2 și T9 pentru Spartan3). Decideți care din cei 32 de biți ai numărătorului trebuie legați la intrarea modulului de control al afisajului pentru ca tranzițiile să poate fi observate.
+
== Exerciții ==
  
== Cerințe suplimentare (opționale) ==
+
Descrieți în Verilog un circuit care să genereze un semnal dreptunghiular periodic de frecvență (perioadă) dată, folosind unul dintre semnalele de ceas de pe placa DE1, conform cerințelor de la exercițiile 1-6. Acest circuit conține un numărător cu semnal de reset '''sincron''' și are un număr de biți suficient de mare pentru a obține frecvența dorită. Scrieți modulul Verilog respectând următoarele cerințe:
 +
* numele modulului trebuie să fie '''counter_ks''', unde k este perioada indicată pentru fiecare exercițiu
 +
* interfața modulului trebuie să fie compusă din următoarele semnale:
 +
*# semnalul de ceas, numit '''clk'''
 +
*# semnalul de reset, numit '''reset'''
 +
*# un semnal de ieșire de un bit numit '''out''' care să oscileze cu perioada cerută.
 +
Constrângerile pentru semnalul de reset, ledul pe care se afișează ieșirea și semnalul de ceas folosit sunt precizate pentru fiecare exercițiu în parte.
  
# Descrieți în Verilog un circuit care va desena o ramă mobilă pe afișajul cu 7 segmente (stil snake). Se va aprinde următoarea secvență care se va repeta cu o frecvență care să permintă vizualizarea mișcării:
+
Pentru nota maximă (10) se va urmări generarea semnalului de frecvența dorită. Se va puncta cu cel mult nota 8 generarea unui semnal de o frecvență cât mai apropiată de această frecvență, folosind una dintre ieșirile numărătorului.
* segmentul de '''sus''' al cifrei '''AN0''';
+
 
* segmentul din '''dreapta-sus''' al cifrei '''AN0''';
+
===Exercițiul 1===
* segmentul din '''dreapta-jos''' al cifrei '''AN0''';
+
Semnalul de ieșire are perioada de 1s.
* segmentul de '''jos''' al cifrei '''AN0''';
+
Se va folosi semnalul de ceas al plăcii CLOCK27.
* segmentul de '''jos''' al cifrei '''AN1''';
+
Intrarea de reset este butonul KEY2.
* segmentul de '''jos''' al cifrei '''AN2''';
+
Ieșirea este conectată pe LEDR9.
* segmentul de '''jos''' al cifrei '''AN3''';
+
 
* segmentul din '''stânga-jos''' al cifrei '''AN3''';
+
===Exercițiul 2===
* segmentul din '''stânga-sus''' al cifrei '''AN3''';
+
Semnalul de ieșire are perioada de 2s.
* segmentul de '''sus''' al cifrei '''AN3''';
+
Se va folosi semnalul de ceas al plăcii CLOCK24.
* segmentul de '''sus''' al cifrei '''AN2''';
+
Intrarea de reset este butonul KEY0
* segmentul de '''sus''' al cifrei '''AN1'''.
+
Ieșirea este conectată pe LEDR5.
Simulați și sintetizați ciruitul.
+
 
# Imaginați-vă și descrieți în Verilog un circuit care să permintă vizualizarea concurentă a 4 valori distincte pe sistemul de afișaj cu 7 segmente. '''Hint:''' Dacă se aprinde secvențial fiecare cifră cu valoarea dorită cu o viteză suficient de mare, atunci senzația vizuală este că sunt toate aprinse în același timp (similar conceptului de desene animate). Simulați și sintetizați circuitul.
+
===Exercițiul 3===
 +
Semnalul de ieșire are perioada de 3s.
 +
Se va folosi semnalul de ceas al plăcii CLOCK50.
 +
Intrarea de reset este butonul KEY1.
 +
Ieșirea este conectată pe LEDR0.
 +
 
 +
===Exercițiul 4===
 +
Semnalul de ieșire are perioada de 2s.
 +
Se va folosi semnalul de ceas al plăcii CLOCK27.
 +
Intrarea de reset este butonul KEY3.
 +
Ieșirea este conectată pe LEDG7.
 +
 
 +
===Exercițiul 5===
 +
Semnalul de ieșire are perioada de 3s.
 +
Se va folosi semnalul de ceas al plăcii CLOCK24.
 +
Intrarea de reset este butonul KEY2.
 +
Ieșirea este conectată pe LEDG0.
 +
 
 +
===Exercițiul 6===
 +
Semnalul de ieșire are perioada de 1s.
 +
Se va folosi semnalul de ceas al plăcii CLOCK50.
 +
Intrarea de reset este butonul KEY0.
 +
Ieșirea este conectată pe LEDR4.
 +
 
 +
== Exercițiu Bonus ==
 +
 
 +
 
 +
Implementați circuitul de la exercițiul anterior având un modul de top care descrie structural principiul divizorului de frecvență (folosiți un numărător și un circuit care resetează numărătorul atunci când ieșirea acestuia atinge o anumită valoare). În modulul de top vor fi instanțiate numărătorul și circuitul care generează semnalul de reset pentru numărător.
 +
 
 +
== Submiterea Exercițiilor ==
 +
 
 +
Pentru notare, se vor submite următoarele fișiere, către adresa de e-mail indicată de cadrul didactic.
 +
 
 +
O arhivă <span style="color: red; font-weight: bold">zip</span> ce va conține:
 +
*Fișierul Verilog cu extensia .v care conține descrierea Verilog a circuitului. Dacă ați rezolvat și exercițiul bonus veți trimite cele 3 fișiere.
 +
*Un fișier de constrângeri, cu extensia .qsf
 +
*Un fișier de tip proiect Quartus, cu extensia .qpf
 +
Atentie, arhiva va contine doar cele 3 fisiere (fara directoare).
 +
 
 +
Subiectul mesajului de e-mail trebuie să respecte formatul <span style="color: red; font-weight: bold">[Nume]_[Prenume]_[Grupa]_numarator_[Nr. Exercitiu]</span> de exemplu Petrica_Lucian_423B_7seg_4
 +
 
 +
== Recomandări pentru cadrul didactic ==
 +
 
 +
Se vor verifica noțiunile de circuite sincrone (blocuri always cu activare pe front, atribuiri non-blocking).
 +
Va fi explicată ideea divizorului de frecvență pornind de la o frecvență a ceasului diferită de cele de pe placă și se va raspunde întrebărilor studenților.

Versiunea curentă din 12 aprilie 2017 10:37

Noțiuni și cunoștințe necesare

Exemplu

Descrieți în Verilog un numărător pe 32 de biți cu reset sincron. Legați semnalul de reset la butonul KEY3. Legați cei mai puțin semnificativi 4 biți ai ieșirii numărătorului pe ledurile verzi LEDG3 - LEDG0 și biții [26:23] pe ledurile roșii LEDR3-LEDR0. Observați variația de viteză.

Exerciții

Descrieți în Verilog un circuit care să genereze un semnal dreptunghiular periodic de frecvență (perioadă) dată, folosind unul dintre semnalele de ceas de pe placa DE1, conform cerințelor de la exercițiile 1-6. Acest circuit conține un numărător cu semnal de reset sincron și are un număr de biți suficient de mare pentru a obține frecvența dorită. Scrieți modulul Verilog respectând următoarele cerințe:

  • numele modulului trebuie să fie counter_ks, unde k este perioada indicată pentru fiecare exercițiu
  • interfața modulului trebuie să fie compusă din următoarele semnale:
    1. semnalul de ceas, numit clk
    2. semnalul de reset, numit reset
    3. un semnal de ieșire de un bit numit out care să oscileze cu perioada cerută.

Constrângerile pentru semnalul de reset, ledul pe care se afișează ieșirea și semnalul de ceas folosit sunt precizate pentru fiecare exercițiu în parte.

Pentru nota maximă (10) se va urmări generarea semnalului de frecvența dorită. Se va puncta cu cel mult nota 8 generarea unui semnal de o frecvență cât mai apropiată de această frecvență, folosind una dintre ieșirile numărătorului.

Exercițiul 1

Semnalul de ieșire are perioada de 1s. Se va folosi semnalul de ceas al plăcii CLOCK27. Intrarea de reset este butonul KEY2. Ieșirea este conectată pe LEDR9.

Exercițiul 2

Semnalul de ieșire are perioada de 2s. Se va folosi semnalul de ceas al plăcii CLOCK24. Intrarea de reset este butonul KEY0 Ieșirea este conectată pe LEDR5.

Exercițiul 3

Semnalul de ieșire are perioada de 3s. Se va folosi semnalul de ceas al plăcii CLOCK50. Intrarea de reset este butonul KEY1. Ieșirea este conectată pe LEDR0.

Exercițiul 4

Semnalul de ieșire are perioada de 2s. Se va folosi semnalul de ceas al plăcii CLOCK27. Intrarea de reset este butonul KEY3. Ieșirea este conectată pe LEDG7.

Exercițiul 5

Semnalul de ieșire are perioada de 3s. Se va folosi semnalul de ceas al plăcii CLOCK24. Intrarea de reset este butonul KEY2. Ieșirea este conectată pe LEDG0.

Exercițiul 6

Semnalul de ieșire are perioada de 1s. Se va folosi semnalul de ceas al plăcii CLOCK50. Intrarea de reset este butonul KEY0. Ieșirea este conectată pe LEDR4.

Exercițiu Bonus

Implementați circuitul de la exercițiul anterior având un modul de top care descrie structural principiul divizorului de frecvență (folosiți un numărător și un circuit care resetează numărătorul atunci când ieșirea acestuia atinge o anumită valoare). În modulul de top vor fi instanțiate numărătorul și circuitul care generează semnalul de reset pentru numărător.

Submiterea Exercițiilor

Pentru notare, se vor submite următoarele fișiere, către adresa de e-mail indicată de cadrul didactic.

O arhivă zip ce va conține:

  • Fișierul Verilog cu extensia .v care conține descrierea Verilog a circuitului. Dacă ați rezolvat și exercițiul bonus veți trimite cele 3 fișiere.
  • Un fișier de constrângeri, cu extensia .qsf
  • Un fișier de tip proiect Quartus, cu extensia .qpf

Atentie, arhiva va contine doar cele 3 fisiere (fara directoare).

Subiectul mesajului de e-mail trebuie să respecte formatul [Nume]_[Prenume]_[Grupa]_numarator_[Nr. Exercitiu] de exemplu Petrica_Lucian_423B_7seg_4

Recomandări pentru cadrul didactic

Se vor verifica noțiunile de circuite sincrone (blocuri always cu activare pe front, atribuiri non-blocking). Va fi explicată ideea divizorului de frecvență pornind de la o frecvență a ceasului diferită de cele de pe placă și se va raspunde întrebărilor studenților.