Sunteți pe pagina 1din 25

1

PROIECTAREA UNUI MULTIPLICATOR




1. INTRODUCERE
Proiectul are ca scop modelarea unui sistem riguros sincron care accepta la intrare doi
vectori binari pe 4 bii si returneaz produsul acestora reprezentat pe 8 bii. Schema de nivel nalt a
multiplicatorului este prezentata n figura urmtoare.
Denumire PORT Sens Dim. Semnificaie
A IN 4 primul operand
B IN 4 al doilea operand
PROD OUT 8 rezultatul
START IN 1 startul operaiei de multiplicare
READY OUT 1 sfritul operaiei de multiplicare
RESET IN 1 iniializare asincrona
CK IN 1 semnal de ceas

Proiectul va trebui sa respecte constrngerile unui sistem sicron. Semnalul de ceas va fi
aplicat tuturor registrelor folosite att n calea de date ct si n calea de control. n plus, nu se vor
folosi circuite de divizare a frecventei semnalului de ceas, ci circuite de generare a unor semnale de
activare (enable). Descrierea sistemului se va face n ntregime n subsetul VHDL propriu
pachetului Alliance, instantiindu-se doua componente n descrierea de nivel nalt: cale de date si
cale de control.


aritmetico-logica (ALU)
Calea de control este descrisa sub forma unui automat care va implementa un algoritm de
nmultire prin adunari repetate.

2. ALGORITMUL DE NMULTIRE
nmultirea prin adunari repetate constituie cel mai simplu algoritm de multiplicare cunoscut.
Denmultitul se aduna cu el nsusi de un numar de ori reprezentat depe 4 biti, produsul lor fiind pe 8
2

biti. Unul din cele doua numere (registrul A) va fi adunat cu el nsusi n registrul P, cel de-al doilea
(registrul B) urmnd a fi decrementat pna cnd ajunge la zero. Succesiunea operatiilor, mpreuna
cu un exemplu, este prezentata n continuare



3



3. UNITATI FUNCIONALE
Multiplicatorul este structurat n:
cale de date
cale de control

Calea de control este implementata ca un automat finit pe baza algoritmului de nmultire cu
adunri repetate. Calea de date conine restul de elemente necesare functionarii circuitului si
anume registre, ALU etc. Comunicaia ntre cele doua unitati functionale va fi realizata prin
semnale interne.

4. CALEA DE DATE

Pentru calea de date sunt necesari doi registri de patru biti n care sa fie ncarcati cei doi
operanzi la nceputul operatiei de nmultire. Sunt necesare doua registre de cte 8 biti, unul pentru a
memora rezultatul intermediar al adunarilor repetate, iar cel de-al doilea pentru a memora rezultatul
la terminarea operatiei de multiplicare. Unitatea aritmetico-logica este un sumator pe 8 biti, avnd
ca intrare 4 biti ai denmultitului si 8 biti din registrul imtermediar. Rezultatul adunarii este ncarcat
din nou n registrul temporar la fiecare iteratie, exceptnd-o pe ultima, n care rezultatul este
ncarcat n registrul de iesire, odata cu activarea semnalului ready.
4


Sumatorul ete modelat pe baza functiei logice, dupa cum urmeaza:
Operandul a este ncarcat ntr-un registru la comada startLa fiecare iteratie, acest
registru este decrementat. Cnd contorul registrului ajunge la '0 semnaluieranunta calea de
control despre aparitia acestui eveniment. Calea de date este prezentata n figura 10.2.
5






Semnalul Idl este aplicat att registrului b, ct si numaratorului si este generat doar la
nceputul operatiei de nmultire pentru a ncarca cei doi operanzi. Semnalul Id2este aplicat doar
registrului intermediar pe 8 biti. Semnalulzeraste generat de numarator dupa un numar de
perioade de ceas egal cu nmultitorul si este aplicat att sumatorului, ct si trimis mai departe la
calea de control. Numaratorul este comandat de semnalul decce vine de la calea de control.
Registrul de iesire se ncarca doar cnd semnalul read yprovenind de la calea de control)
este activ, adica atunci cnd operatia de nmultire este ncheiata, datele fiind asftel valide la
iesirea circuitului. Toate registrele sunt comutate de acelas semnal de ceas si initializate de
acelas semanl rese t
6

