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.