Diferență între revizuiri ale paginii „CID Lab Lucrarea 4”

De la WikiLabs
Jump to navigationJump to search
 
(Nu s-au afișat 8 versiuni intermediare efectuate de alți 2 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]]
+
* [[Generator de impulsuri cu factor de umplere variabil]]
  
== Cerințe ==
+
== Exemplu ==
  
* Descrieți în Verilog un numărător pe 32 de biți cu reset asincron.
+
Realizați un circuit care să aprindă LEDG7 cu o intensitate variabilă, controlată de o valoare setată cu ajutorul switch-urilor SW7-SW0, folosind un generator de semnal cu factor de umplere variabil, bazat pe un numărător de 8 biți. Numărătorul va fi descris ca modul Verilog separat, și va fi instanțiat în generatorul de semnal.
* Folosind acest numărător și transcodorul descris în laboratorul 3, descrieți în Verilog un circuit (numit Timer) care să utilizeze afișajul cu 7 segmente pentru a afișa valoarea numărătorului. Decideți care din cei 32 de biți ai numărătorului ar trebui utilizați pentru afișare astfel încât viteza de numărare să fie aproximativ o secundă.
 
  
<!--
+
== Exercițiu ==
== Cerințe suplimentare (opționale) ==
+
 
# Folosind modulul dezvoltat la exercițiul opțional 2 de la lucrarea 3, scrieți un modul care să afișeze prenumele vostru deplasându-se de la dreapta la stânga pe afișajul cu 7 segmente. Sintetizați circuitul și programați placa de FPGA.
+
Realizați un circuit care instanțiază 8 generatoare de semnal cu factor de umplere variabilă pentru a forma o rampă de intensitate pe LEDG7-LEDG0, cu următoarele caracteristici:
# Realizați o memorie RAM 16x32 cu 2 porturi:
+
* Intensitatea LEDG0, notată I<sub>LEDG0</sub> este determinată de SW7-SW0
#* un port de citire (portA)
+
* Intensitățile LEDG0-7 respectă una din următoarele relații (cadrul didactic va atribui fiecăruia din studenți una din relațiile de mai jos):
#* un port de citire-scriere asincronă (portB)
+
*# I<sub>LEDG0</sub> &lt; I<sub>LEDG1</sub> &lt; I<sub>LEDG2</sub> &lt; I<sub>LEDG3</sub> &lt; I<sub>LEDG4</sub> &lt; I<sub>LEDG5</sub> &lt; I<sub>LEDG6</sub> &lt; I<sub>LEDG7</sub>
#: Folosind un modul similar celui dezvoltat la punctul opțional 2 de la lucrarea 2, implementați următoarele operații conform unui cod de operație primit ca intrare:
+
*# I<sub>LEDG0</sub> &gt; I<sub>LEDG1</sub> &lt; I<sub>LEDG2</sub> &lt; I<sub>LEDG3</sub> &lt; I<sub>LEDG4</sub> &lt; I<sub>LEDG5</sub> &lt; I<sub>LEDG6</sub> &lt; I<sub>LEDG7</sub>
#* 4'd0 - nop - nu se efectuează scriere;
+
*# I<sub>LEDG0</sub> &gt; I<sub>LEDG1</sub> &gt; I<sub>LEDG2</sub> &lt; I<sub>LEDG3</sub> &lt; I<sub>LEDG4</sub> &lt; I<sub>LEDG5</sub> &lt; I<sub>LEDG6</sub> &lt; I<sub>LEDG7</sub>
#* 4'd1 - const0 - valoarea primită ca adresă pe portul A se încarcă în memorie, folosind portul B;
+
*# I<sub>LEDG0</sub> &gt; I<sub>LEDG1</sub> &gt; I<sub>LEDG2</sub> &gt; I<sub>LEDG3</sub> &lt; I<sub>LEDG4</sub> &lt; I<sub>LEDG5</sub> &lt; I<sub>LEDG6</sub> &lt; I<sub>LEDG7</sub>
#* 4'd2 - const1 - valoarea primită ca adresă pe portul A se încarcă în memorie, folosind portul B, shiftând la stânga conținutul memoriei de la adresa respectivă;
+
*# I<sub>LEDG0</sub> &gt; I<sub>LEDG1</sub> &gt; I<sub>LEDG2</sub> &gt; I<sub>LEDG3</sub> &gt; I<sub>LEDG4</sub> &lt; I<sub>LEDG5</sub> &lt; I<sub>LEDG6</sub> &lt; I<sub>LEDG7</sub>
#* 4'd3 - add - se adună valorile de la locațiile specificate de adresele porturilor A și B și se scriu în memorie folosind portul B;
+
*# I<sub>LEDG0</sub> &gt; I<sub>LEDG1</sub> &gt; I<sub>LEDG2</sub> &gt; I<sub>LEDG3</sub> &gt; I<sub>LEDG4</sub> &gt; I<sub>LEDG5</sub> &lt; I<sub>LEDG6</sub> &lt; I<sub>LEDG7</sub>
#* 4'd4 - sub - se scad valorile de la locațiile specificate de adresele porturilor A și B și se scriu în memorie folosind portul B;
+
*# I<sub>LEDG0</sub> &gt; I<sub>LEDG1</sub> &gt; I<sub>LEDG2</sub> &gt; I<sub>LEDG3</sub> &gt; I<sub>LEDG4</sub> &gt; I<sub>LEDG5</sub> &gt; I<sub>LEDG6</sub> &lt; I<sub>LEDG7</sub>
#* 4'd5 - mul - se înmulțesc valorile de la locațiile specificate de adresele porturilor A și B și se scriu în memorie folosind portul B;
+
*# I<sub>LEDG0</sub> &gt; I<sub>LEDG1</sub> &gt; I<sub>LEDG2</sub> &gt; I<sub>LEDG3</sub> &gt; I<sub>LEDG4</sub> &gt; I<sub>LEDG5</sub> &gt; I<sub>LEDG6</sub> &gt; I<sub>LEDG7</sub>
#* 4'd6 - lshift - se shiftează la stânga valorea de la locația specificată de adresa portului B cu cea de la locația specificată de adresa portului A și se scrie în memorie folosind portul B;
+
 
