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

De la WikiLabs
Jump to navigationJump to search
 
(Nu s-au afișat 39 de versiuni intermediare efectuate de alți 5 utilizatori)
Linia 1: Linia 1:
 
== Noțiuni și cunoștințe necesare ==
 
== Noțiuni și cunoștințe necesare ==
  
 +
* [[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]
 
* [[Introducere. Verilog HDL și ModelSim|Logică booleană și sisteme de numerație]]
 
* [[Introducere. Verilog HDL și ModelSim|Logică booleană și sisteme de numerație]]
* Noțiuni de sintaxă [[Verilog]] ([[Verilog#Module (sintetizabile)|module]], [[Verilog#Interfața modulelor Verilog|interfață]], implementare cu blocuri [[Verilog#Blocuri assign|assign]] și blocuri de [[Verilog#Blocuri de instanțiere|instanțiere]], [[Verilog#Operatori|operatori]])
+
* Noțiuni de sintaxă [[Verilog]]
* [[Verilog#Fire (wire) și registre (reg)|Fire și registre]], [[Verilog#Module de test (nesintetizabile)|Module de test]]
+
* [[Dispozitiv_de_IO:_Afișajul_cu_7_segmente|Afișajul cu 7 segmente]]. [http://wiki.dcae.pub.ro/images/a/a5/Numerele_hexa_pe_afisajul_cu_7_segmente.pdf Numerele hexa pe afisajul cu 7 segmente]
* Utilizarea programului de simulare [[ModelSim]]
 
* [[Introducere în sinteza pe FPGA. Xilinx ISE]]
 
* Utilizarea programului de sinteză [[Tutorial Xilinx ISE|Xilinx ISE]]
 
  
== Cerințe ==
+
== Exemplul 1 ==
  
Realizați una din cerințele de mai jos:
+
Realizați un decodor de doi biți folosind un bloc '''case'''. Testați decodorul legând intrările la switch-uri și ieșirile la led-uri.
# Descrieți în Verilog o poartă ȘI. Scrieți un modul de test pentru acest circuit în care să-l testați exhaustiv (toate combinațiile posibile de intrări). Simulați circuitul în ModelSim. Sintetizați circuitul și programați placa FPGA disponibilă pentru a implementa fizic funcția dorită. Asignați intrările la elemente de tip '''switch''' și ieșirile la elemente de tip '''led'''.
 
# Descrieți în Verilog o poartă SAU. Scrieți un modul de test pentru acest circuit în care să-l testați exhaustiv (toate combinațiile posibile de intrări). Simulați circuitul în ModelSim. Sintetizați circuitul și programați placa FPGA disponibilă pentru a implementa fizic funcția dorită. Asignați intrările la elemente de tip '''switch''' și ieșirile la elemente de tip '''led'''.
 
# Descrieți în Verilog o poartă SAU EXCLUSIV. Scrieți un modul de test pentru acest circuit în care să-l testați exhaustiv (toate combinațiile posibile de intrări). Simulați circuitul în ModelSim. Sintetizați circuitul și programați placa FPGA disponibilă pentru a implementa fizic funcția dorită. Asignați intrările la elemente de tip '''switch''' și ieșirile la elemente de tip '''led'''.
 
# Descrieți în Verilog o poartă SI NU. Scrieți un modul de test pentru acest circuit în care să-l testați exhaustiv (toate combinațiile posibile de intrări). Simulați circuitul în ModelSim. Sintetizați circuitul și programați placa FPGA disponibilă pentru a implementa fizic funcția dorită. Asignați intrările la elemente de tip '''switch''' și ieșirile la elemente de tip '''led'''.
 
# Descrieți în Verilog o poartă SAU NU. Scrieți un modul de test pentru acest circuit în care să-l testați exhaustiv (toate combinațiile posibile de intrări). Simulați circuitul în ModelSim. Sintetizați circuitul și programați placa FPGA disponibilă pentru a implementa fizic funcția dorită. Asignați intrările la elemente de tip '''switch''' și ieșirile la elemente de tip '''led'''.
 
# Descrieți în Verilog o poartă SAU NU EXCLUSIV. Scrieți un modul de test pentru acest circuit în care să-l testați exhaustiv (toate combinațiile posibile de intrări). Simulați circuitul în ModelSim. Sintetizați circuitul și programați placa FPGA disponibilă pentru a implementa fizic funcția dorită. Asignați intrările la elemente de tip '''switch''' și ieșirile la elemente de tip '''led'''.
 
# Descrieți în Verilog un scăzător pe 6 biți. Scrieți un modul de test pentru acest circuit în care să-l testați 4 - 5 seturi de valori de intrare, inclusiv situații limită (valori foarte mari/ foarte mici, etc.). Simulați circuitul în ModelSim. Sintetizați circuitul și programați placa FPGA disponibilă pentru a implementa fizic funcția dorită. Asignați intrările la elemente de tip '''switch''' sau '''button''' și ieșirile la elemente de tip '''led'''.
 
# Descrieți în Verilog un înmulțitor pe 4 biți. Scrieți un modul de test pentru acest circuit în care să-l testați 4 - 5 seturi de valori de intrare, inclusiv situații limită (valori foarte mari/ foarte mici, etc.). Simulați circuitul în ModelSim. Sintetizați circuitul și programați placa FPGA disponibilă pentru a implementa fizic funcția dorită. Asignați intrările la elemente de tip '''switch''' și ieșirile la elemente de tip '''led'''.
 
  
== Cerințe suplimentare (opționale) ==
+
== Exemplul 2 ==
 +
 +
Realizați un transcodor pentru afișajul cu 7 segmente, folosind un bloc '''case''', care să poată afișa valorile de la 0 la 3. Intrarea modulului se va numi '''value''' iar ieșirea '''out_seg'''.
 +
Testați decodorul aplicând intrarea pe SW1 și SW0 și afișând ieșirea pe afișajul cu 7 segmente, cifra din dreapta (Digit0).
  
# Descrieți în Verilog un circuit care să poată face suma sau diferența a două numere, conform unui bit de selecție, care este și el intrare a circuitului (Hint: folosiți un operator condițional). Scrieți un modul de test pentru acest circuit în care să-l testați cu câteva perechi de valori de intrare. Simulați circuitul în ModelSim. Sintetizați circuitul și programați placa FPGA disponibilă pentru a implementa fizic funcția dorită. Asignați intrările la elemente de tip '''switch''' sau '''button''' și ieșirile la elemente de tip '''led'''.
+
== Exerciții ==
# Descrieți în Verilog un circuit care să poată face suma, diferența, produsul sau maximul a două numere, conform unei intrări de selecție. Descrieți circuitul în 3 moduri: folosind un bloc '''assign''' și operatorul condițional, folosind un bloc '''always''' și sub-blocuri '''if - else''', și folosind un bloc '''always''' și un sub-bloc '''case''' (vezi [[Verilog#Blocuri always combinaționale|implementarea cu blocuri always combinaționale]]). Scrieți un modul de test pentru acest circuit în care să-l testați cu câteva perechi de valori de intrare. Simulați circuitul în ModelSim. Sintetizați circuitul și programați placa FPGA disponibilă pentru a implementa fizic funcția dorită. Asignați intrările la elemente de tip '''switch''' sau '''button''' și ieșirile la elemente de tip '''led'''.
+
 
# [[Fișier:lab2.png|thumb|Schema exercițiu 3]] Descrieți în Verilog o poartă NOR. Folosing acest modul, fire și blocuri de instanțiere, descrieți modulul din figura alăturată. Scrieți un modul de test în care simulați comportamentul circuitului la tranzițiile (S=0, R=1 -> S=0, R=0 -> S=1, R=0 -> S=0, R=0). Explicați de ce, în cele două cazuri în care intrările sunt S=0, R=0, ieșirea diferă. Ce concluzii puteți trage despre comportamentul circuitului?
+
Următoarele exerciții folosesc transcodorul binar - 7 segemente pentru afișarea în hexazecimal a rezultatului unei operații simple. Pentru a vă asigura că transcodorul este scris corect, la pct. a veți verifica funcționarea lui. Proiectul pe care trebuie să-l trimiteți la final este cel de la pct. b.
 +
 
 +
 
 +
 
 +
=== Exercitiul 1===
 +
a. Completați și modificații transcodorul de la exemplul 2 astfel încât să poată afișa valorile de la 0 la 15, în baza 16 (10 = A, 11 = b, 12 = C, 13 = d, 14 = E, 15 = F) '''pe a doua poziție din dreapta'''.
 +
*Denumiți modulul '''afisaj7seg'''
 +
*Biții '''out_seg''' corespund cu segmentele în modul următor:
 +
 
 +
**Bitul 6 corespunde segmentului 0
 +
**Bitul 5 corespunde segmentului 1
 +
**Bitul 4 corespunde segmentului 2
 +
**Bitul 3 corespunde segmentului 3
 +
**Bitul 2 corespunde segmentului 4
 +
**Bitul 1 corespunde segmentului 5
 +
**Bitul 0 corespunde segmentului 6
 +
 
 +
Verificați funcționarea corectă a afișajului pe placa DE1, conectând intrarea pe SW3-SW0. Modificați pinii la ieșire astfel încât valoarea să fie afișată pe '''Digit 1'''.
 +
 
 +
b. Realizați un circuit care adună două numere binare pe 3 biți, iar rezultatul, pe 4 biți, va fi afișat ca cifră hexazecimală cu ajutorul transcodorului de la pct. a).
 +
Restricții:
 +
 
 +
*Creați un nou proiect, în care modulul top-level este denumit '''top'''.
 +
*Cele două intrări se vor nota cu a, respectiv b, și se vor conecta la switchurile SW2-SW0 (corespunzător biților 2->0 ai lui '''a''', în această ordine), respectiv SW9-SW7 (corespunzător biților 2->0 ai lui '''b''', în această ordine) .
 +
*Ieșirile se vor conecta la pinii corespunzători pentru afișajul cu 7 segmente, Digit 1.
 +
*Sumatorul și transcodorul vor fi descrise în module diferite (denumite '''sumator''' și '''afisaj7seg''', scrise în fișiere diferite, și instanțiate în modulul de ''top''.
 +
 
 +
===Exercitiul 2===
 +
 
 +
a. Completați și modificații transcodorul de la exemplul 2 astfel încât poată afișa valorile de la 0 la 15, în baza 16 (10 = A, 11 = b, 12 = C, 13 = d, 14 = E, 15 = F) '''pe poziția din stânga'''.
 +
*Denumiți modulul '''afisaj7seg'''
 +
*Biții '''out_seg''' corespund cu segmentele în modul următor:
 +
 
 +
**Bitul 6 corespunde segmentului 1
 +
**Bitul 5 corespunde segmentului 2
 +
**Bitul 4 corespunde segmentului 3
 +
**Bitul 3 corespunde segmentului 4
 +
**Bitul 2 corespunde segmentului 5
 +
**Bitul 1 corespunde segmentului 6
 +
**Bitul 0 corespunde segmentului 0
 +
 
 +
Verificați funcționarea corectă a afișajului pe placa DE1, conectând intrarea pe SW5-SW2. Modificați pinii la ieșire astfel încât valoarea să fie afișată pe '''Digit 3'''.
 +
 
 +
b. Realizați un circuit care înmulțește două numere binare, numărul a, pe 3 biți, și numărul b, pe 2 biți, iar rezultatul, pe 4 biți, va fi afișat ca cifră hexazecimală cu ajutorul transcodorului de la pct. a).  
 +
Restricții:
 +
 
 +
*Creați un nou proiect, în care modulul top-level este denumit '''top'''.
 +
*Cele două intrări se vor nota cu a, respectiv b, și se vor conecta la switchurile SW9-SW7 (corespunzător biților 2->0 ai lui '''a''', în această ordine), respectiv SW2-SW1 (corespunzător biților 1->0 ai lui '''b''', în această ordine) .
 +
*Ieșirile se vor conecta la pinii corespunzători pentru afișajul cu 7 segmente, Digit 3.
 +
*Inmulțitorul și transcodorul vor fi descrise în module diferite (denumite '''produs''' și '''afisaj7seg''', scrise în fișiere diferite, și instanțiate în modulul de ''top''.
 +
 
 +
''Indicație:'' Produsul celor două numere (ieșirea înmulțitorului) este un număr pe 5 biți, notat, de ex, '''prod'''. Dacă rezultatul depășește valoarea 15, la ieșire vom afișa „eroare”, care poate fi simbolizată, de ex, de o liniuță pe poziția centrală (segmentul 6). Ieșirea modulului de top, notată out, se calculează în felul următor:
 +
 
 +
assign out = prod[4] ? 7'b1111101 : out_seg;
 +
 
 +
===Exercitiul 3===
 +
 
 +
a. Completați și modificații transcodorul de la exemplul 2 astfel încât să poată afișa valorile de la 0 la 15, în baza 16 (10 = A, 11 = b, 12 = C, 13 = d, 14 = E, 15 = F) '''pe a doua poziție din stânga'''.  
 +
*Denumiți modulul '''afisaj7seg'''
 +
*Biții '''out_seg''' corespund cu segmentele în modul următor:
 +
 
 +
**Bitul 6 corespunde segmentului 1
 +
**Bitul 5 corespunde segmentului 3
 +
**Bitul 4 corespunde segmentului 2
 +
**Bitul 3 corespunde segmentului 6
 +
**Bitul 2 corespunde segmentului 4
 +
**Bitul 1 corespunde segmentului 5
 +
**Bitul 0 corespunde segmentului 0
 +
 
 +
Verificați funcționarea corectă a afișajului pe placa DE1, conectând intrarea pe SW4-SW1. Modificați pinii la ieșire astfel încât valoarea să fie afișată pe '''Digit 2'''.
 +
 
 +
b. Realizați un circuit care face operația SAU EXCLUSIV (bit cu bit) între 2 numere binare pe 4 biți, iar rezultatul, pe 4 biți, va fi afișat ca cifră hexazecimală cu ajutorul transcodorului de la pct. a).  
 +
Restricții:
 +
 
 +
*Creați un nou proiect, în care modulul top-level este denumit '''top'''.
 +
*Cele două intrări se vor nota cu a, respectiv b, și se vor conecta la switchurile SW3-SW0 (corespunzător biților 3->0 ai lui '''a''', în această ordine), respectiv SW9-SW6 (corespunzător biților 3->0 ai lui '''b''', în această ordine) .
 +
*Ieșirile se vor conecta la pinii corespunzători pentru afișajul cu 7 segmente, Digit 2.
 +
*Circuitul logic și transcodorul vor fi descrise în module diferite (denumite '''sau_exclusiv''' și '''afisaj7seg''', scrise în fișiere diferite, și instanțiate în modulul de ''top''.
 +
 
 +
===Exercitiul 4===
 +
 
 +
a. Completați și modificații transcodorul de la exemplul 2 astfel încât să poată afișa valorile de la 0 la 15, în baza 16 (10 = A, 11 = b, 12 = C, 13 = d, 14 = E, 15 = F) '''pe poziția din stânga'''.
 +
*Denumiți modulul '''afisaj7seg'''
 +
*Biții '''out_seg''' corespund cu segmentele în modul următor:
 +
 
 +
**Bitul 6 corespunde segmentului 2
 +
**Bitul 5 corespunde segmentului 4
 +
**Bitul 4 corespunde segmentului 6
 +
**Bitul 3 corespunde segmentului 3
 +
**Bitul 2 corespunde segmentului 5
 +
**Bitul 1 corespunde segmentului 1
 +
**Bitul 0 corespunde segmentului 0
 +
 
 +
Verificați funcționarea corectă a afișajului pe placa DE1, conectând intrarea pe SW9-SW6. Modificați pinii la ieșire astfel încât valoarea să fie afișată pe '''Digit 3'''.
 +
 
 +
b. Realizați un circuit care adună două numere binare pe 3 biți, iar rezultatul, pe 4 biți, va fi afișat ca cifră hexazecimală cu ajutorul transcodorului de la pct. a).  
 +
Restricții:
 +
 
 +
*Creați un nou proiect, în care modulul top-level este denumit '''top'''.
 +
*Cele două intrări se vor nota cu in1, respectiv in2, și se vor conecta la switchurile SW7-SW5 (corespunzător biților 2->0 ai lui '''in1''', în această ordine), respectiv SW4-SW2 (corespunzător biților 2->0 ai lui '''in2''', în această ordine) .
 +
*Ieșirile se vor conecta la pinii corespunzători pentru afișajul cu 7 segmente, Digit 3.
 +
*Sumatorul și transcodorul vor fi descrise în module diferite (denumite '''sumator''' și '''afisaj7seg''', scrise în fișiere diferite, și instanțiate în modulul de ''top''.
 +
 
 +
===Exercitiul 5===
 +
 
 +
a. Completați și modificații transcodorul de la exemplul 2 astfel încât să poată afișa valorile de la 0 la 15, în baza 16 (10 = A, 11 = b, 12 = C, 13 = d, 14 = E, 15 = F) '''pe poziția a doua din stânga'''.
 +
*Denumiți modulul '''afisaj7seg'''
 +
*Biții '''out_seg''' corespund cu segmentele în modul următor:
 +
 
 +
**Bitul 6 corespunde segmentului 3
 +
**Bitul 5 corespunde segmentului 4
 +
**Bitul 4 corespunde segmentului 1
 +
**Bitul 3 corespunde segmentului 2
 +
**Bitul 2 corespunde segmentului 0
 +
**Bitul 1 corespunde segmentului 5
 +
**Bitul 0 corespunde segmentului 6
 +
 
 +
Verificați funcționarea corectă a afișajului pe placa DE1, conectând intrarea pe SW8-SW5. Modificați pinii la ieșire astfel încât valoarea să fie afișată pe '''Digit 2'''.
 +
 
 +
b. Realizați un circuit care înmulțește două numere binare, numărul in1, pe 2 biți, și numărul in2, pe 3 biți, iar rezultatul, pe 4 biți, va fi afișat ca cifră hexazecimală cu ajutorul transcodorului de la pct. a).
 +
Restricții:
 +
 
 +
*Creați un nou proiect, în care modulul top-level este denumit '''top'''.
 +
*Cele două intrări se vor nota cu in1, respectiv in2, și se vor conecta la switchurile SW3-SW2 (corespunzător biților 1->0 ai lui '''in1''', în această ordine), respectiv SW9-SW7 (corespunzător biților 2->0 ai lui '''in2''', în această ordine) .
 +
*Ieșirile se vor conecta la pinii corespunzători pentru afișajul cu 7 segmente, Digit 2.
 +
*Inmulțitorul și transcodorul vor fi descrise în module diferite (denumite '''produs''' și '''afisaj7seg''', scrise în fișiere diferite, și instanțiate în modulul de ''top''.
 +
 
 +
''Indicație:'' Produsul celor două numere (ieșirea înmulțitorului) este un număr pe 5 biți, notat, de ex, '''prod'''. Dacă rezultatul depășește valoarea 15, la ieșire vom afișa „eroare”, care poate fi simbolizată, de ex, de o liniuță pe poziția centrală (segmentul 6). Ieșirea modulului de top, notată out, se calculează în felul următor:
 +
 
 +
assign out = prod[4] ? 7'b1111110 : out_seg;
 +
 
 +
===Exercitiul 6===
 +
 
 +
a. Completați și modificații transcodorul de la exemplul 2 astfel încât poată afișa valorile de la 0 la 15, în baza 16 (10 = A, 11 = b, 12 = C, 13 = d, 14 = E, 15 = F) '''pe a doua poziție din dreapta'''.
 +
*Denumiți modulul '''afisaj7seg'''
 +
*Biții '''out_seg''' corespund cu segmentele în modul următor:
 +
 
 +
**Bitul 6 corespunde segmentului 1
 +
**Bitul 5 corespunde segmentului 3
 +
**Bitul 4 corespunde segmentului 2
 +
**Bitul 3 corespunde segmentului 6
 +
**Bitul 2 corespunde segmentului 4
 +
**Bitul 1 corespunde segmentului 5
 +
**Bitul 0 corespunde segmentului 0
 +
 
 +
Verificați funcționarea corectă a afișajului pe placa DE1, conectând intrarea pe SW4-SW1. Modificați pinii la ieșire astfel încât valoarea să fie afișată pe '''Digit 1'''.
 +
 
 +
b. Realizați un circuit care face operația SAU  (bit cu bit) între 2 numere binare pe 4 biți, iar rezultatul, pe 4 biți, va fi afișat ca cifră hexazecimală cu ajutorul transcodorului de la pct. a).
 +
Restricții:
 +
 
 +
*Creați un nou proiect, în care modulul top-level este denumit '''top'''.
 +
*Cele două intrări se vor nota cu in1, respectiv in2, și se vor conecta la switchurile SW8-SW5 (corespunzător biților 3->0 ai lui '''in1''', în această ordine), respectiv SW4-SW1 (corespunzător biților 3->0 ai lui '''in2''', în această ordine) .
 +
*Ieșirile se vor conecta la pinii corespunzători pentru afișajul cu 7 segmente, Digit1.
 +
*Circuitul logic și transcodorul vor fi descrise în module diferite (denumite '''sau''' și '''afisaj7seg''', scrise în fișiere diferite, și instanțiate în modulul de ''top''.
 +
 
 +
== 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:
 +
*Trei fișiere Verilog cu extensia .v care conțin descrierea Verilog a circuitului logic, a transcodorului și a modulului de top.
 +
*Un fișier de constrângeri, cu extensia .qsf
 +
*Un fișier de tip proiect Quartus, cu extensia .qpf
 +
Atentie, arhiva va contine doar cele 5 fisiere (fara directoare).
 +
 
 +
Subiectul mesajului de e-mail trebuie să respecte formatul <span style="color: red; font-weight: bold">[Nume]_[Prenume]_[Grupa]_7seg_[Nr. Exercitiu]</span> de exemplu Petrica_Lucian_423B_7seg_4
 +
 
 +
 
 +
<!--
 +
Creați un proiect Xilinx ISE, descrierea Verilog și constrângerile necesare pentru a implementa pe placa Nexys2 circuitul care afișează, pe una din cifrele afișajului cu 7 segmente, primele 4 numere (0, 1, 2, 3), atunci când valoarea binară corespunzătoare este formată prin apăsarea butoanelor BTN0 și BTN1. Astfel, circuitul descris trebuie să respecte următoarele cerințe:
 +
* are o intrare numită '''binary_input''' de doi biți, bitul cel mai putin semnificativ fiind conectat la BTN0, iar bitul cel mai semnificativ fiind conectat la BTN1
 +
* are ieșirile necesare pentru activarea afișajului cu 7 segmente, denumite '''ca''', '''cb''', '''cc''', '''cd''', '''ce''', '''cf''', '''cg''', '''cp'''
 +
* are ieșirile necesare pentru controlul aprinderii cifrei, denumite '''an0''', '''an1''', '''an2''', '''an3'''
 +
* folosește operatori logici și blocuri de tip '''assign'''
 +
-->
 +
 
 +
== Recomandări pentru cadrele didactice ==
 +
* Se vor introduce noțiunile necesare folosirii [[Dispozitiv_de_IO:_Afișajul_cu_7_segmente|afișajului cu 7 segmente]]
 +
<!--* În vederea rezolvării cerinței, cadrul didactic va desena tabela de adevăr a funcției logice care activează segmentul CA, și va ghida studenții pentru identificarea funcției logice și implementarea ei în Verilog folosind operatori logici.-->

Versiunea curentă din 12 martie 2018 08:40

Noțiuni și cunoștințe necesare

Exemplul 1

Realizați un decodor de doi biți folosind un bloc case. Testați decodorul legând intrările la switch-uri și ieșirile la led-uri.

Exemplul 2

Realizați un transcodor pentru afișajul cu 7 segmente, folosind un bloc case, care să poată afișa valorile de la 0 la 3. Intrarea modulului se va numi value iar ieșirea out_seg. Testați decodorul aplicând intrarea pe SW1 și SW0 și afișând ieșirea pe afișajul cu 7 segmente, cifra din dreapta (Digit0).

Exerciții

Următoarele exerciții folosesc transcodorul binar - 7 segemente pentru afișarea în hexazecimal a rezultatului unei operații simple. Pentru a vă asigura că transcodorul este scris corect, la pct. a veți verifica funcționarea lui. Proiectul pe care trebuie să-l trimiteți la final este cel de la pct. b.


Exercitiul 1

a. Completați și modificații transcodorul de la exemplul 2 astfel încât să poată afișa valorile de la 0 la 15, în baza 16 (10 = A, 11 = b, 12 = C, 13 = d, 14 = E, 15 = F) pe a doua poziție din dreapta.

  • Denumiți modulul afisaj7seg
  • Biții out_seg corespund cu segmentele în modul următor:
    • Bitul 6 corespunde segmentului 0
    • Bitul 5 corespunde segmentului 1
    • Bitul 4 corespunde segmentului 2
    • Bitul 3 corespunde segmentului 3
    • Bitul 2 corespunde segmentului 4
    • Bitul 1 corespunde segmentului 5
    • Bitul 0 corespunde segmentului 6

Verificați funcționarea corectă a afișajului pe placa DE1, conectând intrarea pe SW3-SW0. Modificați pinii la ieșire astfel încât valoarea să fie afișată pe Digit 1.

b. Realizați un circuit care adună două numere binare pe 3 biți, iar rezultatul, pe 4 biți, va fi afișat ca cifră hexazecimală cu ajutorul transcodorului de la pct. a). Restricții:

  • Creați un nou proiect, în care modulul top-level este denumit top.
  • Cele două intrări se vor nota cu a, respectiv b, și se vor conecta la switchurile SW2-SW0 (corespunzător biților 2->0 ai lui a, în această ordine), respectiv SW9-SW7 (corespunzător biților 2->0 ai lui b, în această ordine) .
  • Ieșirile se vor conecta la pinii corespunzători pentru afișajul cu 7 segmente, Digit 1.
  • Sumatorul și transcodorul vor fi descrise în module diferite (denumite sumator și afisaj7seg, scrise în fișiere diferite, și instanțiate în modulul de top.

Exercitiul 2

a. Completați și modificații transcodorul de la exemplul 2 astfel încât să poată afișa valorile de la 0 la 15, în baza 16 (10 = A, 11 = b, 12 = C, 13 = d, 14 = E, 15 = F) pe poziția din stânga.

  • Denumiți modulul afisaj7seg
  • Biții out_seg corespund cu segmentele în modul următor:
    • Bitul 6 corespunde segmentului 1
    • Bitul 5 corespunde segmentului 2
    • Bitul 4 corespunde segmentului 3
    • Bitul 3 corespunde segmentului 4
    • Bitul 2 corespunde segmentului 5
    • Bitul 1 corespunde segmentului 6
    • Bitul 0 corespunde segmentului 0

Verificați funcționarea corectă a afișajului pe placa DE1, conectând intrarea pe SW5-SW2. Modificați pinii la ieșire astfel încât valoarea să fie afișată pe Digit 3.

b. Realizați un circuit care înmulțește două numere binare, numărul a, pe 3 biți, și numărul b, pe 2 biți, iar rezultatul, pe 4 biți, va fi afișat ca cifră hexazecimală cu ajutorul transcodorului de la pct. a). Restricții:

  • Creați un nou proiect, în care modulul top-level este denumit top.
  • Cele două intrări se vor nota cu a, respectiv b, și se vor conecta la switchurile SW9-SW7 (corespunzător biților 2->0 ai lui a, în această ordine), respectiv SW2-SW1 (corespunzător biților 1->0 ai lui b, în această ordine) .
  • Ieșirile se vor conecta la pinii corespunzători pentru afișajul cu 7 segmente, Digit 3.
  • Inmulțitorul și transcodorul vor fi descrise în module diferite (denumite produs și afisaj7seg, scrise în fișiere diferite, și instanțiate în modulul de top.

Indicație: Produsul celor două numere (ieșirea înmulțitorului) este un număr pe 5 biți, notat, de ex, prod. Dacă rezultatul depășește valoarea 15, la ieșire vom afișa „eroare”, care poate fi simbolizată, de ex, de o liniuță pe poziția centrală (segmentul 6). Ieșirea modulului de top, notată out, se calculează în felul următor:

assign out = prod[4] ? 7'b1111101 : out_seg;

Exercitiul 3

a. Completați și modificații transcodorul de la exemplul 2 astfel încât să poată afișa valorile de la 0 la 15, în baza 16 (10 = A, 11 = b, 12 = C, 13 = d, 14 = E, 15 = F) pe a doua poziție din stânga.

  • Denumiți modulul afisaj7seg
  • Biții out_seg corespund cu segmentele în modul următor:
    • Bitul 6 corespunde segmentului 1
    • Bitul 5 corespunde segmentului 3
    • Bitul 4 corespunde segmentului 2
    • Bitul 3 corespunde segmentului 6
    • Bitul 2 corespunde segmentului 4
    • Bitul 1 corespunde segmentului 5
    • Bitul 0 corespunde segmentului 0

Verificați funcționarea corectă a afișajului pe placa DE1, conectând intrarea pe SW4-SW1. Modificați pinii la ieșire astfel încât valoarea să fie afișată pe Digit 2.

b. Realizați un circuit care face operația SAU EXCLUSIV (bit cu bit) între 2 numere binare pe 4 biți, iar rezultatul, pe 4 biți, va fi afișat ca cifră hexazecimală cu ajutorul transcodorului de la pct. a). Restricții:

  • Creați un nou proiect, în care modulul top-level este denumit top.
  • Cele două intrări se vor nota cu a, respectiv b, și se vor conecta la switchurile SW3-SW0 (corespunzător biților 3->0 ai lui a, în această ordine), respectiv SW9-SW6 (corespunzător biților 3->0 ai lui b, în această ordine) .
  • Ieșirile se vor conecta la pinii corespunzători pentru afișajul cu 7 segmente, Digit 2.
  • Circuitul logic și transcodorul vor fi descrise în module diferite (denumite sau_exclusiv și afisaj7seg, scrise în fișiere diferite, și instanțiate în modulul de top.

Exercitiul 4

a. Completați și modificații transcodorul de la exemplul 2 astfel încât să poată afișa valorile de la 0 la 15, în baza 16 (10 = A, 11 = b, 12 = C, 13 = d, 14 = E, 15 = F) pe poziția din stânga.

  • Denumiți modulul afisaj7seg
  • Biții out_seg corespund cu segmentele în modul următor:
    • Bitul 6 corespunde segmentului 2
    • Bitul 5 corespunde segmentului 4
    • Bitul 4 corespunde segmentului 6
    • Bitul 3 corespunde segmentului 3
    • Bitul 2 corespunde segmentului 5
    • Bitul 1 corespunde segmentului 1
    • Bitul 0 corespunde segmentului 0

Verificați funcționarea corectă a afișajului pe placa DE1, conectând intrarea pe SW9-SW6. Modificați pinii la ieșire astfel încât valoarea să fie afișată pe Digit 3.

b. Realizați un circuit care adună două numere binare pe 3 biți, iar rezultatul, pe 4 biți, va fi afișat ca cifră hexazecimală cu ajutorul transcodorului de la pct. a). Restricții:

  • Creați un nou proiect, în care modulul top-level este denumit top.
  • Cele două intrări se vor nota cu in1, respectiv in2, și se vor conecta la switchurile SW7-SW5 (corespunzător biților 2->0 ai lui in1, în această ordine), respectiv SW4-SW2 (corespunzător biților 2->0 ai lui in2, în această ordine) .
  • Ieșirile se vor conecta la pinii corespunzători pentru afișajul cu 7 segmente, Digit 3.
  • Sumatorul și transcodorul vor fi descrise în module diferite (denumite sumator și afisaj7seg, scrise în fișiere diferite, și instanțiate în modulul de top.

Exercitiul 5

a. Completați și modificații transcodorul de la exemplul 2 astfel încât să poată afișa valorile de la 0 la 15, în baza 16 (10 = A, 11 = b, 12 = C, 13 = d, 14 = E, 15 = F) pe poziția a doua din stânga.

  • Denumiți modulul afisaj7seg
  • Biții out_seg corespund cu segmentele în modul următor:
    • Bitul 6 corespunde segmentului 3
    • Bitul 5 corespunde segmentului 4
    • Bitul 4 corespunde segmentului 1
    • Bitul 3 corespunde segmentului 2
    • Bitul 2 corespunde segmentului 0
    • Bitul 1 corespunde segmentului 5
    • Bitul 0 corespunde segmentului 6

Verificați funcționarea corectă a afișajului pe placa DE1, conectând intrarea pe SW8-SW5. Modificați pinii la ieșire astfel încât valoarea să fie afișată pe Digit 2.

b. Realizați un circuit care înmulțește două numere binare, numărul in1, pe 2 biți, și numărul in2, pe 3 biți, iar rezultatul, pe 4 biți, va fi afișat ca cifră hexazecimală cu ajutorul transcodorului de la pct. a). Restricții:

  • Creați un nou proiect, în care modulul top-level este denumit top.
  • Cele două intrări se vor nota cu in1, respectiv in2, și se vor conecta la switchurile SW3-SW2 (corespunzător biților 1->0 ai lui in1, în această ordine), respectiv SW9-SW7 (corespunzător biților 2->0 ai lui in2, în această ordine) .
  • Ieșirile se vor conecta la pinii corespunzători pentru afișajul cu 7 segmente, Digit 2.
  • Inmulțitorul și transcodorul vor fi descrise în module diferite (denumite produs și afisaj7seg, scrise în fișiere diferite, și instanțiate în modulul de top.

Indicație: Produsul celor două numere (ieșirea înmulțitorului) este un număr pe 5 biți, notat, de ex, prod. Dacă rezultatul depășește valoarea 15, la ieșire vom afișa „eroare”, care poate fi simbolizată, de ex, de o liniuță pe poziția centrală (segmentul 6). Ieșirea modulului de top, notată out, se calculează în felul următor:

assign out = prod[4] ? 7'b1111110 : out_seg;

Exercitiul 6

a. Completați și modificații transcodorul de la exemplul 2 astfel încât să poată afișa valorile de la 0 la 15, în baza 16 (10 = A, 11 = b, 12 = C, 13 = d, 14 = E, 15 = F) pe a doua poziție din dreapta.

  • Denumiți modulul afisaj7seg
  • Biții out_seg corespund cu segmentele în modul următor:
    • Bitul 6 corespunde segmentului 1
    • Bitul 5 corespunde segmentului 3
    • Bitul 4 corespunde segmentului 2
    • Bitul 3 corespunde segmentului 6
    • Bitul 2 corespunde segmentului 4
    • Bitul 1 corespunde segmentului 5
    • Bitul 0 corespunde segmentului 0

Verificați funcționarea corectă a afișajului pe placa DE1, conectând intrarea pe SW4-SW1. Modificați pinii la ieșire astfel încât valoarea să fie afișată pe Digit 1.

b. Realizați un circuit care face operația SAU (bit cu bit) între 2 numere binare pe 4 biți, iar rezultatul, pe 4 biți, va fi afișat ca cifră hexazecimală cu ajutorul transcodorului de la pct. a). Restricții:

  • Creați un nou proiect, în care modulul top-level este denumit top.
  • Cele două intrări se vor nota cu in1, respectiv in2, și se vor conecta la switchurile SW8-SW5 (corespunzător biților 3->0 ai lui in1, în această ordine), respectiv SW4-SW1 (corespunzător biților 3->0 ai lui in2, în această ordine) .
  • Ieșirile se vor conecta la pinii corespunzători pentru afișajul cu 7 segmente, Digit1.
  • Circuitul logic și transcodorul vor fi descrise în module diferite (denumite sau și afisaj7seg, scrise în fișiere diferite, și instanțiate în modulul de top.

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:

  • Trei fișiere Verilog cu extensia .v care conțin descrierea Verilog a circuitului logic, a transcodorului și a modulului de top.
  • Un fișier de constrângeri, cu extensia .qsf
  • Un fișier de tip proiect Quartus, cu extensia .qpf

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

Subiectul mesajului de e-mail trebuie să respecte formatul [Nume]_[Prenume]_[Grupa]_7seg_[Nr. Exercitiu] de exemplu Petrica_Lucian_423B_7seg_4


Recomandări pentru cadrele didactice