Sunteți pe pagina 1din 15

UNITATE DE CALCUL ÎN VIRGULĂ MOBILĂ

ÎMPĂRȚIREA

Ghilea Dan Lucian

1
2
1.Introducere
1.1. Context
Obiectivul se concentrează asupra proiectării, implementării și evaluării unei
operațiuni esențiale, executate în conformitate cu standardul IEEE pentru
reprezentarea pe 32 de biți a numerelor în virgulă mobilă: împărțirea.

Această operațiune, de o complexitate semnificativă în cadrul setului de


operațiuni elementare, este efectuată de unitatea de calcul propusă pe numere
în virgulă mobilă cu precizie simplă.

Operația de împărțire în virgulă mobilă constă în determinarea câtului și restului


dintre doi operanzi, care au fiecare o mantisă și un exponent. Există mai multe
algoritmi și tehnici pentru a realiza această operație, cum ar fi împărțirea cu
refacerea restului parțial, împărțirea fără refacerea restului parțial, împărțirea
prin aproximare succesivă, etc.

→ Împărțirea cu refacerea restului parțial

→ Împărțirea fără refacerea restului parțial

→ Împărțirea prin aproximare succesivă

→ Împărțirea prin convergență liniară

→ Împărțirea prin metoda lui Newton-Raphson

→ Împărțirea prin metoda lui Goldschmidt

În era digitală actuală, unde procesarea eficientă a datelor este o cerință


stringentă, dispozitivul propus se dovedește a fi un instrument de înaltă
utilitate pentru cei care necesită un calculator capabil să efectueze operațiuni
de împărțire pe numere de 32 de biți.

3
Acesta poate fi integrat ca un modul suplimentar în diverse dispozitive, precum
un procesor sau microprocesor care ar putea beneficia de capacitatea de a
efectua această operațiune complexă. Alternativ, acesta poate fi conectat ca un
dispozitiv periferic la un sistem principal, care va emite comenzi constând din
operațiuni de împărțire.

În plus, standardul IEEE 754 este recunoscut ca un standard internațional de


către Organizația Internațională de Standardizare (ISO) și Comisia Electrotehnică
Internațională (IEC). De asemenea, este adoptat ca un standard național sau
regional de către multe țări și organizații. Standardul este utilizat pe scară
largă în industria semiconductorului, precum și în multe limbaje de programare,
biblioteci software, sisteme de operare și aplicații.

Standardul IEEE 754 este un exemplu remarcabil al cooperării dintre cercetatori,


ingineri, producatori și utilizatori din domeniul calculului numeric. Acest
standard a contribuit semnificativ la progresul științific și tehnic, precum și
la calitatea și fiabilitatea produselor și serviciilor bazate pe aritmetica în
virgulă mobilă.

1.2. Propunere de proiect


Dezvoltarea unei Unități Avansate de Calcul în Virgulă Mobilă pentru Operațiuni
Avansate de Împărțire.

Specificații Pentru a realiza acest obiectiv, vom utiliza limbajul VHDL, care
oferă un cadru robust pentru proiectarea structurilor de calcul complexe. Acesta
ne va permite să abordăm în mod modular diferitele elemente ale unității noastre
de calcul, asigurând o integrare fluentă și o implementare eficientă a
operațiilor de împărțire în virgulă mobilă.

Implementarea hardware a proiectului va fi realizată pe placa FPGA Digilent


Nexys 4 DDR. Această placă, recunoscută pentru performanța și adaptabilitatea
sa, ne va permite să integrăm unitatea noastră de calcul într-un mediu fizic
optimizat, capabil să susțină operațiile complexe de împărțire în virgulă mobilă.

4
În ceea ce privește introducerea operanzilor, vom implementa extensia PmodKYBD,
care facilitează interacțiunea cu unitatea noastră de calcul. Aceasta ne va
permite să dezvoltăm o interfață intuitivă și ușor de utilizat, asigurând o
introducere eficientă a operanzilor și o interacțiune optimizată între utilizator
și unitatea de calcul.