Descrierea comportamentala a unui registru poate fi facuta conform exemplului urmator.
Extinderea la un registru de 8 biti se face prin simpla modificare a dimensiunilor porturilor si a
vectorilor.


5. CALEA DE CONTROL

Calea de control are urmatoarele intrri si iesiri:
intrarea startrovenind din exteriorul circuitului si intrarea zerde la numarator;
ieirile ld1 d2si iesirea read y entru registrul de iesire si deasemnea pentru exteriorul
circuitului.
Schema caii de control este prezentata n figura 10.3.

7


Numaratorul pe patru biti poate fi descris pe baza functiei logice, folosind un bloc cu garda
avnd n lista de senzitivitati semnalul de ceas:



8





9


10


6. GENERAREA DESCRIERILOR STRUCTURALE
Pornind de la fisierele cu descrierile comportamentale eg4.vb eeg8.vb eum4.vbe si
count4.vbe genereaza descrierile structurale (fisiere cu extensia vst). Operatiunea se face prin
executarea utilitarului scmap.



11

MODELAREA MIXT N VHDL. IMPLEMENTAREA UNUI
ALGORITM DE MULTIPLICARE

7. SCOPUL LUCRRII:

nsuirea principiilor privind implementarea unui algoritm de multiplicare (nmulire)
n VHDL folosind modelarea mixt. Este exemplificat implementarea unui algoritm de
multiplicare cu adunare repetat i deplasare-stnga dreapta folosind o serie de componente
modelate i testate n lucrrile de laborator anterioare (sumatorul pe 8 bii, latch-ul pe 8 bii,
registrul de deplasare configurabil i circuitul de control modelat ca main cu stri finite).
n ultima parte a lucrrii este prezentat un circuit de test pentru verificarea multiplicatorului
n care sunt folosite funciile Convert i procedura Clock prezentate n lucrarea anterioar.
8. ALGORITM DE MULTIPLICARE CU ADUNARE REPETAT I
DEPLASARE STNGA-DREAPT:

nmulirea a dou numere binare fr semn pe N bii, A-multiplicand, B-multiplicator,
conduce la un rezultat P (produs) pe 2N bii: P=A*B. Realizarea nmulirii este similar cu
cea din cazul nmulirii numerelor zecimale. Astfel, bitul cel mai puin semnificativ al
multiplicatorului B se nmulete cu biii multiplicandului A formnd un produs parial. La
fel, se formeaz alte produse pariale prin nmulirea urmtorului bit al lui B cu toi biii lui
A. La final, produsul este calculat ca suma a produselor pariale, fiecare produs parial fiind
n prealabil deplasat spre stnga cu un numr de poziii egal cu indexul bitului corespunztor
de la multiplicator, aa cum se observ n exemplul urmtor:

n lucrarea de fa se prezint algoritmul de nmulire cu adunare repetat
deplasare stnga-dreapta din perspectiva implementrii ntr-o structur logic. Acest algoritm
const n urmtorii pai:
- Se ncarc numerele B i A n regitri
- P (produsul) este pe 2N bii. Iniial P=0.
- Repet de N ori (sau pn cnd toi biii din registrul A sunt 0):
o Dac LSB A = 1

12

P<=P+B o Deplaseaz A cu o poziie la dreapta o Deplaseaz B cu o poziie la
stnga

Mai jos este exemplificat detaliat modul de lucru al algoritmului pentru cazul
nmulirii numerelor B i A pe 4 bii din exemplul numeric anterior. Reg A i Reg B
reprezint valorile pe bii de la ieirea regitrilor corespunztori numerelor B i A.
Valorile LSB ale Reg A n funcie de care se realizeaz sumarea la iteraia urmtoarea
sunt reprezentate italic.
























13



9. STRUCTURA MULTIPLICATORULUI PE 4 BII

