CID Lab Lucrarea 4: Diferență între versiuni

De la WikiLabs
Jump to navigationJump to search
Fără descriere a modificării
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]]
* [[Introducere în sinteza pe FPGA. Xilinx ISE]]
* [[Introducere în sinteza pe FPGA. Xilinx ISE]]
* Utilizarea programului de sinteză [[Tutorial Xilinx ISE|Xilinx ISE]]
* Utilizarea programului de sinteză [[Tutorial Xilinx ISE|Xilinx ISE]]
* [[Memorii ROM]], [[Dispozitiv de IO: Afișajul cu 7 segmente]], [[Circuite secvențiale]], [[Numărătorul]]
* [[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 semnalul de reset la butonul BTN3. Legați cei mai puțin semnificativi 4 biți ai ieșirii numărătorului 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ă LD7 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.


== Recomandări pentru cadrul didactic ==
== Exercițiu ==


Se vor verifica noțiunile de circuite sincrone (blocuri always cu activare pe front, atribuiri non-blocking) și se va raspunde întrebărilor studenților.
Realizați un circuit care instanțiază 8 generatoare de semnal cu factor de umplere variabilă pentru a forma o rampă de intensitate pe LD7-LD0, cu următoarele caracteristici:
* Intensitatea LD0, notată I<sub>LD0</sub> este determinată de SW7-SW0
* Intensitățile LD0-7 respectă una din următoarele relații (cadrul didactiv va atribui fiecăruia din studenți una din relațiile de mai jos):
*# I<sub>LD0</sub> &lt; I<sub>LD1</sub> &lt; I<sub>LD2</sub> &lt; I<sub>LD3</sub> &lt; I<sub>LD4</sub> &lt; I<sub>LD5</sub> &lt; I<sub>LD6</sub> &lt; I<sub>LD7</sub>
*# I<sub>LD0</sub> &gt; I<sub>LD1</sub> &lt; I<sub>LD2</sub> &lt; I<sub>LD3</sub> &lt; I<sub>LD4</sub> &lt; I<sub>LD5</sub> &lt; I<sub>LD6</sub> &lt; I<sub>LD7</sub>
*# I<sub>LD0</sub> &gt; I<sub>LD1</sub> &gt; I<sub>LD2</sub> &lt; I<sub>LD3</sub> &lt; I<sub>LD4</sub> &lt; I<sub>LD5</sub> &lt; I<sub>LD6</sub> &lt; I<sub>LD7</sub>
*# I<sub>LD0</sub> &gt; I<sub>LD1</sub> &gt; I<sub>LD2</sub> &gt; I<sub>LD3</sub> &lt; I<sub>LD4</sub> &lt; I<sub>LD5</sub> &lt; I<sub>LD6</sub> &lt; I<sub>LD7</sub>
*# I<sub>LD0</sub> &gt; I<sub>LD1</sub> &gt; I<sub>LD2</sub> &gt; I<sub>LD3</sub> &gt; I<sub>LD4</sub> &lt; I<sub>LD5</sub> &lt; I<sub>LD6</sub> &lt; I<sub>LD7</sub>
*# I<sub>LD0</sub> &gt; I<sub>LD1</sub> &gt; I<sub>LD2</sub> &gt; I<sub>LD3</sub> &gt; I<sub>LD4</sub> &gt; I<sub>LD5</sub> &lt; I<sub>LD6</sub> &lt; I<sub>LD7</sub>
*# I<sub>LD0</sub> &gt; I<sub>LD1</sub> &gt; I<sub>LD2</sub> &gt; I<sub>LD3</sub> &gt; I<sub>LD4</sub> &gt; I<sub>LD5</sub> &gt; I<sub>LD6</sub> &lt; I<sub>LD7</sub>
*# I<sub>LD0</sub> &gt; I<sub>LD1</sub> &gt; I<sub>LD2</sub> &gt; I<sub>LD3</sub> &gt; I<sub>LD4</sub> &gt; I<sub>LD5</sub> &gt; I<sub>LD6</sub> &gt; I<sub>LD7</sub>


<!--
== Exercițiu Bonus ==
== 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 să stingă apoi să aprindă un led treptat, folosind un generator de factor de umplere variabil.
# Realizați o memorie RAM 16x32 cu 2 porturi:
#* un port de citire (portA)
#* un port de citire-scriere asincronă (portB)
#: 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:
#* 4'd0 - nop - nu se efectuează scriere;
#* 4'd1 - const0 - valoarea primită ca adresă pe portul A se încarcă în memorie, folosind portul B;
#* 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ă;
#* 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;
#* 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;
#* 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;
#: 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 de la data 19 aprilie 2015 20:52

Noțiuni și cunoștințe necesare

Exemplu

Realizați un circuit care să aprindă LD7 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 LD7-LD0, cu următoarele caracteristici:

  • Intensitatea LD0, notată ILD0 este determinată de SW7-SW0
  • Intensitățile LD0-7 respectă una din următoarele relații (cadrul didactiv va atribui fiecăruia din studenți una din relațiile de mai jos):
    1. ILD0 < ILD1 < ILD2 < ILD3 < ILD4 < ILD5 < ILD6 < ILD7
    2. ILD0 > ILD1 < ILD2 < ILD3 < ILD4 < ILD5 < ILD6 < ILD7
    3. ILD0 > ILD1 > ILD2 < ILD3 < ILD4 < ILD5 < ILD6 < ILD7
    4. ILD0 > ILD1 > ILD2 > ILD3 < ILD4 < ILD5 < ILD6 < ILD7
    5. ILD0 > ILD1 > ILD2 > ILD3 > ILD4 < ILD5 < ILD6 < ILD7
    6. ILD0 > ILD1 > ILD2 > ILD3 > ILD4 > ILD5 < ILD6 < ILD7
    7. ILD0 > ILD1 > ILD2 > ILD3 > ILD4 > ILD5 > ILD6 < ILD7
    8. ILD0 > ILD1 > ILD2 > ILD3 > ILD4 > ILD5 > ILD6 > ILD7

Exercițiu Bonus

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