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.
Copyright Notice
© Licențiada.org respectă drepturile de proprietate intelectuală și așteaptă ca toți utilizatorii să facă același lucru. Dacă consideri că un conținut de pe site încalcă drepturile tale de autor, te rugăm să trimiți o notificare DMCA.
Acest articol: Circuite Secventiale (rtl) Pipeline (ID: 149615)
Dacă considerați că acest conținut vă încalcă drepturile de autor, vă rugăm să depuneți o cerere pe pagina noastră Copyright Takedown.