n figura 1 este prezentat structura intern a multiplicatorului care implementeaz
algoritmul de inmulire cu sumare repetat i deplasare stnga-dreapta:
Circuitul de multiplicare const din dou registre de deplasare SRA i SRB, cte unul
pentru fiecare din intrrile A i B, un sumator pe 8 bii notat ALU, un circuit de memorare i
acumulare tip latch pe 8 bii notat ACC i un circuit de comand (controler), notat FSM,
pentru controlul acestor componente. Pentru toate blocurile componente ale multiplicatorului
vor fi folosite modelele prezentate i testate n lucrrile de laborator anterioare.
Cnd la intrarea Start este primit nivelul 1 logic, circuitul n cepe procesul pentru
calculul produsului numerelor A i B de la intrare. Astfel, dup activarea intrrii Start
controlerul FSM genereaz un impuls Init care iniializeaz (reseteaz) acumulatorul i
ncarc valorile intrrilor A i B n cei doi regitri de deplasare SRA i SRB.
Dac bitul cel mai puin semnificativ de la ieire a registrului SRA este 1 atunci
controlerul FSM furnizeaz la ieirea ADD un impuls care determin ca n acumulatorul
ACC s se memoreze rezultatul sumei dintre valoarea de la ieirea sa (Result) i valoarea de
la ieirea registrului SRB.
Dup imp ulsul furnizat la ieirea ADD controlerul furnizeaz un alt impuls la ieirea
Shift. Irpulsul de la ieirea Shift determin deplasarea cu o poziie a biilor de la registrele
SRA i SRB. n cazul registrului SRA deplasarea biilor are loc la dreapta (de la MSB spre
LSB) deoarece intrarea DIR a acestuia este conectat la 0 logic, n timp ce n cazul
registrului SRB deplasarea biilor are loc la stnga (de la LSB spre MSB) deoarece
14

intrareDIR a acestuia este conectat la 1 logic.
Dac bitul LSB de la ieirea Q a registrului SRA este 0, atunci nu trebuie s se mai
sumeze ieirea de la SRB cu cea a acumulatorului, ci controlerul FSM furnizeaz un impuls
la ieirea Shift prin care determin deplasarea cu nc o poziie a biilor de la registr ele SRA
i SRB.
n final, dac dup deplasarea la dreapta toi biii de la ieirea SRA sunt 0 atunci se
consider c procesul de multiplicare trebuie s se ncheie. Cnd toi cei 8 bii de la ieirea
SRA sunt n 0 logic, funcia logic NOR va determi na 1 logic la intrarea Stop a
controlerului. n acest caz controlerul va furniza un nivel de 1 la ieirea Done, care indic
sfritul procesului de multiplicare iar la ieirea Result se afl rezultatul final al multiplicrii.

10. MODELUL VHDL AL MULTIPLICATORULUI

n VHDL un multiplicator bazat pe un anumit algoritm de nmulire poate fi descris
comportamental ca o main cu stri finite. De exemplu, n cazul multiplicatorului prezentat
n aceast lucrare, modelul comportamental poate fi dezvolt at pe baza modelului cu stri
finite ale circuitului de control (FSM) la care se adaug instruciuni pentru descrierea
celorlalte blocuri.
n cele ce urmeaz se va prezenta modelul VHDL al multiplicatorului n concordan
cu structura din figura 1. Astfel, pentru regitrii de deplasare, sumatorul pe 8 bii, acumulator
i circuitul de comand se vor instania n arhitectura multiplicatorului componentele ShiftN,
Adder8, Latch8 i Controller a cror modele au fost studiate i testate n lucrrile anterioare.
Pentru porile logice NOR i AND din figura 1 se vor utiliza expresii logice n
instrucuni de atribuire.
Pentru a instania diverse componente ntr-o arhitectur, acestea trebuie, n prealabil,
declarate. Declararea componentelor se poate face fie n partea declarativ a arhitecturii, fie n
cadrul unui package.
n continuare se prezint varianta n care declararea componentelor ce urmeaz a fi
instaniate n arhitect ura multiplicatorului sunt declarate ntr-un package. Avantajul declarrii
ntr-un package este acela c declaraiile pot fi utilizate i n cadrul altor proiecte