#* 4'd7 - rshift - se shiftează la dreapta valorea de la locația specificată de adresa portului B cu cea de la locația specificată de adresa portului A și se scrie în memorie folosind portul B;
+
== Exercițiu Bonus ==
#: Simulați modulul în Modelsim generând ca test o secvență de operații.
+
 
#Folosind o memorie RAM, implementați în Verilog o stivă.
+
Realizați un circuit care să stingă apoi să aprindă un led treptat, folosind un generator de factor de umplere variabil.
#Folosind o memorie RAM, implementați în Verilog o coadă.
 
-->
 

Versiunea curentă din 21 aprilie 2017 12:05

Noțiuni și cunoștințe necesare

Exemplu

Realizați un circuit care să aprindă LEDG7 cu o intensitate variabilă, controlată de o valoare setată cu ajutorul switch-urilor SW7-SW0, folosind un generator de semnal cu factor de umplere variabil, bazat pe un numărător de 8 biți. Numărătorul va fi descris ca modul Verilog separat, și va fi instanțiat în generatorul de semnal.

Exercițiu

Realizați un circuit care instanțiază 8 generatoare de semnal cu factor de umplere variabilă pentru a forma o rampă de intensitate pe LEDG7-LEDG0, cu următoarele caracteristici:

  • Intensitatea LEDG0, notată ILEDG0 este determinată de SW7-SW0
  • Intensitățile LEDG0-7 respectă una din următoarele relații (cadrul didactic va atribui fiecăruia din studenți una din relațiile de mai jos):
    1. ILEDG0 < ILEDG1 < ILEDG2 < ILEDG3 < ILEDG4 < ILEDG5 < ILEDG6 < ILEDG7
    2. ILEDG0 > ILEDG1 < ILEDG2 < ILEDG3 < ILEDG4 < ILEDG5 < ILEDG6 < ILEDG7
    3. ILEDG0 > ILEDG1 > ILEDG2 < ILEDG3 < ILEDG4 < ILEDG5 < ILEDG6 < ILEDG7
    4. ILEDG0 > ILEDG1 > ILEDG2 > ILEDG3 < ILEDG4 < ILEDG5 < ILEDG6 < ILEDG7
    5. ILEDG0 > ILEDG1 > ILEDG2 > ILEDG3 > ILEDG4 < ILEDG5 < ILEDG6 < ILEDG7
    6. ILEDG0 > ILEDG1 > ILEDG2 > ILEDG3 > ILEDG4 > ILEDG5 < ILEDG6 < ILEDG7
    7. ILEDG0 > ILEDG1 > ILEDG2 > ILEDG3 > ILEDG4 > ILEDG5 > ILEDG6 < ILEDG7
    8. ILEDG0 > ILEDG1 > ILEDG2 > ILEDG3 > ILEDG4 > ILEDG5 > ILEDG6 > ILEDG7

Exercițiu Bonus

Realizați un circuit care să stingă apoi să aprindă un led treptat, folosind un generator de factor de umplere variabil.