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

De la WikiLabs
Jump to navigationJump to search
 
(Nu s-au afișat 39 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]]
* [[Circuite secvențiale]], [[Numărătorul]]
+
* [[Numărătorul]]
* [[Divizorul de frecvență]]. [[Generator de impulsuri cu factor de umplere variabil]]. [[Transmisia seriala a datelor]].
+
* [[Memorii RAM]]
  
== Cerințe ==
+
== Exemplu ==
  
[[Fișier:lab5.png|thumb|Schema bloc a circuitului]]
+
* Se va descrie în Verilog o memorie RAM 16x4b cu un port de citire-scriere. Citirea este sincrona.
 +
* Se vor scrie contrâgerile necesare pentru a conecta
 +
** adresa la SW7-4 și data de intrare la SW3-0.
 +
** semnalul de activare a scrierii la unul din butoane (KEY0 ... KEY3).
 +
** ieșirea memoriei la LEDR3-0.
 +
** intrarea de ceas a memoriei la unul dintre oscilatoarele plăcii DE1.
 +
* Programati placa FPGA, si folosind switch-urile si butoanele placii, scrieți adresele 3, 6 și 10 cu valorile 2, 1 respectiv 7, apoi citiți-le în aceeași ordine. Observati, folosind LED-urile placii, daca s-a realizat memorarea.
  
* Descrieți în Verilog un divizor de frecvență care să genereze un ceas cu frecvența de ~250Hz. Scrieți un modul de test pentru acest circuit în care semnalul de ceas descris în modulul de test să fie aibă exact perioada ceasului prezent pe placa de dezvoltare. Simulați circuitul în Modelsim.
+
== Exercițiu ==
* Descrieți în Verilog un generator de impulsuri cu factor de umplere variabil folosind un registru de numărare de 8 biți. Scrieți un modul de test pentru acest circuit în care semnalul de ceas descris în modulul de test să fie aibă exact perioada ceasului prezent pe placa de dezvoltare. Simulați circuitul în Modelsim.
 
* Folosind modulele anterioare și blocuri de instanțiere, descrieți în Verilog un circuit (numit Blinker) care să respecte schema din figură. Explicați funcționarea lui. Sintetizați circuitul legând ieșirile la leduri și configurați FPGA-ul.
 
* Descrieți în Verilog un modul de transmisie serială a datelor pentru date de 8 biți și secvența de sincronizare 3'b101. Scrieți un modul de test în care să transmiteți cateva valori. Simulați circuitul în Modelsim.
 
  
'''Atenție:''' Ieșirea generatorului cu factor de umplere variabil este de 1 bit. Acesta trebuie multiplicat de 8 ori pentru a putea fi legat la ieșirea out a modulului Blinker.
+
*Descrieți în Verilog o memorie RAM 16x4b cu două porturi:
 +
** Un port sincron de scriere (Write-Only) cu următoarele semnale:
 +
*** WR_ADDR - adresa la care se scrie
 +
*** WR_EN - comanda de scriere
 +
*** WR_DATA - datele scrise
 +
** Un port sincron de citire (Read-Only) cu următoarele semnale:
 +
*** RD_ADDR - adresa citită
 +
*** RD_DATA - datele citite
 +
* Memoria va fi instanțiată în modulul TOP conform figurii următoare:
 +
[[Fișier:Cid_lab6.jpg]]
  
== Cerințe suplimentare (opționale) ==
+
<syntaxhighlight lang="verilog">
 +
module COUNTER(
 +
    input clk,
 +
    output reg [31:0] cnt
 +
);
 +
 
 +
always @(posedge clk) cnt <= cnt + 1;
 +
 
 +
endmodule
 +
 
 +
module ROM(
 +
    input [3:0] in,
 +
    output reg [3:0] out
 +
);
 +
 
 +
always @(in)
 +
    case(in)
 +
        0:  out = 4'b0000;
 +
        1:  out = 4'b0110;
 +
        2:  out = 4'b0011;
 +
        3:  out = 4'b1110;
 +
        4:  out = 4'b1011;
 +
        5:  out = 4'b1111;
 +
        6:  out = 4'b0111;
 +
        7:  out = 4'b1100;
 +
        8:  out = 4'b0001;
 +
        9:  out = 4'b0101;
 +
        10: out = 4'b1101;
 +
        11: out = 4'b1010;
 +
        12: out = 4'b0010;
 +
        13: out = 4'b0100;
 +
        14: out = 4'b1000;
 +
        15: out = 4'b1001;
 +
        default: out = 4'b0000;
 +
    endcase
 +
 
 +