11. DECLARAREA COMPONENTELOR NTR-UN PACKAGE

Package-ul care conine declaraii ale componentelor ce vor fi instaniate n arhitectura
multiplicatorului este urmtorul: (fiie Pack_Components.vhd)











15

Toate componentele dec larate n package-ul de mai sus au numele, lista de porturi i tipul
acestora identice cu cele ale entitilor studiate anterior. n acest fel, n faza de elaborare a
proiectului nainte de simulare se va asocia automat acestor componente perechile entitate -
arhitectur corespunztoare.
Pentru a face vizibil acest package n arhitectura multiplicatorului, se va aduga clauza use use
work.components.all fie la nceputul fiierului n care va fi descris multiplicatorul, fie n partea
declarativ a arhitecturii acestuia. n acest referat clauza useva fi plasat n partea declarativ a
arhitecturii.

12. DECLARAIA DE ENTITATE I ARHITECTURA MULTIPLICATORULUI


16

Aa cum se observ din descrierea de mai sus, n partea declarativ a arhitect urii nu sunt
prezente declaraii ale componentelor, ci este utilizat clauza use (linia 16) pentru a face vizib
il n cadrul arhitecturii toate declaraiile de componente din package-ul Components.

n cadrul descrierii multiplicatorului semnalul Result este declarat la linia 8 ca fiind port
de ieire. Portul Q al componentei Latch8 este conectat la semnalul intern ACCout declarat la
linia 19. Valorile acestui semnal se atribuie portului de ieire Result (linia 32).
Corpul arhitecturii utilizeaz specificaii de atribuire pentru semnale (liniile 30-32 i
58-59) pentru a descrie o parte a circuitului i instruciuni de instaniere de componente.
Posibilitatea de a utiliza stiluri de descriere diferite n aceeai arhitectur reprezinta unul din
avantaj ele utilizarii limbajului VHDL. n general, ntr-o arhitectur pot fi prezente simultan
dou sau chiar toate din cele trei instruciuni (atribuire pentru semnale, instaniere de
componente, process) car e definesc cele trei stiluri de modelare (data-flow, structural i
comportamental).
Instruciunile de instaniere de componente prezente n arhitectura multiplicatorului
introduc una din capabilitile VHDL privind modul de asociere a porturilor componentelor la
semnale. Astfel, la instanierea controlerului (liniile 61-62) se asociaz porturile componentei
cu semnalele din arhitectura multiplicatorului utiliznd asocierea poziional.
La asocierea poziional, primul semnal din lista dup specificaia port map corespunde
primului port al componentei, al doilea semnal cu al doilea port, .a.m.d.
Pentru controler putem construi urmtorul tabel cu asocieri porturi -semnale:


