Sunteți pe pagina 1din 5

Tolico Nicodim

Proiect FC

Înmulțitor pe 4 biți
folosind algoritmul Shift-and-Add
Proiect FC

Tolico Nicodim

2021
Timișoara

1
Tolico Nicodim
Proiect FC

1. Introducere
Există mai multe metode de a implementa un algoritm de multiplicare pe
4 biți, însă toate au la bază aceeași teorie. Metoda pe care o voi folosi în cadrul
proiectului meu este supranumită “Shift-and-Add”, folosind un sistem self-
clocking cu 2 faze, pentru a reduce timpul de înmulțire la jumătate.

2. Teorie
Înmulțirea prin schimbare și adunare este similară cu înmulțirea efectuată
cu hârtie și creion. Această metodă adaugă multiplicandul X la sine de Y ori, unde
Y denotă multiplicatorul. Pentru a înmulți două numere cu hârtie și creion,
algoritmul este să luăm cifrele multiplicatorului pe rând de la dreapta la stânga,
înmulțind multiplicantul cu o singură cifră a multiplicatorului și plasând produsul
intermediar în pozițiile corespunzătoare la stânga rezultatelor anterioare.

Fig 1:
Multiplicarea a 2
numere de 4 biți fără
semn (8 și 9)

În cazul înmulțirii binare, deoarece cifrele sunt 0 și 1, fiecare pas de


înmulțire este simplu. Dacă cifra multiplicatorului este 1, o copie a
multiplicandului (1 × multiplicand) este plasat în pozițiile corespunzătoare; dacă
cifra multiplicatorului este 0, un număr de 0 cifre (0 × multiplicand) sunt plasate în
pozițiile corespunzătoare.

3. Algoritm
Cum am menționat mai devreme, teoria de mai sus poate fi scrisă ca și cod
în diverse moduri (ex. declararea unor variabile în care se vor stoca separat
rezultatele înmulțirii 1-4 și apoi adunarea lor, adunarea lui X la produs + shiftarea
lui X la stânga și a lui Y la dreapta etc.). Însă în cadrul proiectului dat voi folosi
algoritmul Shift-and-Add cu shiftarea la dreapta a produsului după fiecare etapă.

2
Tolico Nicodim
Proiect FC

Mai exact, în loc să deplasăm multiplicandul la stânga, putem deplasa produsul la


dreapta. Prin urmare, multiplicandul este fixat în raport cu produsul (fig 2).

Fig 2:
Shift-and-Add cu
shiftarea
produsului la
dreapta

Schema logică pentru acest algoritm este fig. 3, unde avem X/B ca multiplicator,
Y/Q – multiplicand, A – produs, N/n – numarul de pași ( = nr de biți, în cazul
nostru 4). Astfel, programul începe când variabila start = 1, făcând inițializarea, iar
mai apoi când start = 0 se efectuează restul computațiilor. Totodată, pașii din
algoritm se vor executa pe frontul crescător al variabilei clk, obținând astfel o
viteză mai mare.

Fig 3:
Schema logică
pentru algoritmul
folosit

3
Tolico Nicodim
Proiect FC

4. Cod

Cum transpunem algoritmul în cod?

În primul rând declarăm variabilele pe care le vom folosi


(fig 4). X,Y – numerele de înmulțit, clk – variabile clock
necesară pentru sistemul self-clocking cu 2 faze, start –
variabila necesară pentru inițializare și respectiv efectuarea
calculelor, P – produs, stop – variabilă pentru oprirea
programului. Totodată, avem variabilele auxiliare A,Q,B
(ajută la claritatea programului) si A_Q – acumulator pe 9
biți. De ce pe 9 biți? – În cazul înmulțirii a 2 numere mari pe
4 biți putem obține un carry la adunarea pentru bitul A_Q[7],
iar dacă nu îi asigurăm un bit atunci îl pierdem și obținem rezultat Fig 4:
greșit (fapt testat și ilustrat în figura 5). Variabila i este necesară Variabilele
pentru for loop. folosite în
program

Fig 5:
Importanța bitului A_Q[8]

În continuare avem algoritmul explicat mai devreme transpus în cod (fig 6)

Fig 6:
Cod verilog pentru
înmulțitor pe 4 biți

4
Tolico Nicodim
Proiect FC

5. Surse

• https://users.utcluj.ro/~baruch/book_ssce/SSCE-Shift-Mult.pdf
• https://www.youtube.com/watch?v=AxrlH7vHOpw
• https://www.southampton.ac.uk/~bim/notes/ice/spec2003.html

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