Rezultatele operațiilor de împărțire vor fi afișate sub formă de valori


hexazecimale pe un afișaj cu 7 segmente. În plus, vom utiliza LED-urile pentru
a semnala situații sau condiții specifice în cadrul operațiilor de împărțire,
contribuind astfel la o experiență de utilizare intuitivă și eficientă a unității
de calcul.

1.3. Planul proiectului


1.3.1. Studiu bibliografic

Colectarea informațiilor despre proiectarea circuitului de împărțire zecimală,


inclusiv a caracteristicilor sale principale.

1.3.2. Analiză și evaluare a performanței

Selecția unui set de instrucțiuni pentru a fi implementate și disponibile pentru


execuție în cadrul algoritmului de împărțire în virgulă mobilă. Asigurarea
furnizării numărului minim de instrucțiuni necesare și includerea cel puțin a
unei instrucțiuni de salt. Documentarea fiecărei instrucțiuni selectate.

1.3.3. Proiectare și implementare

???
1.3.4. Scriere program
Scrieți un program pentru a demonstra corectitudinea designului și încorporați-
l în proiect.

1.3.5. Testare și validare

5
Această etapă implică testarea riguroasă a sistemului de împărțire pentru a
valida funcționalitatea și precizia acestuia. Vom efectua o serie de teste pentru
a ne asigura că sistemul funcționează corect și produce rezultate precise, pentru
fiecare componentă implicată în scrierea programului.

1.3.6. Rută alternativă

Studiu Bibliografic
Reprezentare conform standardului IEEE 754 pe 32 biți

(−1)semn × 2exponent −127 × 1.mantisa


În procesul de conversie a unui număr real în formatul IEEE 754 pe 32 de biți,
fiecare componentă a reprezentării are un număr specific de biți alocat. Această
alocare este esențială pentru a asigura precizia și eficiența operațiilor pe
numere în virgulă mobilă.

Semnul: Acesta este reprezentat printr-un singur bit, alocat în cel mai
semnificativ bit al reprezentării. Valoarea acestui bit este 0 pentru numere
pozitive și 1 pentru numere negative. Acest bit unic permite o distincție clară
între numerele pozitive și negative.

Exponentul: Acesta este reprezentat pe următorii 8 biți ai reprezentării.


Exponentul este calculat prin adăugarea unei constante, cunoscută sub numele de
bias, la puterea de 2 corespunzătoare ordinii de mărime a numărului. Alocarea
a 8 biți pentru exponent permite reprezentarea unui interval larg de ordini de
mărime, asigurând astfel flexibilitatea și precizia reprezentării

Mantisa: Aceasta este reprezentată pe ultimii 23 de biți ai reprezentării.


Mantisa este calculată prin conversia părții fracționare a numărului în format
binar și apoi adăugarea unor biți suplimentari, dacă este necesar, pentru a
obține o lungime fixă de 23 de biți. Alocarea a 23 de biți pentru mantisa asigură
o precizie adecvată a reprezentării, permițând reprezentarea fracțiilor cu o
precizie de până la 23 de biți.

6
Proiectare structurală utilizând limbajul VHDL

Utilizarea extensiei PmodKYBD se va utiliza pentru introducerea


operanzilor

Extensia PmodKYBD este o placă de dezvoltare care oferă o tastatură cu 16 taste și un


port GPIO pentru conectarea la alte dispozitive. Această placă poate fi utilizată
pentru introducerea operanzilor într-un sistem digital, cum ar fi un calculator sau
un procesor.

Utilizarea afișajului cu 7 segmente pentru afișarea rezultatelor in hexazecimal si


utilizarea LED-urilor pentru semnalarea altor situații

Afișajul cu 7 segmente este un dispozitiv electronic care permite afișarea numerelor


zecimale sau hexazecimale printr-o combinație de șapte segmente independente, dispuse
într-un model dreptunghiular pentru a reprezenta cu o grafică simplificată cifrele de
la 0 la 9.