Asocierile porturi-semn ale pot fi sp ecificate i explicit utiliznd asocierea nume.l(De
exemplu, la cele dou instanieri cu etichetele SR_A i SRB a registrului de deplasare (liniile
3448) fiecare asociere n lista dup specificaia port map este de forma port component =>
semnal multiplicator.
Totodat, este posibil combinarea dintre asocierea poziional i cea a numelor n
aceeai list de asocieri aa cum este n cazul intanierii componentei Adder8 (liniile 52 i 53).
Toate asocierile poziionale, dac exist, trebuie s precead asocierea numelor. n caz
contrar, compilatorul VHDL nu poate stabili corect asocierea dintre porturi i semnale.
n linia 34, la instruciunea de instaniere a componentei ShiftN s-a utilizat eticheta SR_A n
loc de SRA aa cum este notat n figura 1, deoarece sra este cuvnt rezervat al VHDL i
face parte din categoria operatorilor de shiftare-rotiere (sra - shift right arithmetical).
n figura 1 se observ c portul Cout al componentei Adder8 rmne neconectat. Totui,
n arhitectura multiplicatorului acest port este conectat la semnalul intern OFL (linia 53)
declarat special pentru acest scop. n general, la instanierea unei componente un port
neconectat se poate specifica n lista de asociere folosind n loc de nume de semnal cuvntul
open. Astfel n linia 53 se poate scrie: Cout => open.
Pe de alt parte, dac un port de intrare a unei componente trebuie conectat la un semnal
de nivel logic constant (de exemplu, 0 sau 1), fie se declar n arhitectur semnale interne
crora li se atribuie valoarea logic dorit, fie la instanierea componentei pentru portul
respectiv se asociaz valoarea logic n loc de nume de semnal.
Astfel, n arhitectura multiplicatorului n liniile 22 i 23 s-au declarat semnalele High i
Low cu valorile 1, respective 0. Ca urmare toate porturile care trebuie conectate la unul din
aceste dou stri sunt asociate cu unul din aceste dou semnale. De exemplu, portul DIR al

17

registrului SRB este conectat la semnalul High.


n loc de utilizarea semnalelor Low i High, se poate specifica direct n lista de asociere
valoarea logic corespunztoare. De exemplu, instana SRB a registrului ShiftN poate fi
specificat astfel:

13. TESTAREA MULTIPLICATORULUI:

n fiierul Test_Multiplier8.vhd este prezent un program de test pent ru multiplicator.
(fisier Test_Multiplier8.vhd).

n cadrul arhitecturii de test, la linia 96, este apelat procedura Clock definit n package-ul
Utils din lucrarea de laborator anterioar. Aici procedura este apelat ca instruciune
concurent deoarece apare n c orpul arhitecturii, i nu n corpul unui process. Procedura este
folosit la generarea semnalului de tact pentru multiplicator i testbench.
Procesul pentru generarea de stimuli (liniile 102-119) utilizeaz dou bucle imbricate pentru a
testa multiplicatorul n cazul n care la porturile de intrare A i B se aplic pe rnd valorile
{1,2,3} respectiv {4,5,6,7}.
n interiorul buclei valorile de multiplicat sunt aplicate mai nti semnalelor DisplayA i
DisplayB pentru a putea fi afiate ca numere ntregi (liniile 107, 108), apoi sunt convertite n
tipuri Bit_Vector. Specificaiile de la liniile (109,110) apeleaz secvenial (n corpul
procesului) funcia Convert corespunztoare din pachetul Utils i atribuie rezultatele
conversiilor intrrilor multiplicatorului.
18

Specificaia wait de la linia 111 semnalizeaz apariia unui front cresctor al semnalului de tact
(CLK). Condiia until este cea mai general form de expresie senzitiv la un eveniment.
Dup apariia frontului cresctor al semnalului CLK, semnalului Start i se atribuie valoarea 1
timp de 20 ns (linia 112), ceea ce permite iniializarea multiplicatorului i nceperea procesului
de calcul al produsului.
Urmtoarea specificaie wait (linia 113) determin suspendarea procesului pn cnd
multiplicatorul termin de efectuat nmulirea, moment semnalizat de acesta prin trecerea n
1 logic a ieirii Done.
Dup finalizarea nmulirii, rezultatul de tip Bit_Vector furnizat la portul i semnalul Result
este apoi convertit la un tip ntreg prin apelarea celei de-a doua funcii Convert din package-ul
Utils i atribuit semnalului DisplayResult.
Specificaia wait de la linia 115 suspend procesul pn la urmtorul front cresctor al
semnalului de ceas pentru a permite vizualizarea rezultatului de la fiecare iteraie.


14. REZULTATELE SIMULRII MULTIPLICATORULUI

n figura 2 sunt prezentate formele de und sau valorile semnalelor obinute n urma simulrii
entitii de test Test_Mult8 pentru validarea modelului VHDL al m ultiplicatorului descris de
entitatea Mult8 i arhitectura Ite rativeAdd. Se observ cdin momentul n care semnalul start
ia valoarea 1 (nceputul efectu rii nmulirii) sunt necesare cteva perioade ale semnalului de
ceas (clk) pn cnd semnalul done indic terminarea calculului.

Multiplicator pe 4 bits

19


15. IMPLEMENTAREA MULTIPLICATORULUI IN VERILOG HDL:

















































Vom defini iniial un multiplicator elementar, care este prezentat n figura 1:
module mule(cout,sout,a,b,cin,sin);
input
a,b,cin,sin;
output
cout,sout;
wire p;
assign p=a&b; // atribuie lui p produsul
a i b assign {cout,sout}=p+sin + cin;
endmodule
Pentru a face un multiplicator pe mai muli bii, trebuie s interconectm mai multe
multiplicatoare elementare cum e artat n figura 2. n limbajul VERILOG HDL, acest lucru se fac
n modul urmtor:
module mul_4(p,a,b);
input [3:0]
a,b; output
[7:0] p;
mule m00(cout00, sout00, a[0], b[0], 1'b0,
1'b0); mule m01(cout01, sout01, a[0], b[1],
1'b0, 1'b0); mule m02(cout02, sout02, a[0],
b[2], 1b0, 1b0); mule m03(cout03, sout03,
a[0], b[3], 1'b0, 1'b0);
mule m10(cout10, sout10, a[1], b[0], cout00,
sout01); mule m11(cout11, sout11, a[1], b[1],
cout01, sout02); mule m12(cout12, sout12,
a[1], b[2], cout02, sout03); mule m13(cout13,
sout13, a[1], b[3], cout03, 1b0);
mule m20(cout20, sout20, a[2], b[0], cout10,
sout11); mule m21(cout21, sout21, a[2], b[1],
cout11, sout12); mule m22(cout22, sout22,
a[2], b[2], cout12, sout13); mule m23(cout 23,
sout23, a[2], b[3], cout13, 1'b0);
mule m30(cout30, sout30, a[3], b[0], cout20,
sout21); mule m31(cout31, sout31, a[3], b[1],
cout21, sout22); mule m32(cout32, sout32,
a[3], b[2], cout22, sout23); mule m33(cout33,
sout33, a[3], b[3], cout23, 1b0);
assign p[3:0]={sout30,sout20,sout10,sout00};
assign
p[7:4]={cout33,cout32,cout31,cout30}+{sout33,sout32,sout31};
endmodule
20

















Rezultatele simulrii:
run
#KERNEL: res 00000100, GM 00000100
#KERNEL: res 00011011, GM 00011011
#KERNEL: res 10101001, GM 10101001
#KERNEL: res 00001010, GM 00001010
#KERNEL: res 00001101, GM 00001101
#KERNEL: res 01001110, GM 01001110
#KERNEL: res 10011100, GM 10011100
#KERNEL: res 00110110, GM 00110110
#KERNEL: res 00110010, GM 00110010
#RUNTIME: RUNTIME_0070 test_mul_4.v (24): $stop called.
21

- Schema structural a multiplicatorului proiectat












16. Concluzii:
Analiznd rezultatele de mai sus am ajuns la concluzia c metoda flux de date este o metod
mult mai eficient dect metoda structural, este mai simplu de descris un modul prin aceast metod
i respectiv probabilitatea de a comite erori este mai mic. Am vzut ca rezultatele obinute prin
metoda GOLDEN MODEL i cele obinute simulnd schema proiectat coincid, ceea ce era i scopul
propus la nceputul lucrrii.








22


17. IMPLEMENTAREA UNUI MULTIPLICATOR PE 4 BITS

Codul introdus in Xilinx este:


23




Trebuie creat fisierul: test bench prin click dreapta pe modulul principal si prin
selectarea optiunii Add new source:




24






















Inputurile pot fi specificate atat in mod binar cat si prin specificarea formei de oscilatie:
de ex inp1=14 i inp2=13:
25


Pentru simulare din meniul PROCESSES din stanga se apas pe optiunea Simulate
Behavioral HDL. Codul este simulat n ModelSim.



Ecranul ce conine oscilaiile va fi marit, pentru a se vedea rezultatul: 10110110 in binar
= 182 in decimal.

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