endmodule
 +
</syntaxhighlight>
 +
 
 +
* Scrieți constrângerile necesare pentru a conecta porturile modulului TOP:
 +
** DIN la SW7-4,
 +
** ADR la SW3-0,
 +
** WEN la KEY3,
 +
** DOUT la LEDR3-0,
 +
** intrarea de ceas la CLOCK_50.
 +
* Programati placa FPGA; Scrieți memoria RAM cu valorile necesare pentru a produce pe DOUT o secvență de numere indicată de cadrul didactic.
 +
 
 +
== 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:
 +
*Toate fișierele Verilog (cu extensia .v) care conțin descrierea circuitului
 +
*Un fișier de constrângeri, cu extensia .qsf
 +
*Un fișier de tip proiect Quartus, cu extensia .qpf
 +
Atentie, arhiva va contine doar fisiere (fara directoare).
 +
 
 +
Subiectul mesajului de e-mail trebuie să respecte formatul <span style="color: red; font-weight: bold">[Nume]_[Prenume]_[Grupa]_Mem</span> de exemplu Popescu_Ion_423B_Mem

Versiunea curentă din 18 aprilie 2018 16:00

Noțiuni și cunoștințe necesare

Exemplu

  • Se va descrie în Verilog o memorie RAM 16x4b cu un port de citire-scriere. Citirea este sincrona.
  • Se vor scrie contrâgerile necesare pentru a conecta
    • adresa la SW7-4 și data de intrare la SW3-0.
    • semnalul de activare a scrierii la unul din butoane (KEY0 ... KEY3).
    • ieșirea memoriei la LEDR3-0.
    • intrarea de ceas a memoriei la unul dintre oscilatoarele plăcii DE1.
  • Programati placa FPGA, si folosind switch-urile si butoanele placii, scrieți adresele 3, 6 și 10 cu valorile 2, 1 respectiv 7, apoi citiți-le în aceeași ordine. Observati, folosind LED-urile placii, daca s-a realizat memorarea.

Exercițiu

  • Descrieți în Verilog o memorie RAM 16x4b cu două porturi:
    • Un port sincron de scriere (Write-Only) cu următoarele semnale:
      • WR_ADDR - adresa la care se scrie
      • WR_EN - comanda de scriere
      • WR_DATA - datele scrise
    • Un port sincron de citire (Read-Only) cu următoarele semnale:
      • RD_ADDR - adresa citită
      • RD_DATA - datele citite
  • Memoria va fi instanțiată în modulul TOP conform figurii următoare:

Cid lab6.jpg

module COUNTER(
    input clk,
    output reg [31:0] cnt
);

always @(posedge clk) cnt <= cnt + 1;

endmodule 

module ROM(
    input [3:0] in,
    output reg [3:0] out
);

always @(in)
    case(in)
        0:  out = 4'b0000;
        1:  out = 4'b0110;
        2:  out = 4'b0011;
        3:  out = 4'b1110;
        4:  out = 4'b1011;
        5:  out = 4'b1111;
        6:  out = 4'b0111;
        7:  out = 4'b1100;
        8:  out = 4'b0001;
        9:  out = 4'b0101;
        10: out = 4'b1101;
        11: out = 4'b1010;
        12: out = 4'b0010;
        13: out = 4'b0100;
        14: out = 4'b1000;
        15: out = 4'b1001;
        default: out = 4'b0000;
    endcase

endmodule
  • Scrieți constrângerile necesare pentru a conecta porturile modulului TOP:
    • DIN la SW7-4,
    • ADR la SW3-0,
    • WEN la KEY3,
    • DOUT la LEDR3-0,
    • intrarea de ceas la CLOCK_50.
  • Programati placa FPGA; Scrieți memoria RAM cu valorile necesare pentru a produce pe DOUT o secvență de numere indicată de cadrul didactic.

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:

  • Toate fișierele Verilog (cu extensia .v) care conțin descrierea circuitului
  • Un fișier de constrângeri, cu extensia .qsf
  • Un fișier de tip proiect Quartus, cu extensia .qpf

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

Subiectul mesajului de e-mail trebuie să respecte formatul [Nume]_[Prenume]_[Grupa]_Mem de exemplu Popescu_Ion_423B_Mem