7
Analiza
IEEE 754
Pentru a împărți două numere cu virgulă mobilă în VHDL, trebuie să folosești un standard
de reprezentare a numerelor în virgulă mobilă, cum ar fi IEEE 754. Acest standard
definește formatul numerelor în virgulă mobilă, care constă din trei părți: semnul,
exponentul și mantisa. De exemplu, numărul 600 în virgulă mobilă pe 32 de biți are
următoarea reprezentare binară:

Semn Exponent Mantisa


0 10000110 00100110000000000000000

Pentru a converti un număr întreg în virgulă mobilă, trebuie să îl împarți succesiv la 2


până când obții o parte fracționară de 1, apoi să notezi resturile împărțirilor în ordine
inversă. De exemplu, pentru a converti numărul 124 în virgulă mobilă, trebuie să faci
următoarele împărțiri:

124 = 2 × 62 + 0
62 = 2 × 31 + 0
31 = 2 × 15 + 1
15 =2×7+1
7 =2×3+1
3 =2×1+1
1 =2×0+1

Resturile sunt 0, 0, 1, 1, 1, 1, 1, deci numărul 124 în binar este 1111100. Pentru a-


l converti în virgulă mobilă, trebuie să îl normalizezi, adică să îl scrii sub forma
1. 𝑥 × 2𝑒 , unde 𝒙 este partea fracționară și 𝒆 este exponentul. În acest caz, avem 124 =
1.1111 × 26 , deci exponentul este 6. Pentru a-l reprezenta în virgulă mobilă, trebuie
să adaugi o constantă la exponent, numită bias, care este 127 pentru 32 de biți. Deci
exponentul în virgulă mobilă este 6 + 127 = 133, care în binar este 10000101. Mantisa
este partea fracționară fără cifra 1 de la început, adică 11110000000000000000000.
Semnul este 0, pentru că numărul este pozitiv. Deci numărul 124 în virgulă mobilă pe
32 de biți are următoarea reprezentare binară:

Semn Exponent Mantisa


0 10000101 11110000000000000000000

Pentru a împărți două numere în virgulă mobilă, trebuie să urmezi următorii pași:

8
1. Verifică dacă unul dintre numere este zero, infinit sau NaN (not a number). Dacă
da, aplică regulile speciale pentru aceste cazuri, care sunt definite în
standardul IEEE 754.

2. Extrage semnele, exponenții și mantisele celor două numere și adaugă o cifră 1


la începutul mantisei, pentru a obține forma normalizată.

3. Calculează semnul rezultatului ca fiind xor-ul semnelor celor două numere.

4. Calculează exponentul rezultatului ca fiind diferența dintre exponentul primului


număr și exponentul celui de-al doilea număr, minus bias.

5. Calculează mantisa rezultatului ca fiind împărțirea mantisei primului număr la


mantisa celui de-al doilea număr, folosind una dintre metodele de împărțire binară
pe care le-ai menționat. Alege o metodă care să îți asigure precizia dorită și să
minimizeze timpul de execuție.

6. Verifică dacă rezultatul este normalizat, adică dacă are forma 1. 𝑥 × 2𝑒 . Dacă
nu, ajustează exponentul și mantisa pentru a obține forma normalizată.

7. Verifică dacă rezultatul este în intervalul permis de reprezentare. Dacă nu,


aplică regulile de rotunjire, subînțesere sau supraințesere, în funcție de caz.

8. Asamblează semnul, exponentul și mantisa rezultatului într-un singur număr binar


de 32 de biți.

Împărțire cu refacerea restului parțial


Algoritmul de împărțire cu refacerea restului parțial se bazează pe următoarele
principii:

1. Pentru a împărți două numere binare, trebuie să deplasăm împărțitorul la stânga


