ΗΥ-120: Ψηφιακή Σχεδίαση
Φθινόπωρο 2017 |
Τμ. Επ. Υπολογιστών © Πανεπιστήμιο Κρήτης |
[Up - Table of Contents] [Prev - 0. Introduction] |
[printer version - PDF] [2. Relays - Next] |
[Βιβλία: προαιρετικά μπορείτε να διαβάσετε: Dally: §4.1 (switch logic), §8.3 (την πρώτη σελίδα) (MUX), §8.8 (ROM)· ή Mano (5η έκδοση): § 1.7.μέρος (σελ. 26-27), § 4.11.μέρος (σελ. 158-159)· ή Wakerly: § 2.15.1 (σελ. 68-70), § 5.7.0 (σελ. 471-472)]
Ο πίνακας που ακολουθεί αποτελεί μιά περίληψη των παραπάνω παραγράφων 0.6 - 0.8. Γιά πληρότητα, προσθέσαμε και το κύκλωμα της §0.8 με το όνομα "ταυτότητα" (identity), αν και συνήθως δεν θεωρούμε ενδιαφέρουσα αυτήν την τόσο απλή λογική πράξη. Στον πίνακα αυτόν χρησιμοποιούμε τον όρο "OFF" όταν μεν πρόκειται γιά διακόπτες γιά να σημαίνει "ελεύθερος" (όχι πατημένος), όταν δε πρόκειται γιά LED γιά να σημαίνει "σβηστή"· αντίστροφα, ο όρος "ON" γιά μεν τους διακόπτες σημαίνει "πατημένος" γιά δε τις LED σημαίνει "αναμένη".
Ο πίνακας αυτός δίνει αναλυτικά τη συμπεριφορά των κυκλωμάτων και των αντίστοιχων "Λογικών Συναρτήσεων" (πράξεων) γιά τις διάφορες περιπτώσεις εισόδων τους, δηλαδή κατάστασης των διακοπτών· τέτοιους πίνακες τους λέμε Πίνακες Αληθείας (truth tables). Γιά το κύκλωμα της ταυτότητας, ο πίνακας αληθείας μας λέει ότι η έξοδός του (φωτοβολία της LED) βρίσκεται πάντα σε ευθεία αντιστοιχία με την είσοδό του (κατάσταση του διακόπτη A): OFF γιά OFF και ON γιά ON. Γιά τη λογική πράξη OXI (ΝΟΤ), ο πίνακας μας δείχνει ότι η έξοδός της είναι πάντα το αντίστροφο (ανάποδο) της εισόδου της A, εξ' ου και το όνομα του κυκλώματος αυτού που συχνά λέγεται "αντιστροφέας" (inverter). Γιά την λογική πράξη ΚΑΙ (AND), η έξοδός της είναι συνάρτηση των δύο εισόδων της, A και B: είναι ON μόνον στον έναν από τους 4 συνδυασμούς τιμών των A και B, όταν A και B είναι ON· αυτό προκύπτει όταν οι διακόπτες είναι συνδεδεμένοι "εν σειρά". Τέλος, η λογική συνάρτηση Ή (OR) είναι ON όταν A είναι ON ή B είναι ON (ή και οι δύο είναι ON)· αυτό προκύπτει όταν οι διακόπτες είναι συνδεδεμένοι "εν παραλλήλω".
Οι λογικές πράξεις AND και OR είναι ανάλογες πλήθους εννοιών της καθημερινής ζωής, π.χ.:
Στο εργαστήριο, κατασκευάστε τα κυκλώματα, ελέγξτε τα, και δείξτε τα στο βοηθό. Γιά να ελεγχθεί πλήρως το κάθε κύκλωμα πρέπει να τού εφαρμόσετε καθέναν από τους 8 συνδυασμούς εισόδων που έχει ο πίνακας αληθείας, και να διαπιστώσετε ότι η LED κάνει το σωστό γιά καθέναν· καθώς τα ελέγχετε, διασταυρώστε την ορθότητα της συνθήκης γιά την άρνηση της κάθε εξόδου.
Το πρώτο κύκλωμα υλοποιεί τη λογική πράξη "αποκλειστικό Ή" (exclusive OR - XOR), διότι η LED ανάβει όταν είναι πατημένος αποκλειστικά ο ένας από τους δύο διακόπτες και όχι και οι δύο μαζί. Παρατηρήστε το κύκλωμα (όπου τα δύο χιαστί σύρματα διασταυρώνονται χωρίς να κάνουν επαφή μεταξύ τους): ρεύμα μπορεί να περάσει προς την LED είτε όταν ο A είναι πατημένος και ο B δεν είναι (σύρμα από κάτω αριστερά προς πάνω δεξιά), είτε όταν ο A δεν είναι πατημένος και ο B είναι (σύρμα από πάνω αριστερά προς κάτω δεξιά). Επομένως, η LED ανάβει όταν ((A)ΚΑΙ(ΟΧΙ(B))) Ή ((ΟΧΙ(A))ΚΑΙ(B)), δηλαδή είναι πατημένος (μόνο ο A) ή (μόνο ο B).
Το δεύτερο κύκλωμα
υλοποιεί τη λογική πράξη ελέγχου ισότητας (equality check),
διότι η LED ανάβει μόνον όταν οι δύο διακόπτες
είναι στην ίδια (ίση) κατάσταση
--και οι δύο πατημένοι ή και οι δύο ελεύθεροι.
Ρεύμα μπορεί να περάσει προς την LED
είτε από το επάνω σύρμα (και οι δύο διακόπτες ελευθεροι)
είτε από το κάτω σύρμα (και οι δύο διακόπτες πατημένοι),
επομένως η LED ανάβει όταν
((ΟΧΙ(A))ΚΑΙ(ΟΧΙ(B)))
Ή ((A)ΚΑΙ(B)),
δηλαδή όταν A και B είναι
(και οι δύο OFF) ή (και οι δύο ON).
Πριν φτάσετε στο εργαστήριο, γράψτε τον πίνακα αληθείας των εξόδων των δύο κυκλωμάτων. Παρατηρήστε ότι, ανεξαρτήτως της κατάστασης του ενός διακόπτη, ο άλλος μπορεί πάντα, ανοιγοκλείνοντας, να αναβοσβήσει το φώς. Στο εργαστήριο, φτιάξτε τα δύο κυκλώματα, δείξτε τα στο βοηθό σας, και επαληθεύστε πειραματικά τις παραπάνω ιδιότητες.
Εάν ένας από τους διακόπτες αλλάξει κατάσταση, το πλήθος των εισόδων που είναι ON αλλάζει κατά ένα (+1 ή -1): αν ο διακόπτης που άλλαξε ήταν σβηστός (OFF) και άναψε (ON), το πλήθος αυξήθηκε κατά 1, ενώ αν ήταν αναμένος και έσβησε τότε το πλήθος μειώθηκε κατά 1. Ο,τιδήποτε από τα δύο και να συμβαίνει, η ισοτιμία αλλάζει από άρτια σε περιττή ή από περιττή σε άρτια! Βλέπουμε λοιπόν ότι διατηρείται η βασική ιδιότητα με την οποία ξεκινήσαμε: σε οιαδήποτε κατάσταση και να βρίσκονται οι διακόπτες, αρκεί οιοσδήποτε ένας από αυτούς να αλλάξει κατάσταση γιά να αλλάξει τιμή η έξοδος (από σβηστή να ανάψει ή από αναμένη να σβήσει). Η ιδιότητα αυτή αποτελεί τη βάση γιά την κύρια εφαρμογή των συναρτήσεων ισοτιμίας:
Οι συναρτήσεις ισοτιμίας χρησιμοποιούνται σαν η απλούστερη μορφή κώδικα ανίχνευσης σφαλμάτων (error detection codes): αφού μεταδώσουμε μέσα από ένα τηλεπικοινωνιακό δίκτυο κάμποσες πληροφορίες (κάμποσα σύρματα, καθένα "αναμένο" ή "σβηστό"), μεταδίδουμε στο τέλος ακόμα μία επιπλέον πληροφορία που είναι π.χ. η άρτια ισοτιμία όλων των προηγουμένων. Συνήθως, οι πληροφορίες που μεταδίδουμε φτάνουν στην άλλη ακρή όλες σωστές· σε σπάνιες περιπτώσεις, λόγω θορύβου, μία από τις πληροφορίες μπορεί να φτάσει λάθος (ON αντί OFF, ή OFF αντί ON)· σε πολύ σπανιότερες περιπτώσεις μπορεί δύο η περισσότερες πληροφορίες να φτάσουν λάθος (π.χ. αν η πιθανότητα ενός λάθους είναι μία στις χίλιες, και αν τα λάθη είναι ανεξάρτητα μεταξύ τους, τότε η πιθανότητα δύο λαθών είναι περίπου μία στο εκατομμύριο (περίπου το τετράγωνο της πιθανότητας ενός λάθους)). Εάν συμβεί ένα λάθος στη μετάδοση, τότε θα αλλάξει η ισοτιμία των πληροφοριών που στείλαμε, ακριβώς λόγω της παραπάνω ιδιότητας: οιεσδήποτε και αν είναι οι πληροφορίες, η αλλαγή μίας οιασδήποτε από αυτές αλλάζει την ισοτιμία. Αν όμως αλλάξει η ισοτιμία, θα το καταλάβουμε, διότι η επιπλέον πληροφορία ισοτιμίας που στείλαμε δεν θα συμπίπτει πλέον με την ισοτιμία που βλέπει ο παραλήπτης! Έτσι επιτυγχάνεται ο στόχος της ανίχνευσης σφαλμάτων στις περιπτώσεις που συμβαίνει μόνο ένα σφάλμα, που είναι και οι πιό συχνές. Άπαξ και διαπιστωθεί η ύπαρξη σφάλματος, η διόρθωση του μπορεί να γίνει π.χ. με μία αίτηση αναμετάδωσης ("ξαναπές το --δεν άκουσα καλά"). Ο κύριος περιορισμός των συναρτήσεων ισοτιμίας στην ανίχνευση σφαλμάτων είναι ότι αυτές ανιχνεύουν μόνο 1, 3, 5, κλπ. σφάλματα, ενώ τους διαφεύγουν 2, 4, 6, κλπ. σφάλματα. Εάν τα σφάλματα είναι ανεξάρτητα μεταξύ τους, και εάν η πιθανότητα ενός σφάλματος είναι πολύ μικρή, τότε 2 ή περισσότερα "μαζεμένα" σφάλματα είναι πολύ σπάνια. Εάν όμως τα σφάλματα είναι συχνά ή δεν είναι ανεξάρτητα μεταξύ τους, τότε χρειαζόμαστε άλλους, πιό πολύπλοκους κώδικες γιά την ανίχνευσή τους· τέτοια περίπτωση "ομοβροντίας (εκρηκτικών) σφαλμάτων" (burst errors) έχουμε π.χ. όταν ένα κινητό τηλέφωνο, κινούμενο, περνάει γιά λίγο πίσω από μία "σκιά" της κεραίας του σταθμού βάσης· αρκετά όμως είπαμε γιά τώρα --γιά περισσότερες πληροφορίες θα πρέπει να πάρετε κάποιο μάθημα τηλεπικοινωνιών και κωδικοποίησης....
Το ποιά είσοδος επιλέγεται μπορεί να αλλάζει "δυναμικά", δηλαδή την ώρα της λειτουργίας του κυκλώματος, και γιά να γίνεται η επιλογή αυτή ο πολυπλέκτης έχει άλλες, επιπλέον εισόδους, τις εισόδους ελέγχου (control inputs) ή εισόδους επιλογής (selection inputs), που εδώ είναι οι SA, SB, SC, και SD. Στο απλό κύκλωμα πολυπλέκτη που δείχνουμε εδώ, η επιλογή εισόδου γίνεται με τον εξής τρόπο: ανά πάσα στιγμή, ένας και μόνον ένας από τους διακόπτες SA, SB, SC, SD πρέπει να είναι πατημένος. Αυτός που είναι πατημένος ενώνει την είσοδό δεδομένων του με την έξοδο, "μεταφέροντας" έτσι ό,τι "πληροφορία" υπάρχει σε αυτή την είσοδο προς την έξοδο. Στο σχήμα εδώ, αυτή τη στιγμή, ο διακόπτης SC είναι πατημένος, και γι' αυτό η έξοδος DataOut ισούται αυτή τη στιγμή με την είσοδο DataC. Η κατάσταση των υπολοίπων εισόδων δεν μπορεί να επηρεάσει την έξοδο, διότι εκείνες είναι ασύνδετες με την έξοδο.
Το σύμβολο του πολυπλέκτη είναι ένα τραπέζιο,
όπως φαίνεται στο δεύτερο σχήμα δεξιά
γιά το παραπάνω παράδειγμα πολυπλέκτη 4-σε-1.
Γιά συντομία, όλες οι είσοδοι επιλογής (ελέγχου) σημειώνονται με μία μόνο γραμμούλα, "Select"·
σε επόμενο μάθημα θα πούμε περισσότερα πάνω σε αυτό το θέμα.
Μία σημαντικότατη εφαρμογή των πολυπλεκτών είναι στις μνήμες,
όπως θα δούμε αμέσως μετά, σε αυτό το εργαστήριο.
Μία δεύτερη, εξ ίσου σημαντική εφαρμογή των πολυπλεκτών είναι στα δίκτυα επικοινωνίας, εκεί όπου επιλέγεται ποιός θα μιλήσει με ποιόν κάθε στιγμή. Αυτό μπορεί να είναι σ' έναν υπολογιστή ή άλλο ψηφιακό σύστημα, ή σ' έναν δρομολογητή (router) ή μεταγωγέα (switch) ενός δικτύου υπολογιστών ή τηλεπικοινωνιών. Στο σχήμα φαίνεται ένα απλό παράδειγμα μεταγωγέα 4x4 τύπου σταυραγωγού (crossbar) εμπνευσμένου από την κλασσική τηλεφωνία. Είναι κατασκευασμένος από 4 πολυπλέκτες, καθένας μεγέθους 4-σε-1. Μπορούμε να φανταστούμε ότι οι 4 είσοδοι, In0-In3, είναι τα μικρόφωνα των τηλεφώνων τεσσάρων σπιτιών, οι δε 4 έξοδοι, T0-T3, τροφοδοτούν τα ακουστικά τεσσάρων άλλων τηλεφώνων. Ελέγχοντας κατάλληλα τα σήματα επιλογής των πολυπλεκτών πραγματοποιούμε τις τηλεφωνικές συνδέσεις που μας ζητώνται. Στο παράδειγμα, η είσοδος In2 έχει ζητήσει να μιλήσει στην έξοδο T0, και η In3 στην T2. Η είσοδος In0 μεταδίδεται σε περισσότερους από έναν ακροατές –στους T1 και T3– κάτι γνωστό σαν multicasting στα δίκτυα. Η είσοδος In1 είναι αδρανής προς στιγμήν –ή τουλάχιστο, κανείς δεν την ακούει.
Ακόμα μία εφαρμογή των πολυπλεκτών είναι στη σειριακή (serial) μετάδοση δεδομένων, στα δίκτυα επικοινωνίας. Στο πρώτο σχήμα παραπάνω, έστω ότι έχουμε τέσσερεις πληροφορίες στις τέσσερεις εισόδους DataA έως DataD, και θέλουμε να τις στείλουμε σε κάποιον μακρυά, μέσω ενός και μόνο σύρματος, του DataOut (τα 4 σύρματα θα κόστιζαν πολύ, λόγω απόστασης). Γιά να το πετύχουμε, αρκεί να αλλάξουμε διαδοχικά τα σήματα επιλογής του πολυπλέκτη από το SA στο SB, στο SC, και στο SD, οπότε οι 4 πληροφορίες από τις 4 εισόδους θα τοποθετηθούν διαδοχικά πάνω στο σύρμα DataOut και θα μεταδοθούν "σειριακά" (με τη σειρά) στον παραλήπτη. Βεβαίως, γιά να μπορέσει ο παραλήπτης να τα καταλάβει σωστά, πρέπει να υπάρχει μιά πρόσθετη συμφωνία (σύμβαση) χρονισμού, δηλαδή να ξέρει σε ποιά χρονική στιγμή μεταδίδεται η κάθεμία από τις τέσσερεις πληροφορίες.
Όπως βλέπουμε, τελικά ο πολυπλέκτης είναι ένα μεγάλο λογικό Ή (δηλαδή εν παραλλήλω σύνδεση) από όρους που ο καθένας τους είναι το λογικό ΚΑΙ δύο πραγμάτων (δηλαδή δύο διακόπτες εν σειρά): ενός δεδομένου εισόδου, και του αντίστοιχου σήματος επιλογής. Μία μόνο από τις εισόδους επιλέγεται κάθε φορά, δηλαδή ένα μόνο από τα σήματα επιλογής είναι αναμένο (διακόπτης πατημένος). Συνεπώς, ένας μόνο από τους παράλληλα-συνδεδεμένους κλάδους μπορεί να άγει ρεύμα --εκείνος που το σήμα επιλογής του είναι αναμένο. Αυτός ο επιλεγμένος κλάδος, τελικά, θα άγει ή δεν θα άγει ρεύμα ανάλογα με το τι κάνει το σήμα δεδομένων του: εάν αυτός ο επιλεγμένος διακόπτης δεδομένων πεί να ανάψει η λάμπα, αυτή θα ανάψει, επειδή είναι αναμένο και το σήμα επιλογής και το ρεύμα μπορεί να περάσει προς τη λάμπα (έξοδο)· εάν ο επιλεγμένος διακόπτης δεδομένων είναι σβηστός, τότε και η λάμπα θα μείνει σβηστή, αφού ο μεν επιλεγμένος κλάδος δεν άγει ρεύμα λόγω των δεδομένων του, οι δε υπόλοιποι κλάδοι δεν άγουν λόγω των σβηστών διακοπτών επιλογής τους. Τελικά λοιπόν, η λάμπα θα κάνει ό,τι κάνει και ο διακόπτης δεδομένων (data) του μοναδικού επιλεγμένου κλάδου --του μοναδικού κλάδου που έχει αναμένο διακόπτη "Select".
Τα προηγούμενα σχήματα σχεδιάστηκαν θεωρώντας ότι
τα δεδομένα (data) "έρχονται από μακρυά" (αριστερά),
και η επιλογή γίνεται "τοπικά", δηλαδή δεξιά, κοντά στην έξοδο,
όπως π.χ. στα τηλεπικοινωνιακά συστήματα.
Η άλλη περίπτωση είναι αυτό που συμβαίνει στη Μνήμη:
τα δεδομένα είναι εδώ, κοντά μας, αποθηκευμένα μέσα στη μνήμη,
και κάποιος έρχεται απ' έξω
και ζητάει να διαβάσει ένα από αυτά τα δεδομένα
(ή μία μικρή ομάδα από αυτά, όπως θα πούμε παρακάτω).
Στην περίπτωση αυτή,
ταιριάζει να αντιστρέψουμε τη θέση των διακοπτών δεδομένων και επιλογής,
όπως φαίνεται στο δεύτερο σχήμα.
Φυσικά, η λογική λειτουργία ΚΑΙ είναι η ίδια,
ανεξαρτήτως θέσης των δύο εν σειρά διακοπτών,
αφού γιά να περάσει ρεύμα πρέπει να είναι και οι δύο αναμένοι,
με όποια σειρά και αν τους βάλουμε.
Η άλλη αλλαγή που κάναμε σε αυτό το δεύτερο σχήμα
είναι να αντικαταστήσουμε, συμβολικά, τους πολλαπλούς διακόπτες επιλογής
με κάτι που θυμίζει έναν μόνο μεγάλο διακόπτη με πολλαπλές επαφές,
αριστερά:
Αφού ένας και μόνον ένας από τους διακόπτες επιλογής
πρέπει να είναι αναμένος,
σημαίνει ότι η τροφοδοσία ρεύματος από τον θετικό πόλο της πηγής
κατευθύνεται σε έναν και μόνον έναν από τους κλάδους.
Αυτό δείχνει και το σχήμα συμβολικά,
με το μεγάλο βέλος που κινείται κυκλικά,
τροφοδοτώντας τον εκάστοτε επιλεγμένο κλάδο του πολυπλέκτη.
Στο σχήμα έχουμε 6 δεδομένα, DA, DB, DC, DD, DE, και DF,
με τους αντίστοιχους 6 κλάδους
και 6 επιλογές γιά τον μεγάλο κυκλικό διακόπτη αριστερά.
Στις μνήμες λέμε ότι η Διεύθυνση (Address)
είναι αυτή που επιλέγει (select) το ποιό από τα δεδομένα
θέλουμε εκάστοτε να οδηγηθεί στην έξοδο --δηλαδή να το διαβάσουμε.
Στο παράδειγμα του παραπάνω σχήματος,
όποτε "διαβάζουμε" (επιλέγουμε) τις πληροφορίες (data) DA, DD, ή DF
θα τις βρίσκουμε σβηστές (σβηστοί δαικόπτες),
δηλαδή η λάμπα που θα συνδέεται στην έξοδο DataOut θα μένει σβηστή·
αντίθετα, όποτε διαβάζουμε τις θέσεις DB, DC, ή DE
θα παίρνουμε παίρνουμε την απάντηση "αναμένη" (αναμένοι διακόπτες),
δηλαδή η λάμπα στο DataOut θα ανάβει.
Στο παραπάνω σχήμα, από τις 16 λέξεις που υπάρχουν, έχουμε ξεχωρίσει δύο τυχαίες –την πράσινη και την κίτρινη. Η πράσινη λέξη περιέχει (αυτή τη στιγμή) την πληροφορία "10000101", δηλαδή λέει στην αριστερή λάμπα να ανάψει, στις επόμενες 4 λάμπες να σβήσουν, κ.ο.κ. Η κίτρινη λέξη περιέχει (αυτή τη στιγμή) την πληροφορία "01101100", δηλαδή λέει στην αριστερή λάμπα να σβήσει, στις επόμενες 2 λάμπες να ανάψουν, κ.ο.κ. Οι συνηθισμένες μνήμες έχουν αποθηκευμένα μέσα τους χιλιάδες, εκατομμύρια, δισεκατομμύρια, ή και τρισεκατομμύρια bits –δεν χρειαζόμαστε, και δεν μπορούμε να τα βλέπουμε και να τα επεξεργαζόμαστε όλα αυτά μαζί! Κάθε φορά λοιπόν, θέλουμε να βλέπουμε και να επεξεργαζόμαστε (όλα) τα bits μίας (και μόνο μίας) λέξης. Εδώ, η μνήμη μας περιέχει συνολικά 16x8 = 128 bits (κουτάκια), από τα οποία, κάθε φορά, θέλουμε να βλέπουμε και να επεξεργαζόμαστε 8 μόνον από αυτά –τα 8 bits μίας (και μόνο μίας) από τις 16 λέξεις. Γιά να μπορούμε λοιπόν να βλέπουμε ("διαβάζουμε") τα 8 bits μιάς (διαφορετικής κάθε φορά) λέξης, η μνήμη μας πρέπει να έχει 8 σύρματα "δεδομένων" (data), που στο σχήμα φάινονται να βγαίνουν στο κάτω μέρος της μνήμης.
Στο παράδειγμα του σχήματος, αυτή τη στιγμή,
θέλουμε να δούμε (διαβάσουμε) την κίτρινη λέξη
–την πράσινη θα την αναζητήσουμε αργότερα, πάντως όχι τώρα.
Αυτό σημαίνει ότι –τώρα– τα 8 σύρματα των data, κάτω,
πρέπει να πάρουν τις τιμές "01101100",
δηλαδή το αριστερό σβηστό, τα 2 επόμενα αναμένα, κ.ο.κ.
Λίγο αργότερα, όταν θελήσουμε να διαβάσουμε την πράσινη λέξη,
τότε τα σύρματα αυτά θα πρέπει να πάρουν την τιμή "10000101",
δηλαδή το αριστερό αναμένο, τα 4 επόμενα σβηστά, κ.ο.κ.
Γιά να γίνουν όλα αυτά,
κάποιος πρέπει να πεί στη μνήμη ότι τώρα "θέλω" την κίτρινη λέξη,
και λίγο αργότερα ότι τότε θα θελήσω την κίτρινη.
Αυτός ο "κάποιος" είναι το σήμα
Επιλογής (Select), ή Διεύθυνσης (Address),
στο οποίο αναφερθήκαμε στη ακριβώς προηγούμενη ενότητα
και θα ξανα-αναφερθούμε και στις επόμενες.
Στο σχήμα, η επιλογή αυτή φαίνεται κόκκινη.
Το πώς αυτή η επιλογή μπορεί να "κωδικοποιηθεί" –εδώ με 4 bits–
θα το πούμε στο επόμενο εργαστήριο.
Το επόμενο σχήμα, εδώ δεξιά, μας υποδεικνύει τι χρειαζόμαστε γιά να φτιάξουμε μιά μνήμη. Εδώ, γιά απλότητα, μικρύναμε λίγο τη μνήμη: αυτή αποτελείται από 8 λέξεις (τις word0, word1, ..., word7), και η κάθε λέξη αποτελείται από 4 bits. Εδώ εμείς θα κοιτάξουμε πώς θα φτιάξουμε το δεύτερο bit από αριστερά s–το bit2, το γαλάζιο– και κατ' αναλογία θα φτιαχτούν και τα υπόλοιπα. Αν κοιτάξουμ επροσεκτικά το σχήμα, θα διαπιστώσουμε ότι το "γαλάζιο" σύρμα, "bit2", κάτω, πρέπει να είναι η έξοδος ενός πολυπλέκτη ο οποίος θα επιλέγει ένα από τα 8 γαλάζια κουτάκια (bits). Όταν η επιλογή λέει, όπως εδώ, ότι "θέλω την κίτρινη λέξη", word2, τότε ο πολυπλέκτης μας θα πρέπει να επιλέγει το τρίτο κουτάκι από επάνω, και ό,τι πληροφορία περιέχει αυτό να την βγάζει στο γαλάζιο σύρμα, κάτω. Όταν η Επιλογή (Διεύθυνση) λέει ότι θέλουμε μιάν άλλη λέξη, π.χ. την word7, τότε ο γαλάζιος πολυπλέκτης μας θα πρέπει να επιλέγει το κάτω-κάτω γαλάζιο κουτάκι (πληροφορία, bit) και να το βγάζει στο κάτω γαλάζιο σύρμα. Αυτήν ακριβώς τη λειτουργία πολυπλέκτη, γιά να δουλέψει μιά μνήμη, θα την δούμε στην επόμενη ενότητα, και θα την φτιάξετε στο παρακάτω πείραμα.
Το σχήμα δεξιά είναι παρόμοιο με το προηγούμενο, δηλαδή είναι ένας πολυπλέκτης, μεγέθους, εδώ, 8-σε-1. Η κύρια διαφορά από το προηγούμενο --πέρα από το σχήμα των συρμάτων, που όμως δεν επηρεάζει τη λειτουργία τους-- είναι ότι στη θέση των διακοπτών δεδομένων βάλαμε βραχυκυκλωτήρες (jumpers): Σε κάθε διασταύρωση οριζόντιου σύρματος με το κατακόρυφο, υπάρχουν δύο επαφές --από μία σε κάθε σύρμα. Σε μερικά από αυτά τα ζευγάρια (και συγκεκριμένα στα A, C, F, και H) τοποθετήσαμε (με το χέρι!) "βραχυκυκλωτήρες", δηλαδή σύρματα (σχεδιασμένα διαγώνια) που ενώνουν ηλεκτρικά μεταξύ τους τις δύο επαφές, άρα το οριζόντιο εκείνο σύρμα με το κατακόρυφο. Στις άλλες διασταυρώσεις (στο παράδειγμά μας, στις B, D, E, και G) δεν τοποθετήσαμε βραχυκυκλωτήρες, άρα τα αντίστοιχα οριζόντια σύρματα δεν συνδέονται με το κατακόρυφο. Η διαφορά με το προηγούμενο κύκλωμα είναι ότι ο βραχυκυκλωτήρας παραμένει στη θέση του από μόνος του, χωρίς εξωτερική επέμβαση ή πίεση, σε αντίθεση με το διακόπτη που γιά να μείνει αναμένος πρέπει κάποιος συνεχώς να τον πατάει. Με άλλα λόγια, ο βραχυκυκλωτήρας έχει μνήμη, αφού "θυμάται" πού τον βάλαμε, και παραμένει εκεί, σε αντίθεση με τον απλό διακόπτη (bouton) που δεν έχει μνήμη, αφού μόλις τον αφήσεις μόνο του αυτός πάντα σβήνει, ό,τι και να του'χες κάνει πρίν.
Έτσι, το σχήμα εδώ είναι μιά Μνήμη με 8 αποθηκευμένες πληροφορίες: στις θέσεις A, C, F, και H η αποθηκευμένη πληροφορία λέει "άναψε λάμπα L0", ενώ στις θέσεις B, D, E, και G η αποθηκευμένη πληροφορία λέει "μείνε σβηστή λάμπα L0". Εάν θέλουμε να αλλάξουμε την πληροφορία που είναι αποθηκευμένη σε κάποια θέση, σε αυτήν εδώ τη μνήμη μόνο χειροκίνητα μπορούμε να το κάνουμε: να βγάλουμε από εκεί τον βραχυκυκλωτήρα που υπήρχε, ή να βάλουμε εκεί έναν αν δεν υπήρχε. Στο σχήμα, ο χρήστης επέλεξε, με το σύρμα αριστερά από την θετική τροφοδοσία, να "διαβάσει" τη θέση C της μνήμης, οδηγώντας την αποθηκευμένη πληροφορία της στην έξοδο (λάμπα) L0: επειδή στη θέση C υπάρχει βραχυκυκλωτήρας, η "πληροφορία" αυτή κάνει την λάμπα L0 να ανάψει. Εάν, αντίθετα, ο χρήστης μετακινήσει το σύρμα επιλογής (αριστερά) π.χ. στη θέση G, επειδή στη θέση εκείνη δεν υπάρχει βραχυκυκλωτήρας και τα σύρματα παραμένουν ασύνδετα, η πληροφορία αυτή θα αντικατοπτριστεί στην L0 με σβηστή λάμπα.
Μία μνήμη με ένα μόνο σύρμα εξόδου δεν είναι πολύ χρήσιμη --συνήθως χρειαζόμαστε μεγαλύτερες (φαρδύτερες) μνήμες, που όταν διαβάζουμε από μία θέση τους να διαβάζουμε περισσότερες από μία πληροφορίες. Στο σχήμα εδώ δεξιά "τριπλασιάσαμε" (οριζόντια) την προηγούμενη μνήμη: έχουμε εδώ μία Μνήμη 8x3, δηλαδή με 8 ομάδες (γραμμές) πληροφοριών --τις λέμε 8 λέξεις-- και όπου η κάθε μιά από αυτές τις 8 λέξεις περιέχει 3 "πληροφορίες" μέσα της, οι οποίες ελέγχουν 3 λαμπάκια, L2, L1, και L0 --τα λέμε 3 bits ανά λέξη. Ο περίφημος όρος bit προέρχεται από τις λέξεις binary digit, και Ελληνικά αποδίδεται πολλές φορές σαν δυφίο, από τις λέξεις δυαδικό ψηφίο. Ένα bit είναι η ποσότητα της πληροφορίας που μπορεί μόλις να επιλέξει μία από δύο επιλογές --ας πούμε, εδώ, σβηστή ή αναμένη λαμπίτσα. Γιά τις μνήμες που είναι φαρδύτερες από ένα bit, όπως αυτή εδώ, απαιτείται η χρήση διόδων στα σημεία διασταύρωσης, όπως δείχνει το σχήμα, προκειμένου αυτές να επιβάλουν το ρεύμα να ρέει πάντα από την είσοδο επιλογής (αριστερά) προς τις εξόδους δεδομένων (κάτω), και ποτέ ανάποδα από ένα κατακόρυφο σύρμα πολυπλέκτη πίσω σε οριζόντια σύρματα άλλα από το μοναδικό επιλεγμένο οριζόντιο σύρμα.
Οι μνήμες είναι βασικά στοιχεία όλων των ψηφιακών συστημάτων και των υπολογιστών. Η βασική οργάνωσή τους, που φαίνεται εδώ, είναι πρωταρχικής σημασίας: λέξεις, που αποτελούν οριζόντιες ομάδες από bits, γραμμένες η μία κάτω από την άλλη, όπου κάθε λέξη αποτελείται από bits, που γράφονται μέσα στη λέξη, το ένα δίπλα στο άλλο. Όποτε διαβάζουμε κάτι από τη μνήμη, διαβάζουμε πάντα όλα τα bits μίας ολόκληρης λέξης. Επομένως, η μνήμη έχει τόσα σύρματα εξόδου δεδομένων (κάτω στο σχήμα) όσα bits έχει η κάθε λέξη της· στο εδώ παράδειγμα έχουμε 3 εξόδους δεδομένων, L2, L1, και L0, και κάθε λέξη έχει 3 bits: η λέξη A έχει τα bits A2, A1, A0, κ.ο.κ. Στο σχήμα, η είσοδος επιλογής (το σύρμα αριστερά από τον θετικό πόλο της μπαταρίας) αυτή τη στιγμή επιλέγει να διαβάσουμε τη λέξη C, η οποία αποτελείται από 3 bits: C2, C1, C0. Στο C2 έχουμε βάλει βραχυκυκλωτήρα, ενώ στα C1 και C0 όχι. Επομένως, η πληροφορία που είναι αποθηκευμένη σε αυτή τη λέξη είναι: "αναμένη, σβηστή, σβηστή", και όντως, το σύρμα L2 θα πάρει ρεύμα μέσω του βραχυκυκλωτήρα C2, ενώ τα σύρματα L1 και L0 θα παραμείνουν χωρίς ρεύμα (σβηστά) επειδή είναι ασύνδετα με το οριζόντια σύρμα C --που είναι το μοναδικό επιλεγμένο (τροφοδοτημένο από την μπαταρία) οριζόντιο σύρμα. Εάν το σύρμα επιλογής, αριστερά, μετακινηθεί π.χ. στη θέση F, τότε οι έξοδοι δεδομένων θα γίνουν "αναμένη, σβηστή, αναμένη", επειδή οι διασταυρώσεις F2 και F0 έχουν βραχυκυκλωτήρες, ενώ η F1 δεν έχει. Έτσι, τότε, θα έχουμε διαβάσει τα 3 bits της λέξης F, αστα οποία είχαμε αποθηκεύσει (στο παρελθόν, χειροκίνητα, μέσω των βραχυκυκλωτήρων) τις πληροφορίες (3 bits) "αναμένο, σβηστό, αναμένο".
Θα βρείτε την πλακέτα συνδεδεμένη σε έναν ενδείκτη 7 τμημάτων (7-segment display), όπως δείχνουν οι παρακάτω φωτογραφίες. Ο ενδείκτης 7 τμημάτων έχει 7 γραμμικές LED's που σχηματίζουν το γνώριμό μας σχήμα ενός δεκαδικού ψηφίου (και έχει και μιά δεκαδική υποδιαστολή --συνολικά 8 LED's πουτροοδοτούνται από 8 σύρματα). Η πλακέτα μνήμης παίρνει τροφοδοσία 12 Volt όπως φαίνεται στις φωτογραφίες: γείωση (αρνητικό - μαύρο) στην μαύρη υποδοχή, και θετικό (κόκκινο) σε μία και μόνο μία γραμμή-λέξη, την "επιλεγμένη" λέξη την οποία θέλετε να διαβάσετε. Επίσης, η πλακέτα μνήμης πρέπει να δίνει γείωση στην πλακέτα 7-segment, μέσω του μαύρου καλωδίου. Η θετική τροφοδοσία φτάνει στις LED του 7-segment display μέσα από τις εξόδους δεδομένων της μνήμης, με 8 κόκκινα καλώδια.
ΠΡΟΣΟΧΗ: μην βραχυκυκλώσετε (ενώσετε κατευθείαν) ποτέ οιαδήποτε έξοδο δεδομένων της μνήμης (οιαδήποτε από τις κάτω δεξιά οκτώ υποδοχές) με την "γείωση" --την μαύρη υποδοχή: εάν το κάνετε, θα κάψετε την δίοδο που υπάρχει στο bit εκείνο της μνήμης στη γραμμή που έχετε εκείνη τη στιγμή ενεργοποιημένη!
Στις παρακάτω φωτογραφίες έχουμε αποθηκεύσει στη μνήμη
(μέσω της θέσης των jumpers)
τις πληροφορίες (bits) που χρειάζονται ώστε να εμφανίζονται στον ενδείκτη:
το ψηφίο "0" όταν επιλέγεται (διαβάζεται)
η πρώτη (επάνω) λέξη (γραμμή) της μνήμης·
το σύμβολο "=" όταν διαβάζουμε την πέμπτη γραμμή της μνήμης· και
το ψηφίο "1" όταν διαβάζουμε την έκτη γραμμή της μνήμης.
Η επιλογή της λέξης που θέλουμε να διαβάσουμε
γίνεται μετακινώντας το κόκκινο καλώδιο τροφοδοσίας.
Αποθηκεύστε (γράψτε χειροκίνητα, βγάζοντας/βάζοντας πριζάκια) στη μνήμη σας
τις κατάλληλες πληροφορίες γιά να εμφανίζονται στον ενδείκτη σας
διάφορα σύμβολα, όπως π.χ.:
(α) 0, 1, 2, 3, 4, 5, 6, 7· ή
(β) A, b, c, d, E, F, H, J· ή
(γ) 0, 2, 4, 6, 8, =, Ξ, ||· κ.ο.κ.
Αφού τα γράψετε, μετά διαβάστε τα περιεχόμενα της μνήμης σας,
πολλαπλές φορές, με τη σειρά ή ανακατωμένα,
και διαπιστώστε ότι η μνήμη σας όντως θυμάται ότι της γράψατε τελευταίο!
[Up - Table of Contents] [Prev - 0. Introduction] |
[printer version - PDF] [2. Relays - Next] |
Up to the Home Page of CS-120
|
© copyright
University of Crete, Greece.
last updated: 26 Sep. 2017, by M. Katevenis. |