ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ Ανώτατο Εκπαιδευτικό Ίδρυμα Πειραιά Τεχνολογικού Τομέα ΜΙΚΡΟΗΛΕΚΤΡΟΝΙΚΗ - VLSI Ενότητα: Ακολουθιακή λογική, καταχωρητές και flip-flops Κυριάκης - Μπιτζάρος Ευστάθιος Τμήμα Ηλεκτρονικών Μηχανικών Τ.Ε. 1
Άδειες Χρήσης Το παρόν εκπαιδευτικό υλικό υπόκειται σε άδειες χρήσης Creative Commons. Για εκπαιδευτικό υλικό, όπως εικόνες, που υπόκειται σε άλλου τύπου άδειας χρήσης, η άδεια χρήσης αναφέρεται ρητώς. Χρηματοδότηση Το παρόν εκπαιδευτικό υλικό έχει αναπτυχθεί στα πλαίσια του εκπαιδευτικού έργου του διδάσκοντα. Το έργο «Ανοικτά Ακαδημαϊκά Μαθήματα στο Πανεπιστήμιο Αθηνών» έχει χρηματοδοτήσει μόνο τη αναδιαμόρφωση του εκπαιδευτικού υλικού. Το έργο υλοποιείται στο πλαίσιο του Επιχειρησιακού Προγράμματος «Εκπαίδευση και Δια Βίου Μάθηση» και συγχρηματοδοτείται από την Ευρωπαϊκή Ένωση (Ευρωπαϊκό Κοινωνικό Ταμείο) και από εθνικούς πόρους. 2
ΠΕΡΙΕΧΟΜΕΝΑ ΑΣΚΗΣΗ 8 η : Ακολουθιακά κυκλώματα D-latch και D-flip-flop... ΑΣΚΗΣΗ 9 η -10 η : Αριθμητική λογική μονάδα ενός ψηφίου (1-bit ALU)... ΑΣΚΗΣΗ 8 η 3
ΑΚΟΛΟΥΘΙΑΚΑ ΚΥΚΛΩΜΑΤΑ (D-Latch & D-Flip-Flop) ΘΕΩΡΙΑ Μανδαλωτής και καταχωρητής με πολυπλέκτες (Παρ. 7.2.2, 7.2.3 έως σελίδα 399) ΕΡΓΑΣΤΗΡΙΑΚΟ ΜΕΡΟΣ 1. Σχεδιάστε το λογικό κύκλωμα ενός στατικού D flip-flop που ενεργοποιείται στην κατερχόμενη παρυφή του σήματος χρονισμού (clock). Να χρησιμοποιήσετε πολυπλέκτες (multiplexers) για να υλοποιήσετε D-latches τα οποία θα συνδέσετε στη συνέχεια σε δομή master-slave. Στην ανατροφοδότηση να χρησιμοποιήσετε δύο αντιστροφείς για να εισάγετε την απαιτούμενη καθυστέρηση. 2. Σχεδιάστε και εξομοιώστε το layout ενός D-latch το οποίο ενεργοποιείται όταν το σήμα clock είναι 0 (level sensitive). (t r = t f = 50ps) ΣΗΜΕΙΩΣΗ:Για να σχεδιάσετε με το μεταφραστή μίας γραμμής (compile one line) τον multiplexer χρησιμοποιήστε τη λογική εξίσωση της εξόδου του χωρίς να λάβετε υπόψη την αντιστροφή στο σήμα επιλογής. 3. Υλοποιήστε το D-flip-flop χρησιμοποιώντας δύο D-latches σύμφωνα με το λογικό κύκλωμα που σχεδιάσατε στο πρώτο βήμα. Το τελικό layout φαίνεται στο παρακάτω σχήμα. (Β είναι η έξοδος του πρώτου latch) Q Q Σχήμα 8.1. Το D flip-flop 4. Εξομοιώστε το layout του D flip-flop που σχεδιάσατε ώστε να παραχθούν οι κυματομορφές που δίνονται στο επόμενο σχήμα. Προσέξτε ότι η συχνότητα του clock δεν είναι ακέραιο πολλαπλάσιο της συχνότητας της εισόδου D για να είναι σταθεροποιημένη η τιμή της εισόδου τη στιγμή της παρυφής του clock. Β D Clk Clk 4
Σχήμα 8.2. Παλμοί εξομοίωσης του D flip-flop. ΕΡΓΑΣΙΑ ΓΙΑ ΤΟ ΣΠΙΤΙ Χρησιμοποιώντας το D flip-flop που σχεδιάσατε στο εργαστήριο υλοποιείστε και εξομοιώστε έναν ασύγχρονο απαριθμητή που μετράει από το 0-15. 5
ΑΣΚΗΣΗ 9 η -10 η ΑΡΙΘΜΗΤΙΚΗ-ΛΟΓΙΚΗ ΜΟΝΑΔΑ ΕΝΟΣ ΨΗΦΙΟΥ (1-BIT ALU) ΘΕΩΡΙΑ Αντικείμενο της άσκησης είναι ο λογικός σχεδιασμός, η εξομοίωση και η παραγωγή του layout μιας αριθμητικής-λογικής μονάδας ενός ψηφίου (1-bit ALU) συνδυάζοντας τη χρήση του shematic editor DSCH, του Microwind και της γλώσσας περιγραφής υλικού (Hardware Description Language, HDL) Verilog. Το λογικό διάγραμμα και ο πίνακας αλήθειας των υπομονάδων που απαρτίζουν την ALU καθώς και της πλήρους ALU δίνονται στα επόμενα σχήματα: MUX Λογική Μονάδα (Logic unit, LU) Full adder Αριθμητική Μονάδα (Arithmetic Unit, AU) 6
LU MUX AU Αριθμητική-Λογική Μονάδα (ALU) ΕΡΓΑΣΤΗΡΙΑΚΟ ΜΕΡΟΣ Αρχικά πρέπει να σχεδιαστούν και να εξομοιωθούν με χρήση του DSCH όλες οι υπομονάδες που απαιτούνται για την υλοποίηση της ALU, δηλαδή ένας πολυπλέκτης 4 σε 1, ένας πλήρης αθροιστής ενός ψηφίου, η λογική μονάδα LU και η αριθμητική μονάδα AU. Μετά θα σχεδιαστεί η ALU όπως φαίνεται στο προηγούμενο σχήμα. Ακολούθως πρέπει να παραχθεί ο κώδικας Verilog ο οποίος θα χρησιμοποιηθεί στο Microwind για την αυτόματη παραγωγή του layout. Το layout πρέπει τέλος να εξομοιωθεί ώστε να επιβεβαιωθεί η ορθή λειτουργία σύμφωνα με τα αποτελέσματα που παίρνουμε από την εξομοίωση του σχηματικού. Στο επόμενο σχήμα φαίνεται το περιβάλλον του schematic editor. Από την Symbol Library επιλέγονται τα λογικά στοιχεία που αποτελούν το κύκλωμα. Στα advanced στοιχεία περιλαμβάνονται και τα pads εισόδου-εξόδου τα οποία είναι απαραίτητα για τη δημιουργία συμβόλου από το σχηματικό. Τα προεπιλεγμένα ονόματα που δίνονται σε διάφορα στοιχεία (π.χ. clk1) μπορούν να αλλαχθούν με διπλό κλικ πάνω στο στοιχείο. Επίσης στο Schematic editor μπορείτε να φτιάξετε σύμβολο για το σχηματικό ώστε να είναι δυνατός ο ιεραρχικός σχεδιασμός του κυκλώματος. 7
Για να γίνει λογική εξομοίωση του κυκλώματος πρέπει στις εισόδους να τοποθετηθούν γεννήτριες παλμών (clocks) ή άλλη πηγή και στις εξόδους LEDs ή άλλου τύπου display. Η εξομοίωση ξεκινάει από το menu Simulate ή το αντίστοιχο εικονίδιο της γραμμής εργαλείων και εμφανίζεται στην οθόνη ένα παράθυρο ελέγχου. Πατώντας το εικονίδιο του διαγράμματος χρονισμού (timing diagram) από τη γραμμή εργαλείων η εξομοίωση παγώνει και εμφανίζονται οι κυματομορφές των εισόδων και εξόδων του κυκλώματος μέχρι εκείνη τη στιγμή. Στο επόμενο σχήμα φαίνεται το περιβάλλον εξομοίωσης για τον αθροιστή ενός ψηφίου. 8
Κλείνοντας το παράθυρο του διαγράμματος χρονισμού η εξομοίωση συνεχίζεται μέχρι να κλείσετε και το παράθυρο ελέγχου της εξομοίωσης. Επίσης, κατά τη διάρκεια της εξομοίωσης δίνεται η δυνατότητα να εμφανίζονται πάνω στο σχηματικό οι λογικές τιμές των κόμβων ή/και να αλλάζουν χρώμα τα καλώδια και να ρυθμίζεται η ταχύτητά της. Από το menu Simulatesimulation options καθορίζονται διάφορες παράμετροι της εξομοίωσης, όπως η καθυστερήσεις των πυλών και των διασυνδέσεων. 1. Σχεδιάστε και εξομοιώστε στον schematic editor ένα πολυπλέκτη (multiplexer) τεσσάρων εισόδων σε μία έξοδο, χρησιμοποιώντας πολυπλέκτες των δύο εισόδων. Το λογικό διάγραμμα δίνεται στο επόμενο σχήμα. Σώστε το σχέδιο με όνομα mmux4. ΠΡΟΣΟΧΗ: Μη δώσετε όνομα που αρχίζει από mux π.χ. mux4 γιατί το mux είναι δεσμευμένη λέξη και θα σας δημιουργήσει πρόβλημα κατά την παραγωγή του layout από Verilog. 2. Για τον πολυπλέκτη που σχεδιάσατε δημιουργήστε ένα σύμβολο. Πριν ξεκινήσετε τη διαδικασία δημιουργίας συμβόλου πρέπει να σβήσετε τα clocks που έχετε βάλει για την εξομοίωση. Επιλέξτε από το menu FILE Schema to new symbol ή το αντίστοιχο εικονίδιο από το toolbar. Στο menu που θα εμφανιστεί επιλέξτε Sort by increasing order για να αλλάξετε τη διάταξη των ακροδεκτών στο σύμβολο. Επιλέγοντας τη Verilog βλέπετε πώς περιγράφεται το κύκλωμά σας με τη γλώσσα περιγραφής υλικού. 3. Σχεδιάστε, εξομοιώστε και δημιουργήστε σύμβολο για τον πλήρη αθροιστή του ενός ψηφίου (1-bit full-adder) το λογικό διάγραμμα του οποίου δίνεται στο παρακάτω σχήμα. 9
4. Χρησιμοποιώντας τον πολυπλέκτη 4:1 που σχεδιάσατε στο βήμα 1 σχεδιάστε, εξομοιώστε και δημιουργήστε σύμβολο για τη λογική μονάδα του ενός ψηφίου, όπως φαίνεται στο αντίστοιχο σχήμα του θεωρητικού μέρους. 5. Σχεδιάστε, εξομοιώστε και δημιουργήστε σύμβολο για την αριθμητική μονάδα του ενός ψηφίου, όπως φαίνεται στο αντίστοιχο σχήμα του θεωρητικού μέρους. 6. Σχεδιάστε και εξομοιώστε την αριθμητική-λογική μονάδα του ενός ψηφίου (1-bit ALU). Το λογικό διάγραμμά της καθώς και τα σήματα εισόδου και εξόδου που πρέπει να λάβετε υπόψη σας δίνονται στο παρακάτω σχήμα. Το διάγραμμα χρονισμού της ALU φαίνεται στο παρακάτω σχήμα. Για να είναι πιο εύκολη η σύγκρισή του με τον αντίστοιχο πίνακα αλήθειας, που δίνεται στο θεωρητικό μέρος και για να διευκολυνθείτε στην εξομοίωση του layout χρησιμοποιήστε στην εξομοίωση παλμούς ρολογιού όπως αυτοί που φαίνονται στο παρακάτω σχήμα. Η περίοδος του σήματος εισόδου Α είναι 40nsec, του Β 80nsec κλπ. 10
7. Από το menu File Make Verilog File παράγετε το αρχείο Verilog για την τελική μορφή της ALU χωρίς να σβήσετε τα σήματα χρονισμού. Ο αρχείο Verilog Verilog έχει την παρακάτω μορφή: // DSCH 2.6e // 4/6/2003 12:34:57 ðì // C:\users\mpitz\tei\lab\aluhier.sch module aluhier( C_in,C_in,S1,S0,A,B,S1,S0,B,A,S2, S2,C_out,alu,alu,au,lu); input C_in,C_in,S1,S0,A,B,S1,S0; input B,A,S2,S2; output C_out,alu,alu,au,lu; wire w11,w12,w13,w14,w15,w16,w17,w18; wire w19,w20,w21,w22,w23; mux #(17) mux(alu,au,lu,s2); not #(12) inv_lu1(w11,a); and #(15) and2_lu2(w12,b,a); or #(15) or2_lu3(w13,a,b); xor #(15) xor2_lu4(w14,a,b); mux #(13) mux_mm1_lu5(w15,w14,w11,s0); mux #(20) mux_mm2_lu6(lu,w16,w15,s1); mux #(13) mux_mm3_lu7(w16,w12,w13,s0); and #(15) and2_au8(w18,w17,s1); and #(15) and2_au9(w19,b,s0); or #(26) or2_au10(w20,w19,w18); not #(12) inv_au11(w17,b); xor #(27) xor2_fa1_au12(w21,a,w20); or #(15) or2_fa2_au13(c_out,w22,w23); and #(15) and2_fa3_au14(w22,c_in,w21); xor #(22) xor2_fa4_au15(au,w21,c_in); and #(15) and2_fa5_au16(w23,w20,a); endmodule // Simulation parameters in Verilog Format always #64000 C_in=~C_in; #16000 S1=~S1; #8000 S0=~S0; #2000 A=~A; #4000 B=~B; #32000 S2=~S2; 11
// Simulation parameters // C_in CLK 640.000 640.000 // S1 CLK 160.000 160.000 // S0 CLK 80.000 80.000 // A CLK 20.000 20.000 // B CLK 40.000 40.000 // S2 CLK 320.000 320.000 Οι γραμμές που αρχίζουν με // είναι σχόλια. Το πρώτο τμήμα του κώδικα που ξεκινάει με τη λέξη module και τελειώνει με endmodule περιγράφει τη δομή του κυκλώματος της ALU. Το δεύτερο τμήμα του κώδικα περιγράφει στην ίδια γλώσσα τους παλμούς που χρησιμοποιήθηκαν για την εξομοίωση του κυκλώματος. 8. Παράγετε αυτόματα με το Μicrowind το layout της ALU (από το menu Compile Compile Verilog File) χρησιμοποιώντας τεχνολογία CMOS 0.12μm, και εξομοιώστε το. Σημαντική βοήθεια προσφέρει η μετάφραση των παλμών που περιλαμβάνονται στον κώδικα Verilog και η αντιστοίχησή τους στα σήματα του layout. Παρατηρείστε την αναλογική μορφή των σημάτων και τα πιθανά spikes σε αντίθεση με τους ψηφιακούς παλμούς του λογικού εξομοιωτή του DSCH. 12