până când este egal sau mai mic decât deîmpărțitul.
2. Apoi, scădem împărțitorul din deîmpărțit și obținem un rest parțial.
3. Dacă restul parțial este pozitiv, înseamnă că am obținut un bit al câtului egal
cu 1. Dacă restul parțial este negativ, înseamnă că am obținut un bit al
câtului egal cu 0.
4. În cazul în care restul parțial este negativ, trebuie să refacem restul parțial
la valoarea anterioară prin adunarea împărțitorului la restul parțial.
5. Apoi, deplasăm restul parțial și împărțitorul la dreapta cu un bit și repetăm
procesul până când împărțitorul devine mai mic decât restul parțial.
6. La final, obținem câtul și restul operației de împărțire.

9
EXEMPLU:

Vom împărți numărul binar 1101 (13 în decimal)


la 11 (3 în decimal).
Pentru a începe, vom avea nevoie de următoarele
coloane în tabelul nostru:
1. Pasul - numărul iterației curente.
2. Restul parțial - valoarea restului după
fiecare operație.
3. Împărțitorul - valoarea constantă a
împărțitorului.
4. Comparare - rezultatul comparației dintre
restul parțial și împărțitor.
5. Operație - scădere sau adunare, în funcție de
rezultatul comparației.
6. Câtul - valoarea câtului acumulată până în
momentul respectiv.

Fig1. Versiunea finală a algoritmului de


împărțire cu refacerea restului

| Pasul | Restul parțial | Împărțitorul | Comparare (RP >= Î) | Operație | Câtul |

|-------|----------------|--------------|---------------------|----------|-------|

| 1 | 11 (inițial) | 11 | Da | Scădere | 1 |

| 2 | 00 (după scăd.)| 11 | Nu | Shift | 10 |

| 3 | 001 (shift + 0)| 11 | Nu | Shift | 100 |

| 4 | 0101 (shift + 1)| 11 | Da | Scădere | 101 |

| 5 | 0010 (după scăd.)| 11 | Nu | - | 1010 |

Explicație pas cu pas:

1. Începem cu primele două cifre ale deîmpărțitul (1101), care sunt 11. Comparăm acest
rest parțial cu împărțitorul (11). Sunt egale, deci scădem și obținem 00. Scriem 1 în
cât pentru că am putut scădea împărțitorul.

10
2. Deplasăm restul parțial la stânga și adăugăm următoarea cifră din deîmpărțit, care
este 0. Restul parțial devine 000, dar pentru simplitate, îl vom nota ca 00. Comparăm
cu împărțitorul, este mai mic, deci scriem 0 în cât.

3. Repetăm procesul de deplasare la stânga și adăugăm următoarea cifră din deîmpărțit,


care este 1. Restul parțial devine 001. Comparăm cu împărțitorul, este mai mic, deci
scriem 0 în cât.

4. Deplasăm restul parțial la stânga și adăugăm ultima cifră din deîmpărțit, care este
1. Restul parțial devine 0101. Comparăm cu împărțitorul, este mai mare, deci scădem și
obținem 0010. Scriem 1 în cât.

5. Acum, toate cifrele deîmânătorului au fost procesate. Restul final este 0010, iar
câtul este 1010.

11
Design
4.1. Componenta generală
(principală)
Componenta generală va avea ca input A, B –
numerele pe 32 de biți (format IEEE 754). Ca
și output are rezultatul operației pe A și B,
pe 32 de biți. Aceasta va include componenta
responsabilă cu împărțirea, precum și cea
care tratează valorile speciale. În plus, va
conține toate componentele ce fac legătura
între aceste componente majore.

Fig2. Componenta generală algoritmului


de împărțire cu refacerea restului

4.2. Componenta pentru Împărțire


Input:
Dividendul și Divizorul: Două numere pe 32 de biți în formatul IEEE 754.
Output:
Câtul: Rezultatul împărțirii pe 32 de biți.
Port de Excepție: Două biți indicați pentru valori speciale sau situații de
excepție.
Proces:
1. Normalizare: Dividendul și divizorul sunt normalizate pentru a avea același
exponent.
2. Inițializare: Restul parțial este setat inițial la 0, iar câtul începe cu valoarea
0.
3. Iterație:
o În fiecare iterație (n, numărul de biți ai mantisei):
o Dublarea restului parțial și includerea următorului bit din dividend.
o Scăderea divizorului din restul parțial.
o Evaluarea rezultatului scăderii:

