Circuite Secventiale (rtl) Pipeline

Circuite Secventiale (RTL) Pipeline

Scopul lucrarii:

Analizaprincipiului de functionare a metodei de conveerizare a datelorsieficientasa

Sarcinalucrarii:

De descris in ModelSim circuitul logic a modulului de inmultire 4×4 si a modulului 4×4 cu registri intermediari.

Considerente teoretice:

Circuitele de deplasare ne permit realizarea multiplicării numai cu puterile întregi ale lui 2. Pentru a realiza orice înmulțire vor fi necesare circuite mai elaborate. Funcția de multiplicare poate fi realizată în mai multe moduri. Pe lângă soluția combinațională, ce va fi prezentată în continuare, există și soluții secvențiale (una dintre ! ele va fi prezentată în 9.3.3) sau soluții programate. Cea combinațională oferă varianta ! cea mai rapidă. Prețul plătit va include, în consecință, și o "taxă de urgență", sub forma unui produs dimensiune – adâncime mare.

Fig. 7.29 Circuitul de înmulțire elementar, a. Structura internă, b. Simbolul logic. înmulțitorul elementar

Vom începe prin a prezenta structura unui înmulțitor elementar, IE, a unui circuit care realizează înmulțirea a două cuvinte de un bit. Structura acestui circuit va trebui să satisfacă trei cerințe.

Să realizeze operația propriuzisă de înmulțire a celor doi biți.

Să asigure operația de adunare presupusă de algoritmul de înmulțire al numerelor reprezentate pe mai mulți biți.

Să permită interconectarea într-o rețea bidimensională care asigură propagarea operanzilor și a rezultatelor parțiale astfel încât să se poate realiza combinational operația de înmulțire.

Rezultă structura din Figura 7. 29, unde:

circuitul AND realizează operația propriuzisă de înmulțire a biților a și b (produsul ia valoarea 1 numai dacă biții a și b au ambii valoarea 1),

sumatorul complet de un bit SC care adună produsul realizat local cu cel realizat de bitul mai puțin semnificativ și cu depășirea obținută de la sumari anterioare,

biților a și b trebuie sale fie asigurată propagarea către alte IE.

Înmulțitorul combinational

Pentru a proiecta un înmulțitor combinational pentru cuvinte de n biți va trebui să interconectăm n2 IE într-o matrice bidimensională sugerată de algoritmul de înmulțire binară a două cuvinte de n biți. Vom sugera printr-un exemplu regula de interconectare a IE.

Fig. 7.30 Înmulțitor de 4 biți. Factorii produsului sunt a3 … a0 și b3 … b0. iar catul este x7 … x0. înmulțitorul elementar aibjrealizează produsul biților ai și bjpe care-1 sumează la produsul ai-1 x bj-1ținând cont de depășirea dată de sumarea realizată de înmulțitorul elementar ai-1bj.

Fie două numere de patru biți, a = a3 … a0și b = b3 … b0, și produsul lor a x b = x7 …x0, reprezentat pe 8 biți. Simbolic, operația de înmulțire are loc conform regulii următoare:

Sumarea produselor aibjse face ținând cont și de semnalul de carry ce poate apare la fiecare sumă binară. Se justifică astfel modalitatea de interconectare prezentată în Figura 7.30.

Dimensiunea înmulțitorului este, după cum ușor se poate constata, în O(n2) iar timpul de propagare prin rețeaua de IE este în O(n). Rezultă produsul dimensiune – adâncime în O(n3). Îl vom compara cu cel obținut în 9.3.3.

Descriereacircuitelor in ModelSim:

Inmultitorul 4×4:

module SUME(sout,cout,p,sin,cin);

output sout,cout;

input p,sin,cin;

assign {cout,sout}=p+sin+cin;

endmodule

module MULE(sout,carry,a,b,sin,cin);

input a,b,sin,cin;

output sout,carry;

wire p;

and (p,a,b);

SUME q0(sout,carry,p,sin,cin);

endmodule

module MUL4(a,b,c,s,sout,cin,cout);

input [3:0] a,b;

input c,s,cin;

output [7:0] sout;

output cout;

wire [3:0] cy0,cy1,cy2,cy3;

wire [3:0] s0,s1,s2;

wire [2:0] cx;

MULE q0(sout[0],cy0[0],a[0],b[0],s,c);

MULE q1(s0[0],cy1[0],a[1],b[0],s,c);

MULE q2(s1[0],cy2[0],a[2],b[0],s,c);

MULE q3(s2[0],cy3[0],a[3],b[0],s,c);

MULE q4(sout[1],cy0[1],a[0],b[1],s0[0],cy0[0]);

MULE q5(s0[1],cy1[1],a[1],b[1],s1[0],cy1[0]);

MULE q6(s1[1],cy2[1],a[2],b[1],s2[0],cy2[0]);

MULE q7(s2[1],cy3[1],a[3],b[1],s,cy3[0]);

