HY220 Pipelines and FSMs Χειμερινό Εξάμηνο 2009 2010
Latency Throughput Tc a[n] b[n] x[n] a[0] a[1] a[2] a[3] a[4] a[5] a[6] a[7] c[n] Input Regs +1 + Output Reg Input Regs Output Reg b[0] b[1] b[2] b[3] b[4] b[5] b[6] b[7] c[0] c[1] c[2] c[3] c[4] c[5] c[6] c[7] x[0] x[1] x[2] x[3] x[4] x[5] x[6] x[7] Η περίοδος Τc ανάλογη της καθυστέρησης ενός πολλαπλασιαστή και ενός αθροιστή + επιβάρυνση από καταχωρητές Τc > Tc2q + Tmult + Tadd + Tsetup Latency = Tc Throughput = 1/Tc ΗΥ220 University of Crete 2
Pipeline Χώριστε την εργασία που εκτελείτε σε επιμέρους μικρότερες υπο εργασίες Κάθε υπο εργασία περιμένουμε να χρειάζεται αρκετά λιγότερο χρόνο από τη συνολική εργασία. Στην ιδανική περίπτωση αν η συνολική εργασία απαιτούσε Τ μονάδες χρόνου θα θέλαμε κάθε υποεργασία (έστω Ν στο σύνολο) να απαιτεί Τ/Ν μονάδες χρόνου ΗΥ220 University of Crete 3
Pipeline ΗΥ220 University of Crete 4
Pipeline ΤMULT = 5 ns TADD = 2 ns TINC = 1 ns TSETUP= 0.4 ns TC2Q = 0.3ns To χειρότερο μονοπάτι στο πρώτο στάδιο ΤCYCLE > TC2Q + TMULT + TSETUP = 0.3 + 5 + 0.4 = 5.7 ns Επιβάρυνση καταχωρητών = Χρόνος λόγω καταχωρητών / Συνολικός χρόνος = 0.7 ns / 5.7 = 12% Στην αρχική εκδοχή ή( (χωρίς ί pipeline καταχωρητές) ) Συνολικός χρόνος = 7.7 ns (TC2Q + TMULT + ΤADD +TSETUP ) Επιβάρυνση καταχωρητών εισόδου/εξόδου / = 0.7/7.7 = 9% ΗΥ220 University of Crete 5
Τοποθέτηση καταχωρητών ΗΥ220 University of Crete 6
Τοποθέτηση καταχωρητών Διαφορετικά μονοπάτια συναντούν διαφορετικό πλήθος από καταχωρητές στη διαδρομή τους προς την έξοδο Μια σωστά pipelined λύση αυτό πρέπει να το απαγορεύει ΗΥ220 University of Crete 7
Παραδείγματα Pipeline ΗΥ220 University of Crete 8
More Pipelined ΗΥ220 University of Crete 9
Παράλληλες μονάδες με χρονική επικάλυψη ΗΥ220 University of Crete 10
Παράλληλες μονάδες με χρονική επικάλυψη ΗΥ220 University of Crete 11
FIR Example Create an FIR filter y[n] = ax[n] + bx[n 1] + cx[n 2] x[n] x[n 1] x[n 2] *a *b *c * y[n] ΗΥ220 University of Crete 12
FIR Example The easy way 3multipliers, 2 adders assign y <= a*x + b*x x_1 1+ c*x x_2; x[n] x[n 1] x[n 2] *a *b *c * y[n] ΗΥ220 University of Crete 13
FIR Example Dataflow x[n] x[n 1] x[n 2] a b c * 0 + ΗΥ220 University of Crete 14
FSM always @( posedge Clock) begin if (Reset) CurrentState <= STATE_0; else CurrentState <= NextState; always @(CurrentState) begin sel_x = 2'b0; sel_ coef = 2'b0; x[n x[n x[n] sel_adder = 1'b0; 1] 2] case (CurrentState) STATE_0: STATE_1: STATE_2: begin sel_x = 0; sel_coef = 0; sel_adder = 0; NextState = STATE_1; begin sel_x = 1; sel_coef = 1; sel_adder = 1; NextState = STATE_2; begin sel_x = 2; sel_coef = 2; sel_adder = 1; NextState = STATE_0; case ΗΥ220 University of Crete 15 a b c * 0 +
Multiplexers always @(sel_x or x or x_1 or x_2) begin case (sel x) _ 0: selected_x <= x; 1: selected_x <= x_1; 2: selected_x <= x_2; default: selected_x <= x; case x[n] x[n x[n 1] 2] * always @(sel_coef) begin case (sel_coef) 0: selected_coef <= 1; 1: selected_coef <= 2; 2: selected_coef <= 3; default:selected_coef <= 1; case a b c 0 + always @(sel_adder or mul_out) begin case (sel_adder) 0: selected_add <= 0; 1: selected_add <= mul_out; default:selected_coef <= 1; case ΗΥ220 University of Crete 16
Adder Multiplier always @(selected_coefcoef or selected_x) begin mul_out <= selected_x * selected_coef; x[n] x[n x[n 1] 2] always @(mul_out or selected_add) begin add_out <= mul_out + selected_add; a b c * 0 + always @( posedge Clock) begin if (Reset) Out <= 0; else Out <= add_out; ΗΥ220 University of Crete 17
FSM Pipeline x[n] x[n 1] x[n 2] a b c * 0 + ΗΥ220 University of Crete 18
Pipelined FSM always @( posedge Clock) begin if (Reset) CurrentState <= STATE_0; else CurrentState <= NextState; always @(CurrentState) begin sel_x = 2'b0; sel_ coef = 2'b0; x[n x[n x[n] sel_adder = 1'b0; 1] 2] case (CurrentState) STATE_0: STATE_1: STATE_2: begin sel_x = 0; sel_coef = 0; sel_adder = 1; NextState = STATE_1; begin sel_x = 1; sel_coef = 1; sel_adder = 1; NextState = STATE_2; begin sel_x = 2; sel_coef = 2; sel_adder = 0; NextState = STATE_0; case ΗΥ220 University of Crete 19 a b c * 0 +
Processor ΗΥ220 University of Crete 20
Processor Pipelined ΗΥ220 University of Crete 21
Inputs in FSM Case study: Read the PIN and them print it to the LCD FSM ΗΥ220 University of Crete 22
FSM with inputs assign key_pressed = 1 2 3 0; always @(key_pressed or CurrentState) begin output = 0; case (CurrentState) STATE_S0: begin if (key_pressed) NextState = STATE_S1; STATE_S1: S1: begin if (key_pressed) NextState = STATE_S2; STATE_S2: begin if (key_pressed) NextState = STATE_S3; STATE_S3: begin output = pin; if (key_pressed) NextState = STATE_S0; default: begin // in case we reach a bad state case S0 S1 S2 S3 key key key print ΗΥ220 University of Crete 23
FSM with inputs pin[0] pin[1] pin[2] key_pressed always @(posedge Clk) begin if (~Reset_) pin = 3 b0; else if (FSMstate==S0) pin = {2 b0, key_pressed}; else if (FSMstate==S1) pin = {1 b0, pin[0], key_pressed}; else if (FSMstate==S2) pin = {pin[1:0], key_pressed}; ΗΥ220 University of Crete 24