12
▪ Dacă rezultatul este negativ, restul parțial este resetat la
valoarea anterioară, iar bitul corespunzător din cât este setat la
0.
▪ Dacă rezultatul este pozitiv sau zero, bitul corespunzător din cât
este setat la 1.
4. Normalizare Cât: Se normalizează câtul, dacă este necesar.
5. Ajustarea Exponentului Câtului: Ajustarea exponentului câtului și rotunjirea,
conform standardului IEEE 754.
6. Tratarea Excepțiilor: Verificarea și gestionarea cazurilor speciale, cum ar fi
împărțirea la zero, overflow, underflow.

Fig3. Componenta pentru împărțire

4.3. Componenta pentru Adunare


Input:
Dividendul și Divizorul: Două numere pe 32 de biți în formatul IEEE 754.
Output:
Rezultatul Scăderii: Rezultatul operației de scădere pe 32 de biți.
Proces:
1. Este utilizată în interiorul componentei de împărțire pentru a calcula restul
parțial la fiecare iterație.
2. Detectează și gestionează overflow-ul sau underflow-ul conform standardului IEEE
754.

4.4. Componenta pentru Shiftare


Input:
Numărul de Shiftat: Un număr pe 32 de biți.
Numărul de Poziții de Shiftare: Un input secundar care specifică numărul de
poziții de shiftare.
13
Output:
Numărul Shiftat: Rezultatul shiftării pe 32 de biți.
Proces:
1. Modificarea Operației de Adunare:
o În contextul operației de împărțire, componenta de adunare suferă
modificări.
o Exponenții vor fi complementați pentru a obține valoarea lor negativă.
o Doar după această complementare a exponenților, aceștia vor fi folosiți în
adunătoare.
o Acest lucru va schimba operația inițială de adunare într-o operație de
scădere, conform cerințelor specifice ale împărțirii în virgulă mobilă.

2. Gestionarea Overflow-ului și Underflow-ului:


o Componenta de adunare are implementată o logică pentru detectarea și
gestionarea situațiilor de overflow sau underflow conform standardului
IEEE 754.

4.5. Componenta pentru Valorile Speciale


Input:
Dividendul și Divizorul: Două numere pe 32 de biți în formatul IEEE 754.
Output:
Semnale de Enable: Direcționează operațiile către componenta de împărțire sau
gestionează situațiile de valori speciale.
Proces:
1. Detectează și gestionează valorile speciale (de ex. cazurile predefinite, precum
rezultatul direct pentru anumite operații).
2. Trimite semnale de enable către alte componente pentru a controla fluxul
operațional și pentru a evita calculele inutile, în cazul valorilor speciale.
3. Codifică rezultatele relevante conform standardului IEEE 754.

Implementare
14
Testare și Validare
Concluzii
Anexă: Bibliografie
1. https://sistem-binar.base-conversion.ro/numar-real-convertit-din-sistem-zecimal-in-binar-32biti-
precizie-simpla-virgula-mobila-IEEE754.php?numar_zecimal_baza_zece=765
2. BAZELE ARITMETICE ALE CALCULATOARELOR (I) (utcluj.ro)
3. Virgula mobila - Definiție. Exemple de numere în virgulă mobilă (despretot.info)
4. Reprezentarea in virgula mobila (vm) (creeaza.com)
5. http://users.utcluj.ro/~baruch/ro/pages/cursuri/structura-sistemelor-de-calcul/proiect.php
6. https://www.tme.eu/ro/details/410-195p/placi-de-extensie/digilent/pmodkypd/
7. Users.utcluj.ro
8. Users.utcluj.ro
9. Ro.wikipedia.org
10. Despretot.info
11. Andrei.clubcisco.ro
12. users.utcluj.ro3

13.

15

S-ar putea să vă placă și