CID Lab Lucrarea 5: Diferență între versiuni
De la WikiLabs
Jump to navigationJump to search
Fără descriere a modificării |
|||
(Nu s-au afișat 22 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 | * [[Tutorial_Quartus_II| Utilizarea programului de sinteză Altera Quartus II]] | ||
* [ | * [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] | ||
* [[Circuite secvențiale]] | * [[Circuite secvențiale]] | ||
* [[Numărătorul]] | |||
* [[Memorii RAM]] | * [[Memorii RAM]] | ||
== Exemplu == | == Exemplu == | ||
* Se va descrie în Verilog o memorie RAM 16x4b cu un port de citire-scriere | * 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 | * Se vor scrie contrâgerile necesare pentru a conecta | ||
** adresa la SW7-4 și data de intrare la SW3-0. | ** adresa la SW7-4 și data de intrare la SW3-0. | ||
** semnalul de activare a scrierii la unul din butoane ( | ** semnalul de activare a scrierii la unul din butoane (KEY0 ... KEY3). | ||
** ieșirea memoriei la | ** ieșirea memoriei la LEDR3-0. | ||
** intrarea de ceas a memoriei la | ** 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 == | == Exercițiu == | ||
*Descrieți în Verilog o memorie RAM 16x4b cu două porturi: | *Descrieți în Verilog o memorie RAM 16x4b cu două porturi: | ||
** Un port de scriere (Write-Only) cu următoarele semnale: | ** Un port sincron de scriere (Write-Only) cu următoarele semnale: | ||
*** WR_ADDR - adresa la care se scrie | *** WR_ADDR - adresa la care se scrie | ||
*** WR_EN - comanda de scriere | *** WR_EN - comanda de scriere | ||
*** WR_DATA - datele scrise | *** WR_DATA - datele scrise | ||
** Un port de citire (Read-Only) cu următoarele semnale: | ** Un port sincron de citire (Read-Only) cu următoarele semnale: | ||
*** RD_ADDR - adresa citită | *** RD_ADDR - adresa citită | ||
*** RD_DATA - datele citite | *** RD_DATA - datele citite | ||
* Memoria va fi instanțiată | * Memoria va fi instanțiată în modulul TOP conform figurii următoare: | ||
* Scrieți constrângerile necesare pentru a conecta | [[Fișier:Cid_lab6.jpg]] | ||
** | |||
** | <syntaxhighlight lang="verilog"> | ||
** | module COUNTER( | ||
** | input clk, | ||
** intrarea de ceas a | 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
- Logică booleană și sisteme de numerație
- Sintaxă Verilog
- Utilizarea programului de sinteză Altera Quartus II
- Lista pinilor plăcii DE1
- Circuite secvențiale
- Numărătorul
- Memorii RAM
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
- Un port sincron de scriere (Write-Only) cu următoarele semnale:
- Memoria va fi instanțiată în modulul TOP conform figurii următoare:
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