ΗΥ-120: Ψηφιακή Σχεδίαση
Φθινόπωρο 2002 |
Τμ. Επ. Υπολογιστών Πανεπιστήμιο Κρήτης |
[Βιβλίο: μισή παράγραφος 6.3 (σελ. 264-269)].
Δεξιά φαίνεται το κύκλωμα ενός αποκωδικοποιητή 3-σε-8. Έχει 3 εισόδους "διεύθυνσης" (address) ή "κώδικα", και τις αποκωδικοποιεί στους 8 συνδυασμούς τους· κάθε φορά, μία και μόνο μία έξοδος είναι αναμένη (1), ενώ οι υπόλοιπες είναι όλες σβηστές (0). Κάθε έξοδος ανάβει σε ένα και μόνον ένα συνδυασμό τιμών των εισόδων, δηλαδή σε ένα μόνο τετράγωνο του χάρτη Karnaugh, άρα ισούται με το λογικό ΚΑΙ των τριών σημάτων εισόδου --σε θετική ή αρνητική πολικότητα καθένα, ανάλογα με τον ποιό συνδυασμό αποκωδικοποιεί η συγκεκριμένη έξοδος. Μιά άλλη παραλλαγή του αποκωδικοποιητή (δεν την δείχνουμε στο σχήμα εδώ) έχει μία επιπλέον είσοδο "ενεργοποίησης" ή "επίτρεψης" (enable): ο αποκωδικοποιητής λειτουργεί όπως είπαμε παραπάνω μόνον όταν η είσοδος επίτρεψης είναι αναμένη (1), αλλοιώς, όταν η είσοδος επίτρεψης είναι σβηστή (0), τότε όλες οι έξοδοι του αποκωδικοποιητή είναι σβηστές (0). Η υλοποίηση αυτής της παραλλαγής, προφανώς, είναι ίδια με το βασικό αποκωδικοποιητή, μόνο που η είσοδος επίτρεψης χρησιμοποιείται σαν επιπλέον είσοδος σε κάθε μιά πύλη AND του αποκωδικοποιητή.
Ο πολυπλέκτης μπορεί να κατασκευαστεί από τον αποκωδικοποιητή, προσθέτοντας μιάν επιπλέον είσοδο σε κάθε πύλη ΚΑΙ, και συνδυάζοντας όλες τις εξόδους των πυλών ΚΑΙ μέσω μιάς πύλης Ή, όπως φαίνεται στο σχήμα δίπλα που δείχνει έναν πολυπλέκτη 4-σε-1. Τις εισόδους διεύθυνσης εδώ τις λέμε συνήθως εισόδους επιλογής (select)· οι πύλες ΚΑΙ χρησιμοποιούν τα σήματά τους σε τρόπον ώστε μία και μόνο μία πύλη ΚΑΙ να βγάζει μη-μηδενική έξοδο --εκείνη η πύλη που αντιστοιχεί στην επιλεγόμενη είσοδο, και η οποία πύλη βγάζει έξοδο ίση με την επιλεγόμενη είσοδο. Στη συνέχεια, η πύλη Ή, βλέποντας μία μη-μηδενική είσοδο και τις υπόλοιπες μηδενικές, δίνει στην έξοδό της την τιμή της μη-μηδενικής εισόδου, άρα την τιμή της αρχικής εισόδου που αντιστοιχεί στον κώδικα των σημάτων επιλογής. Το σύμβολο του πολυπλέκτή, όπως θυμόμαστε, είναι αυτό που φαίνεται στο σχήμα κάτω δεξιά.
Όπως δείχνει το σχήμα, ένα ζευγάρι μανταλωτών, tmp και C (ελεγχόμενοι από διφασικό ρολόϊ), είναι υπεύθυνοι γιά τη διατήρηση της τιμής του μετρητή. Κατά τη βασική λειτουργία, ξεκινώντας από την τιμή αυτή, C, ο αθροιστής υπολογίζει το άθροισμα S=C+1· το άθροισμα S αποθηκεύεται στην προσωρινή θέση tmp, και στη συνέχεια μεταφέρεται στον μανταλωτή C σαν η νέα τιμή του μετρητή. Ο μετρητής αποκτά ευελιξία με την προσθήκη δύο πολυπλεκτών στις δύο εισόδους του αθροιστή. Ο πρώτος πολυπλέκτης μας επιτρέπει να επιλέγουμε αν η βάση A της πρόσθεσης θα είναι η αποθηκευμένη τιμή του μετρητή, C, ή νέα, εξωτερική τιμή που έρχεται από την είσοδο In. Ο δεύτερος πολυπλέκτης μας επιτρέπει να επιλέγουμε τι θα προστεθεί στην βάση A: η τιμή B=+1, ή B=-1, ή B=0. Με τη συνδυασμένη χρήση των δύο πολυπλεκτών προκύπτουν οι τέσσερεις χρήσιμες λειτουργίες του κυκλώματος, καθώς και δύο λιγότερο ενδιαφέρουσες πράξεις:
Γιά την πολύπλεξη των τιμών C και In προς δημιουργία της εισόδου A του αθροιστή, χρησιμοποιήστε ένα chip 74257 (τετράμπιτος πολυπλέκτης 2-σε-1), του οποίου τα pins φαίνονται στο σχήμα δίπλα. Η είσοδος επιλογής είναι το pin 1: όταν είναι 0 επιλέγονται οι αριστερές είσοδοι, και όταν είναι 1 επιλέγονται οι δεξιές είσοδοι· χρησιμοποιήστε π.χ. ένα μεταγωγό διακόπτη γιά να το οδηγήσετε. Σαν εξωτερικές εισόδους In χρησιμοποιήστε 4 σύρματα συνδεδεμένα στη γείωση ή στην θετική τροφοδοσία. Οι έξοδοι και αυτού του chip είναι "τρικατάστατοι" (θα μάθουμε αργότερα τι είναι αυτό)· γιά να λειτουργούν σωστά γιά τους εδώ σκοπούς μας, συνδέστε το pin 15 (ενεργοποίηση εξόδων, αρνητικής πολικότητας) στο λογικό 0. Τα chips που θα βρείτε στο εργαστήριο γράφουν επάνω "M74HC257B1"· Περισσότερες πληροφορίες γι' αυτά μπορείτε να βρείτε στην ιστοσελίδα http://eu.st.com/stonline/books/pdf/docs/1932.pdf .
Γιά την τροφοδότηση της σταθεράς στην είσοδο B του αθροιστή, αντί πολυπλέκτη, χρησιμοποιήστε δύο μεταγωγούς διακόπτες συνδεδεμένους όπως δείχνει στο σχήμα (πάνω αριστερά). Με τους δύο διακόπτες επάνω, όπως στο σχήμα, τα σύρματα B3B2B1B0 θα έχουν την τιμή 1111, δηλαδή τον αριθμό -1. Γυρίζοντας τον αριστερό διακόπτη κάτω, ο αριθμός B γίνεται 0001, δηλαδή +1. Γυρίζοντας και τον δεξιό διακόπτη κάτω, παίρνουμε το 0. Ο τέταρτος συνδυασμός των διακοπτών δεν είναι ιδιαίτερα ενδιαφέρων.
Πριν φτάσετε στο εργαστήριο κάντε ένα πλήρες σχεδιάγραμμα συνδεσμολογίας, δείχνοντας ακριβώς ποιό pin τίνος chip πρέπει να συνδεθεί πού, περιλαμβανομένων των τροφοδοσιών, διακοπτών, αντιστάσεων, και LED's. Στο εργαστήριο, κατασκευάστε το κύκλωμα και ελέγξτε τη σωστή λειτουργία του. Αρχίστε επιλέγοντας την εξωτερική είσοδο, In, και τη σταθερά 0, και ενεργοποιώντας τη φάση φ2 και μετά την φ1· διαπιστώσετε ότι πρώτα τα 4 LED's "tmp" και μετά τα άλλα 4 LED's "C" παίρνουν την τιμή της εξωτερικής εισόδου In. Στη συνέχεια, αλλάξτε την επιλογή του πολυπλέκτη, ώστε A=C, και επιλέξτε τη σταθερά +1 μέσω των άλλων διακοπτών. Ενεργοποιείτε εναλλάξ τις δύο φάσεις του ρολογιού, και παρακολουθείτε τους δύο τετράμπιτους αριθμούς καθώς αλλάζουν και αυξάνονται κατά 1 κάθε φορά. Συνεχίστε μέχρις ότου η τιμή του μετρητή συστραφεί (wrap around) και αρχίσει να ξαναπαίρνει τις ίδιες τιμές όπως στην αρχή. Μετά, επιλέξτε τη σταθερά -1, και ενεργοποιείτε ξανά εναλλάξ τις δύο φάσεις του ρολογιού· παρακολουθείτε τους τετράμπιτους αριθμούς να αλλάζουν με την αντίθετη σειρά και να συστρέφονται πάλι μέχρι την αρχική τιμή και πέραν αυτής. Ενεργοποιήστε ταυτόχρονα τις 2 φάσεις ρολογιού (παράνομη κατάσταση) και παρατηρήστε τις LED's. Όταν σβήσουν οι 2 φάσεις, ποιός αριθμός μένει στο μετρητή; Υπάρχει τρόπος να προβλεφθεί αυτός; Επαναλάβετε πολλές φορές γιά να δείτε αν είναι προβλέψιμος ο αριθμός που προκύπτει, και προσπαθήστε να εξηγήστε τις παρατηρήσεις σας. Τέλος, ξαναφορτώστε έναν προκαθορισμένο αριθμό μέσω της εισόδου In (διαφορετικόν από τον πρώτο, και διαφορετικόν από τον αριθμό που είχε μείνει στο μετρητή), και ξαναμετρήστε λίγο πάνω και λίγο κάτω.
Ερώτηση κρίσεως: Αν ερμηνεύσουμε την τετράμπιτη τιμή του μετρητή σαν προσημασμένο αριθμό συμπληρώματος-2, είναι η μέτρηση προς τα πάνω πάντα σωστή; Όταν "τελειώνουν" τα bits και ο μετρητής συστρέφεται, από ποιόν αριθμό "πηδάει" σε ποιόν; Η μέτρησή προς τα κάτω είναι πάντα σωστή; Κατά τη συστροφή, από ποιόν αριθμό "πηδάει" σε ποιόν; Αν τώρα ερμηνεύσουμε την τετράμπιτη τιμή του μετρητή σαν μη προσημασμένο αριθμό, τότε είναι η μέτρηση προς τα πάνω πάντα σωστή; Σε ποιό σημείο συμβαίνει το "πήδημα" των αριθμών κατά τη συστροφή; Η μέτρησή προς τα κάτω είναι πάντα σωστή; Κατά τη συστροφή, από ποιόν αριθμό "πηδάει" σε ποιόν; Πώς δικαιολογείται η ορθότητα της λειτουργίας του μετρητή τόσο γιά προσημασμένους αριθμούς όσο και γιά μη προσημασμένους; Θυμηθείτε τη συνεστραμένη αναπαράσταση των αριθμών που είδαμε στο εργαστήριο 6.
Το σχήμα δεξιά δείχνει τον απλούστερο τρόπο κατασκευής ενός τέτοιου ζευγαριού μανταλωτών. Τις δύο φάσεις του ρολογιού τις προσεγγίζουμε με το εξωτερικό σήμα ρολογιού, ck (clock), και το συμπλήρωμά του, ck'. Η προσέγγιση αυτή είναι ατελής σε ένα σημείο: λόγω της μη μηδενικής καθυστέρησης του αντιστροφέα, όταν το σήμα ck ανάβει, και μέχρι να προλάβει να σβήσει το ck', βρίσκονται γιά λίγο αναμένα τα σήματα φόρτωσης και των δύο μανταλωτών, όπως φαίνεται στο διάγραμμα χρονισμού στο κάτω μέρος του σχήματος. Η ατέλεια αυτή αντιμετωπίζεται από τον κατασκευαστή με το να φροντίσει η καθυστέρηση αυτού του αντιστροφέα να είναι πάντα σημαντικά μικρότερη από την καθυστέρηση του δεύτερου μανταλωτή, όπως θα αναλυθεί παρακάτω.
Επειδή ο δεύτερος μανταλωτής ακολουθεί πάντα πιστά τον πρώτο, παίρνοντας την τιμή του κάθε φορά που ανάβει το ρολόϊ, γι' αυτό ο πρώτος λέγεται "αφέντης" και ο δεύτερος "σκλάβος"· έτσι προέκυψε το όνομα αυτού του κυκλώματος: "flip-flop αφέντη-σκλάβου" (master-slave flip-flop). Όπως θα δούμε, η συμπεριφορά αυτού του flip-flop καθορίζεται από την ακμή του ρολογιού (εδώ, την θετική ακμή), δηλαδή από τη στιγμή που η τιμή του ρολογιού αλλάζει καθ' ορισμένη κατεύθυνση (εδώ, από 0 σε 1), και όχι από το χρονικό διάστημα που το ρολόϊ έχει ορισμένη τιμή, π.χ. τιμή 1. Υπάρχουν και άλλοι τρόποι να φτιάξει κανείς τέτοια flip-flops που η συμπεριφορά τους να καθορίζεται από μία ακμή του ρολογιού, τους οποίους εμείς δεν θα δούμε γιατί είναι πιό πολύπλοκοι. Τα άλλα εκείνα κυκλώματα τα ονομάζουμε "ακμοπυροδότητα flip-flops" (edge-triggered flip-flops), διότι ενεργοποιούνται (πυροδοτούνται) από την ακμή του ρολογιού. Δεδομένου ότι η εξωτερική συμπεριφορά των flip-flop αφέντη-σκλάβου και των ακμοπυροδότητων flip-flops είναι η ίδια, ο κόσμος συχνά δεν κάνει διάκριση μεταξύ τους, και το ίδιο θα κάνουμε κι εμείς --θα χρησιμοποιούμε τους δύο όρους σαν ισοδύναμους. Όταν γίνεται διάκριση μεταξύ "μανταλωτή" (latch) και "flip-flop", συνήθως η διάκριση αυτή είναι ότι το flip-flop είναι ακμοπυροδότητο (ή αφέντη-σκλάβου), ενώ ο μανταλωτής είναι όπως τον είδαμε μέχρι τώρα --ενεργοποιείται καθ' όλη τη χρονική διάρκεια που το σήμα φόρτωσης είναι αναμένο (1). Τέλος, από άποψη γραφικού συμβόλου, η διάκριση γίνεται μέσω ενός μικρού τρίγωνου στην είσοδο ρολογιού που τοποθετείται στα flip-flops αφέντη-σκλάβου ή ακμοπυροδότητα, όπως φάινεται στο σχήμα δεξιά, ενώ δεν τοποθετείται στους απλούς μανταλωτές.
Η λειτουργία του κυκλώματος φάινεται με λεπτομέρεια στο διάγραμμα χρονισμού στο κάτω μέρος του σχήματος. Η είσοδος D επιτρέπεται να αλλάζει τιμή συνεχώς, εκτός από ένα μικρό χρονικό "παράθυρο εγκυρότητας" γύρω από την "ενεργή ακμή" του ρολογιού· εδώ, η ενεργή ακμή είναι η θετική (ανερχόμενη), ενώ σε άλλα κυκλώματα μπορεί να είναι η αρνητική (κατερχόμενη). Κατά την ημιπερίοδο πριν την ενεργή ακμή, όταν ck'=1, ο αφέντης μανταλωτής είναι ενεργοποιημένος, κι έτσι η τιμή της εισόδου D αντιγράφεται συνεχώς στον εσωτερικό κόμβο tmp· παρ' όλα αυτά, ο σκλάβος είναι αδρανής, κι έτσι η έξοδος Q παραμένει σταθερά ίση με την παλαιά της τιμή "old". Μόλις έλθει η ενεργή ακμή του ρολογιού, ο αφέντης κλείνει, κρατώντας μέσα του την τελευταία τιμή της εισόδου D που είδε, a. Ταυτόχρονα, ο σκλάβος ανοίγει, φέρνοντας την τιμή αυτή, a, στην έξοδο Q. Καθ' όλη τη διάρκεια της υπόλοιπης περιόδου, η έξοδος Q δεν μπορεί να ξαναλλάξει, αρχικά διότι ο κόμβος tmp είναι σταθερός, και αργότερα διότι ο σκλάβος μανταλωτής είναι σβηστός. Το συνολικό αυτό κύκλωμα έχει την επιθυμητή ιδιότητα ότι η είσοδός του D επιτρέπεται να είναι συνδυαστική συνάρτηση της εξόδου του Q, διότι όταν η έξοδος αλλάζει το κύκλωμα είναι ήδη αναίσθητο σε αλλαγές της εισόδου του, δηλαδή αυτές δεν επηρρεάζουν την ήδη αποθηκευμένη τιμή του, γιά τον εξής λόγο. Η έξοδος αλλάζει τόση ώρα μετά την ενεργή ακμή του ρολογιού όση η καθυστέρηση του σκλάβου. Όμως, ο αφέντης καθίσταται αναίσθητος σε αλλαγές της εισόδου D μόλις σβήσει το ck'. Επειδή ο αντιστροφέας κατασκευάζεται με καθυστέρηση πάντα μικρότερη από εκείνη του σκάλβου, το δεύτερο γεγονός (αναισθησία εισόδου) συμβαίνει πάντα πριν από το πρώτο (αλλαγή εξόδου).
Συμπερασματικά, η λειτουργία ενός ακμοπυροδότητου flip-flop (αφέντη-σκλάβου) έχει ως εξής. Η τιμή που υπήρχε στην είσοδό του λίγο πριν την ενεργή ακμή του ρολογιού αποθηκεύεται μέσα στο flip-flop κατά την ενεργή ακμή του ρολογιού, εμφανίζεται στην έξοδο του flip-flop λίγο μετά την ενεργή ακμή, και παραμένει εκεί σταθερή μέχρι λίγο μετά την επόμενη ενεργή ακμή του ρολογιού. Το flip-flop που είδαμε είναι flip-flop "θετικής ακμοπυροδότησης": η ενεργή ακμή του ρολογιού του είναι η θετική ακμή (μετάβαση από το 0 στο 1). Άλλα flip-flops είναι αρνητικής ακμοπυροδότησης": η ενεργή ακμή τους είναι η μετάβαση του ρολογιού από το 1 στο 0. Παρατηρώντας εξωτερικά ένα flip-flop, κατά την άλλη ακμή του ρολογιού (την μη ενεργή), τίποτα το ιδιαίτερο δεν συμβαίνει --με άλλα λόγια, μόνο η μία από τις δύο ακμές σε κάθε περίοδο ρολογιού είναι η ενεργή ακμή, κατά την οποία συμβαίνει η "εγγραφή" στο flip-flop.
Η λύση του προβλήματος είναι να χρησιμοποιηθεί ένας διακόπτης SPDT και ένας μανταλωτής τύπυ RS, όπως φάινεται στο κάτω μέρος του σχήματος. Η βασική ιδιότητα αυτού του κυκλώματος είναι η εξής: όταν το κινητό μέρος του διακόπτη βρίσκεται καθ' οδόν από τη μία επαφή προς την άλλη, τότε και οι δύο είσοδοι R και S του μανταλωτή είναι 0 (καμία από τις δύο δεν κάνει επαφή με την τροφοδοσία αριστερά), κι έτσι η έξοδος ck παραμένει σταθερή στην προηγούμενη τιμή της. Όταν ο διακόπτης δεν είναι πατημένος, R=1 και S=0, άρα ck=0. Όταν ο διακόπτης πατηθεί, και ενώ βρίσκεται καθ' οδόν, πρώτα γίνεται R=0, οπότε η έξοδος παραμένει σταθερή εκεί που ήταν, στο 0. Μόλις ο διακόπτης ακουμπήσει γιά πρώτη φορά την κάτω επαφή, γίνεται S=1 ενώ R=0, άρα η έξοδος αλλάζει τιμή σε ck=1. Όταν ο διακόπτης αναπηδήσει, γίνεται S=0 ενώ R=0, οπότε η έξοδος παραμένει σταθερή εκεί που ήταν, δηλαδή στο 1. Παρατηρήστε ότι οι αναπηδήσεις δεν είναι τόσο μεγάλες ώστε ο διακόπτης να ξανακάνει επαφή επάνω --απλώς χοροπηδάει γιά λίγο κοντά στην κάτω επαφή. Τελικά, όταν ο διακόπτης ισορροπήσει, γίνεται S=1 ενώ R=0, άρα η έξοδος παραμένει στο 1. Συνολικά, βλέπουμε ότι η έξοδος έκανε μόνο μία μετάβαση από το 0 στο 1, τη στιγμή της πρώτης επαφής του διακόπτη κάτω. Τα ανάλογα συμβαίνουν και όταν αφήνουμε το διακόπτη να επανέλθει επάνω.
Up to the Home Page of CS-120
|
© copyright
University of Crete, Greece.
Last updated: 27 Nov. 2002, by M. Katevenis. |