MULE q8(sout[2],cy0[2],a[0],b[2],s0[1],cy0[1]);

MULE q9(s0[2],cy1[2],a[1],b[2],s1[1],cy1[1]);

MULE q10(s1[2],cy2[2],a[2],b[2],s2[1],cy2[1]);

MULE q11(s2[2],cy3[2],a[3],b[2],s,cy3[1]);

MULE q12(sout[3],cy0[3],a[0],b[3],s0[2],cy0[2]);

MULE q13(s0[3],cy1[3],a[1],b[3],s1[2],cy1[2]);

MULE q14(s1[3],cy2[3],a[2],b[3],s2[2],cy2[2]);

MULE q15(s2[3],cy3[3],a[3],b[3],s,cy3[2]);

SUME n(sout[4],cx[0],cy0[3],s0[3],cin);

SUME k(sout[5],cx[1],cy1[3],s1[3],cx[0]);

SUME l(sout[6],cx[2],cy2[3],s2[3],cx[1]);

SUME r(sout[7],cout,cy3[3],s,cx[2]);

endmodule

module test;

reg [3:0] a,b;

reg s,c,cin;

wire [7:0] sout;

wire cout;

MUL4 w1(a,b,c,s,sout,cin,cout);

initial

begin

cin=0;

c=0;

s=0;

a=1;

b=0;

end

always

begin

#10

a=a+1;

b=b+1;

$monitor("a=%b,b=%b,sout=%b,cout=%b",a,b,sout,cout);

end

endmodule

Rezultatele simularii:

Fig. 1 Rezultatul sub forma de biti

Fig. 2 Rezultatul sub forma de diagrama temporala

Fig. 3 Sinteza circuitului in Leonardo Spectrum

Fig. 4 Analizacircuituluisintetizat

Inmultitorul 4×4 cu registri:

module MULE(A,B,Sin,Cin,Sout,Cout);

inputA,B,Sin,Cin;

outputCout,Sout;

wire P;

assign P=A&B;

assign {Cout,Sout}=Sin+Cin+P;

endmodule

module MULREG(A,B,P,CK);

input CK;

input [3:0] A,B;

output [7:0] P;

wire [3:0] s0,s1,s2,s3;

wire [3:0] c0,c1,c2,c3;

reg [3:0] C;

reg [3:0] S;

MULE z0(A[0],B[0],1'b0,1'b0,s0[0],c0[0]);

MULE z1(A[1],B[0],1'b0,1'b0,s0[1],c0[1]);

MULE z2(A[2],B[0],1'b0,1'b0,s0[2],c0[2]);

MULE z3(A[3],B[0],1'b0,1'b0,s0[3],c0[3]);

MULE z4(A[0],B[1],s0[1],c0[0],s1[0],c1[0]);

MULE z5(A[1],B[1],s0[2],c0[1],s1[1],c1[1]);

MULE z6(A[2],B[1],s0[3],c0[2],s1[2],c1[2]);

MULE z7(A[3],B[1],1'b0,c0[3],s1[3],c1[3]);

always@(negedge CK)

begin

S = s1;

C = c1;

end

MULE z8(A[0],B[2],S[1],C[0],s2[0],c2[0]);

MULE z9(A[1],B[2],S[2],C[1],s2[1],c2[1]);

MULE z10(A[2],B[2],S[3],C[2],s2[2],c2[2]);

MULE z11(A[3],B[2],1'b0,C[3],s2[3],c2[3]);

MULE z12(A[0],B[3],s2[1],c2[0],s3[0],c3[0]);

MULE z13(A[1],B[3],s2[2],c2[1],s3[1],c3[1]);

MULE z14(A[2],B[3],s2[3],c2[2],s3[2],c3[2]);

MULE z15(A[3],B[3],1'b0,c2[3],s3[3],c3[3]);

assign P={s3[3:1]+c3[3:0],s3[0],s2[0],s1[0],s0[0]};

endmodule

module test;

reg [3:0] a,b;

wire [7:0] p;

regck;

MULREG Q(a,b,p,ck);

initial

begin

a = 5;

b = 11;

ck = 0;

end

always

begin

#5 $monitor("a=%d,b=%d,produs=%d",a,b,p);

end

always

begin

#1 ck = ~ck;

end

endmodule

Rezultatelesimularii:

Fig. 5 Rezultatul sub forma de cifre

Fig. 6 Rezultatul sub forma de diagram temporala

Fig. 7 Sintezacircuitului in Leonardo Spectrum

Fig. 8 Analizacircuituluisintetizat

Concluzie:

In urma efectuarii lucrarii date de laborator am observant ca circuitele de dimensiuni mari devin mai eficiente daca sunt conveerizate, ce ne permite sa crestem frecventa de lucru proportional cu numarul de etapepe care ilparcurgedatele in circuit, insa cresterea numarului de registry devine ineficienta cind déjà intirzierea datelor depinde anume de ei.

Similar Posts