Skip to content

callmepillo/ProiectED

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

10 Commits
 
 
 
 
 
 
 
 

Repository files navigation

ProiectED

PROIECT ELECTRONICA DIGITALA 2024

Autori:

  • Scutariu Darius-Ioan
  • Ignat Ionut-Sebastian
  • Iliescu Matei

Modulul ALU_v4

Modulul ALU_v4 implementat in acest proiect este capabil sa efectueze operatii aritmetico-logice intre doi operanzi pe 4 biti (A si B), rezultatul fiind salvat intr-un vector logic de 8 biti si afisat in reprezentare binara pe 8 led-uri. Valoarea operanzilor si a tipului operatiei este stabilita cu ajutor-ul switch-urilor. Tipul operatiei (numit in modul OPCODE) este reprezentat de un vector logic de 4 biti, valorile de 8,4,2 si 1 (care corespun in binar la 1000,0100,0010,0001) corespunzand operatiilor de adunare, scadere, inmultire si impartire. Deoarece lucram cu numere intregi, pozitive pentru operatiile de scadere si impartire trebuie facute verificari suplimentare, astfel scaderea va fi facuta doar in modul, iar impartirea va fi efectuata doar daca impartitorul este diferit de 0.

Metoda de implementare

Vom utiliza programul de sinteza Vivado, limbajul VHDL si fisierul de constrangeri XDC pentru a genera un fisier bitstream necesar programarii unei placute FPGA, si anume Digilent BASYS 3.

Descrierea (scurtă) a sistemului de dezvoltare BASYS 3

Sistemul de dezvoltare BASYS 3, produs de Digilent, reprezinta o placuta FPGA (Field-Programmable Gate Array) menita utilizarii in medii academice pentru aprofundarea electronicii digitale si a limbajelor de descriere a hardware-ului precum VHDL. Placuta prezinta mai multe switch-uri, butoane si led-uri precum si alte facilitati precum un clock si un display pe 7 segemente, toate acestea ajutand utilizator sa testeze implementarea dorita.

Editarea fisierului VHDL

Pentru acest proiect, pe langa libraria IEEE.STD_LOGIC_1164.ALL, trebuie sa includem si libraria IEEE.NUMERIC_STD.ALL pentru a putea transforma vectorii logici in numere intregi si pentru a efectua operatiile. Au fost definite entitatea ALU, precum si arhitectura ALU_Behavioral, prima dintre ele avand porturile de intrare A_in, B_in si OPCODE_in (toate de tipul std_logic_vector(3 downto 0)) si portul de iesire C_out (de tipul std_logic_vector(7 downto 0)). Desi cei doi operanzi sunt pe 4 biti, rezultatul trebuie salvat pe 8 biti pentru a putea realiza operatia de inmultire. In cadrul arhitecturii au fost definite semnalele res, A, B, opt, ultimele 3 luand valorile lui A_in, B_in, respectiv OPCODE_in. Cu aceste semnale drept argumente, va incepe un proces care va verifica tipul operatiei printr-o structura "case" care va comparara opt cu 1000 pentru adunare, 0100 pentru scadere, 0010 pentru inmultire si 0001 pentru impartire. Pentru a putea utiliza vectorii asemenea unor numere intregi, acestia vor trebui transformati folosing functia unsigned() si resize(), cea din urma fiind necesara pentru salvarea rezultatului adunarii, scaderii si impartirii pe 8 biti. In cadrul scaderii si impartiri, este verificata inainte validitatea operatiilor, cu ajutorul structurii decizionale if. La finalul procesului, in res va fi salvat rezultatul operatiei, fiind nevoie doar sa salvam in C_out datele din res si sa afisam pe led-uri.

Editarea fisierului de constrangeri

In fisierul de constrangeri au fost activate 12 switch-uri, 4 pentru fiecare operator (A_in si B_in) si 4 pentru OPCODE_in. De asemenea, au fost folosite 8 led-uri pentru afisarea rezultatului din C_out.

Descrierea paşilor de sinteză şi testarea circuitului rezultat

Dupa editarea fisierului VHDL si a fisierului de constrangeri, proiectul a trecut mai intai prin etapa de sintetizare. Aici au fost verificate (si corectate) avertizarile si erorile date de program. Dupa aceasta faza a urmat etapa de implementare, reluand din nou procesul de verificare, astfel incat, in final, sa putem genera fisierul bitstream. Placuta a fost selectata in Hardware Manager si programata cu fisierul bitstream generat anterior, urmand o serie de teste pe baza intrarilor, atat "clasice", cat si cazuri limita (impartire la 0).

Concluzii

Proiectul pune in evidenta maniera in care limbajul VHDL trateaza tipul datelor, in special al vectorilor logici fiind nevoiti sa utilizam libraria IEEE.NUMERIC_STD pentru a putea transforma vectorii logici de 4 biti in tipuri compatibile cu operatiile necesare. Totodata, au fost utilizate structuri precum "process" si "case" pentru implementarea comportamentului dorit, astfel aprofunzand limabjul VHDL si folosind manualul de referinta pentru corectitudinea algoritmului.

About

PROIECT ELECTRONICA DIGITALA 2024

Resources

Stars

3 stars

Watchers

1 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors