CID Lab Lucrarea 4: Diferență între versiuni

De la WikiLabs
Jump to navigationJump to search
 
(Nu s-au afișat 6 versiuni intermediare efectuate de același utilizator)
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 sincron. Legați cei mai puțin semnificativi 4 biți [3:0] pe ledurile LD3 - LD0 și biții [26:23] pe ledurile LD7-LD4. Observați variația de viteză.  
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:
== Cerințe suplimentare (opționale) ==
* Intensitatea LEDG0, notată I<sub>LEDG0</sub> este determinată de SW7-SW0
# 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.
* 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):
# Realizați o memorie RAM 16x32 cu 2 porturi:
*# 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>
#* un port de citire (portA)
*# 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>
#* un port de citire-scriere asincronă (portB)
*# 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>
#: 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> &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'd0 - nop - nu se efectuează scriere;
*# 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'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> &gt; I<sub>LEDG4</sub> &gt; 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> &gt; I<sub>LEDG5</sub> &gt; 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> &gt; I<sub>LEDG6</sub> &gt; 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;
 
#* 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;
== Exercițiu Bonus ==
#* 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;
Realizați un circuit care să stingă apoi să aprindă un led treptat, folosind un generator de factor de umplere variabil.
#: Simulați modulul în Modelsim generând ca test o secvență de operații.
#Folosind o memorie RAM, implementați în Verilog o stivă.
#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.