Fachgebiet Rechnerarchitektur, Fachbereich Infrmatik Prf. Dr. R. Hffmann Dr.Ing. W. Heenes 3. Übung Rechnerentwurf und Mikrprgrammierung SS 2009 (Simuatin, Synthese) Aufgabe 1 (Simuatin vn Steuerwerken) Zwei der in der 2. Übung entwrfenen Steuerwerke sen in Verig prgrammiert und zusammen mit dem Rechenwerk für die Mutipikatin simuiert werden. Führen Sie dies a) für das MatrixSteuerwerk aus der Aufgabe 2c) der 2. Übung start ikei ner z1 z0 z1' z0' iset0 ad addif shr ipus 1 stp ANDmatrix[0]={Z,D,Z,Z}; ANDmatrix[1]={E,D,Z,Z}; ANDmatrix[2]={D,D,Z,E}; ANDmatrix[3]={D,E,E,Z}; ANDmatrix[4]={D,Z,E,Z}; ANDmatrix[5]={D,D,E,E}; ORmatrix[0]='h10; ORmatrix[1]='h38; ORmatrix[2]='h44; ORmatrix[3]='h22; ORmatrix[4]='h62; ORmatrix[5]='h61; Seite 1 vn 9
mdue testbed; reg cck; reg [8:1] x, y; reg start; wire stp; wire [17:1] p; wire [1:0] state ; wire [2:0] i; wire [0:5] actine; wire [6:0] bef; // be buffered // be, Eingangswerte // be, startsigna // stp signa vm Mutipizierer // zur Anzeige des Ergebnisses // Anzeige // Anzeige // test // test matrixstw stw(ikeiner7, cck, start, stp, state,ad, addif, shr, iset0, ipus1,actine,bef); rw rw(iset0, ipus1, ad, addif, shr, cck, x,y,p, i, ikeiner7); initia x=8; y=255; // zu muitpiziere Werte initia start=0; #15 start=1; #10 start=0; initia cck=0; #5 repeat (100) #5 cck = ~cck; initia wait (stp); $dispay("%d * %d = %d %h", x, y, p, p); @(psedge cck) $finish; mdue mdue matrixstw(ikeiner7, cck, start, stp, state, ad, addif, shr, iset0, ipus1,actine,bef); input cck; input start, ikeiner7; utput stp; utput [1:0] state ; reg [1:0] state ; initia state=0; utput ad, addif, shr; //Steuersignae für p utput iset0, ipus1; // Steuerssignae für i reg [7:0] ANDmatrix [0:5]; // Dekdiermatrix wire[7:0] extxs = {~start,start,~ikeiner7,ikeiner7,~state[1],state[1],~state[0],state[0]}; utput [0:5] actine; // active ine assign actine[0]= &(extxs ANDmatrix[0]); assign actine[1]= &(extxs ANDmatrix[1]); assign actine[2]= &(extxs ANDmatrix[2]); assign actine[3]= &(extxs ANDmatrix[3]); assign actine[4]= &(extxs ANDmatrix[4]); assign actine[5]= &(extxs ANDmatrix[5]); reg [6:0] ORmatrix [0:5]; utput [6:0] bef; /* assign bef = // utput OR matrix, Cdiermatrix // aktueer mikrbefeh Seite 2 vn 9
*/ assign bef = (actine[0]? ORmatrix[0]:0) (actine[1]? ORmatrix[1]:0) (actine[2]? ORmatrix[2]:0) (actine[3]? ORmatrix[3]:0) (actine[4]? ORmatrix[4]:0) (actine[5]? ORmatrix[5]:0); (ORmatrix[0] & {7{actine[0]}}) (ORmatrix[1] & {7{actine[1]}}) (ORmatrix[2] & {7{actine[2]}}) (ORmatrix[3] & {7{actine[3]}}) (ORmatrix[4] & {7{actine[4]}}) (ORmatrix[5] & {7{actine[5]}}); assign stp=bef[0]; assign ipus1=bef[1];assign shr=ipus1; assign addif=bef[2]; assign ad=bef[3]; assign iset0=bef[4]; parameter Z=2'b01,E=2'b10,D=2'b11; initia ANDmatrix[0]={Z,D,Z,Z}; ANDmatrix[1]={E,D,Z,Z}; ANDmatrix[2]={D,D,Z,E}; ANDmatrix[3]={D,E,E,Z}; ANDmatrix[4]={D,Z,E,Z}; ANDmatrix[5]={D,D,E,E}; ORmatrix[0]='h10; ORmatrix[1]='h38; ORmatrix[2]='h44; ORmatrix[3]='h22; ORmatrix[4]='h62; ORmatrix[5]='h61; aways @(psedge cck) state<=bef[6:5]; mdue Seite 3 vn 9
Seite 4 vn 9 b) für das MikrprgrammSteuerwerk aus der Aufgabe 2d) der 2. Übung, z1 z0 D start ikeiner z1' z0' iset0 ad addif stp shr ipus1
mdue stw(ikeiner7, cck, start, stp, state,ad, addif, shr, iset0, ipus1); input cck; input start, ikeiner7; utput [1:0] state ; reg [1:0] state ; initia state=0; reg [6:0] mpmem [0:15]; // mp speicher wire [3:0] adr; // adresse assign adr={start,ikeiner7,state}; wire [6:0] bef = mpmem[adr]; // mikrbefeh, ausgang speicher utput stp; utput ad, addif, shr; utput iset0, ipus1; // Steuersignae für p // Steuerssignae für i assign stp=bef[0]; assign ipus1=bef[1]; assign shr=ipus1; assign addif=bef[2]; assign ad=bef[3]; assign iset0=bef[4]; aways @(psedge cck) state<=bef[6:5]; initia mpmem[0]='h10; mpmem[1]='h44; mpmem[2]='h62; mpmem[3]='h61; mpmem[4]='h10; mpmem[5]='h44; mpmem[6]='h22; mpmem[7]='h61; mpmem[8]='h38; mpmem[9]='h44; mpmem[10]='h62; mpmem[11]='h61; mpmem[12]='h38; mpmem[13]='h44; mpmem[14]='h22; mpmem[15]='h61; mdue // rw enthät zäher i mdue rw(iset0, ipus1, ad, addif, shr, cck, x,y,p, i, ikeiner7); input cck; input [8:1] x, y; // vn der TestUmgebung input ad, addif, shr; utput [17:1] p; reg [17:1] p; // sync Seite 5 vn 9
aways @(psedge cck) if (ad) p <={9'b0, y}; if (addif) if (p[1]) p[17:9] <= p[16:9] + x; if (shr) p <= p >> 1; input iset0, ipus1; utput [2:0] i; reg [2:0] i; // sync cunter utput ikeiner7; assign ikeiner7=(i<7); initia i=0; aways @(psedge cck) if (iset0) i <= 0; if (ipus1) i <= i+1; mdue // nicht vergessen Aufgabe 2 (Synthese eines Schrittsteuerwerks) Das in der 2. Übung (Aufgabe 2a) entwrfene Schrittsteuerwerk s in Verig HDL impementiert werden und simuiert werden. As Rechenwerk verwen Sie wieder Ihre VerigImpementierung aus Aufgabe 1b) (2. Übung). Nach erfgreicher Simuatin (Quartus II, MdeSim) führen Sie die Synthese für das FPGA EP2C70F896C6 durch. 1. Lösung: mdue uebung_3 (input ck, input [8:1] x,y, input start, utput stp, utput [17:1] p); wire ikeiner7, ad, addif, shr, iset0, ipus1; stw stw(ikeiner7, ck, start, stp, ad, addif, shr, iset0, ipus1); rw rw(iset0, ipus1, ad, addif, shr, ck, x, y, p, ikeiner7); mdue mdue stw(ikeiner7, cck, start, stp, ad, addif, shr, iset0, ipus1); input cck; parameter s1 = 'b0001, s2 = 'b0010, s3 = 'b0100, s4 = 'b1000; input start, ikeiner7; reg [3:0] state ; initia state=s1; aways @(psedge cck) Seite 6 vn 9
case (state) s1: if (start) state <= s2; // ad, iset0 s2: state <= s3; s3: if (ikeiner7) state <= s2; ese state <= s4; // shr, ipus1 s4: state<=s4; defaut: state <= s1; case utput stp; assign stp = (state==s4); utput ad, addif, shr; //Steuersignae für p assign ad = (state==s1)&start; assign addif = (state==s2); assign shr = (state==s3); utput iset0, ipus1; assign iset0 = (state==s1); assign ipus1 = (state==s3); // Steuerssignae für i mdue // rw enthät zäher i mdue rw(iset0, ipus1, ad, addif, shr, cck, x, y, p, ikeiner7); input cck; input [8:1] x, y; reg [8:1] x_int; input ad, addif, shr; utput [17:1] p; reg [17:1] p; aways @(psedge cck) if (ad) p <={9'b0, y}; x_int <= x; ; if (addif) if (p[1]) p[17:9] <= p[16:9] + x_int; if (shr) p <= p >> 1; input iset0, ipus1; reg [2:0] i; // sync cunter utput ikeiner7; assign ikeiner7=(i<7); aways @(psedge cck) if (iset0) i <= 0; Seite 7 vn 9
if (ipus1) i <= i+1; mdue Achtung: Mdifikatin im Rechenwerk. Das Rechenwerk ist um ein Register x_int erweitert wrden. Dieses Register wird ebenfas mit ad geaden. Die krrekte Funktinsweise wird durch Simuatin nachgewiesen. 2. Lösung mdue stw (ikeiner7, cck, reset, start, stp, ad, addif, shr, iset0, ipus1); input cck; input reset; input start, ikeiner7; utput stp; utput iset0, ipus1; utput ad, addif, shr; assign iset0 = qs1; assign ad = ands2ut; assign addif = qs2; assign shr = qs3; assign ipus1 = qs3; assign stp = qs4; wire nstart,ands1ut,ands2ut,rs2ut,ands3ut,nikeiner7,ands4ut,rs4ut; wire qs1,qs2,qs3,qs4; nt nts1 (nstart,start); and ands1 (ands1ut, nstart, qs1); and ands2 (ands2ut, start, qs1); r rs2 (rs2ut, ands2ut, ands3ut); and ands3 (ands3ut, ikeiner7, qs3); nt nts4 (nikeiner7, ikeiner7); and ands4 (ands4ut, nikeiner7, qs3); r rs4 (rs4ut, ands4ut, qs4); // Benutzung des MegaWizzardManagers dff_wn s1 (0,reset,cck,ands1ut,qs1); dff_wn s2 (reset,0,cck,rs2ut,qs2); dff_wn s3 (reset,0,cck,qs2,qs3); dff_wn s4 (reset,0,cck,rs4ut,qs4); /*input acr; input aset; input cck; input data; utput q;*/ mdue Seite 8 vn 9
a) Ermitten Sie den Ressurcenbedarf (Lgikeemente, LUT, Fipfps). 39 Lgikeemente, Kmbinatrische Funktinen 38 LEs reaisiert, 32 Register b) Ermitten Sie die maximae Taktfrequenz, mit der Sie Ihr Design betreiben können und geben Sie den kritischen Pfad an. 351 MHz, Rechenwerk zwischen x_int und p[17] Seite 9 vn 9