ΗΥ-120: Ψηφιακή Σχεδίαση
Φθινόπωρο 2022 |
Τμ. Επ. Υπολογιστών © Πανεπιστήμιο Κρήτης |
[Up - Table of Contents] [Prev - 5. Binary Numbers, Adders] |
[printer version - PDF] [7. Latches and Registers - Next] |
[Βιβλία: προαιρετικά μπορείτε να διαβάσετε: Dally: §10.3 (σελ. 232-239)· Mano: § 1.5 - 1.6 (σελ. 10-18), και §4.5 (σελ. 141-143)· Wakerly (3η έκδοση): § 2.5 - 2.6 (σελ. 41-52)].
Κατ' αντίστοιχο τρόπο, η διαίρεση διά δύναμη του 2 αντιστοιχεί σε δεξιά ολίσθηση· τα λιγότερο σημαντικά bits του αριθμού, που "εκδιώκονται" από τη δεξιά άκρη του, αποτελούν το υπόλοιπο της διαίρεσης. Γιά τον παραπάνω αριθμό B, η διαίρεσή του διά 2k δίνει:
Μιά συνηθισμένη εφαρμογή στους υπολογιστές είναι όταν μιά μεγάλη μνήμη, π.χ. 256 Mbytes, κατασκευάζεται από κάμποσες --π.χ. δεκαέξι (16)-- μικρότερες, μεγέθους δύναμης του 2 η καθεμία --εδώ μεγέθους 16 MBytes = 16,777,216 Bytes καθεμία. Εάν μας ζητηθεί να προσπελάσουμε το Byte με διεύθυνση 167,772,560, σε ποιάν από τις 16 μικρότερες μνήμες βρίσκεται αυτό και τι διεύθυνση μέσα σε αυτήν έχει; Γιά να βρούμε σε ποιά μνήμη θα το αναζητήσουμε, πρέπει να διαιρέσουμε τη διεύθυνση 167,772,560 διά το μέγεθος 16,777,216 των επιμέρους μνημών, που σ' αυτήν την περίπτωση μας δίνει 10 (δεκαδικό) (πρόκειται γιά την 11η μνήμη, αφού οι επιμέρους μνήμες αριθμούνται 0, 1, 2, ..., 15)· το υπόλοιπο της διαίρεσης, 400 (δεκαδικό), μας δίνει την επιθυμητή διεύθυνση μέσα στην επιμέρους μνήμη. Η διεύθυνση του επιθυμητού Byte είναι 167,772,560 (δεκαδικό) = A,00,01,90 (δεκαεξαδικό) = 1010,00000000,00000001,10010000 (δυαδικό - 28 bits). Το μέγεθος της κάθε επιμέρους μνήμης (διαιρέτης) είναι 16 M = 224, άρα το ζητούμενο Byte βρίσκεται στη θέση 00...0110010000 (υπόλοιπο διαίρεσης, δηλαδή δεξιά 24 bits της διεύθυνσης) της μνήμης υπ' αριθμόν 1010 (πηλίκο διαίρεσης, δηλαδή αριστερά 28-24 = 4 bits της διεύθυνσης)· μετατρέποντας στο δεκαδικό, βλέπουμε ότι όντως πρόκειται γιά τη θέση 256+128+16 = 400 της μνήμης υπ' αριθμόν 8+2 = 10.
Εάν σε αυτό τον υπολογιστή, με το πεπερασμένο πλήθος των n bits, αρχίσω να μετρώ από το 0 προς τα πάνω, όταν φτάσω στον αριθμό 2n-1, ο επόμενος αριθμός θα φανεί σαν να είναι πάλι ο 0, και μετά θα συνεχίσω να μετράω πάλι από την αρχή, 1, 10, 11, 100, κλπ. Το φαινόμενο αυτό είναι σαν να έχω ένα τροχό με περίμετρο 2n και με χαραγμένους επάνω του τους 2n υπάρχοντες συνδυασμούς των n bits, δεξιόστροφα από το 00...000 μέχρι το 11...111, και να τυλίγω επάνω σε αυτόν τον τροχό τον άξονα των αριθμών, όπως φαίνεται στο σχήμα δίπλα γιά n=4 bits. Έστω ότι ξεκινάμε το τύλιγμα έτσι ώστε ο ακέραιος αριθμός 0 να συμπέσει με τον δυαδικό κώδικα 00...000. Τότε, οι 2n κώδικες του τροχού θα συμπέσουν με τους ακεραίους αριθμούς από 0 έως 2n-1, όπως ακριβώς καθορίζει ο γνωστός μας από την §5.1 κώδικας δυαδικής αναπαράστασης των μη προσημασμένων ακεραίων. Όταν όμως εξαντλούνται οι υπάρχοντες συνδυασμοί των n bits, οι περαιτέρω αριθμοί (π.χ. 16, 17,... στο σχήμα) έχουν "τυλιχτεί" πάνω στους ίδιους κώδικες, 000, 001, κλπ, ξανά από την αρχή. Αν λοιπόν μιά πρόσθεση δώσει αποτέλεσμα από 2n και πάνω, το αποτέλεσμα αυτό, στον υπολογιστή με τα n bits, θα μοιάζει σαν ένας μικρότερος αριθμός --αυτός που προκύπτει από το "τύλιγμα". Το φαινόμενο αυτό ονομάζεται "wrap around" --περιτύλιγμα, περιέλιξη, ή συστροφή-- των ακεραίων αριθμών γύρω από τον "τροχό" των πεπερασμένων συνδυασμών που έχει τη δυνατότητα να παραστήσει ο υπολογιστής.
Εάν τώρα θεωρήσουμε και τους αρνητικούς αριθμούς, στον ίδιο άξονα των αριθμών τον συνεστραμμένο γύρω από τον τροχό, όπως φαίνεται στο σχήμα, τότε αποκτάμε μιά μέθοδο --έναν κώδικα-- αναπαράστασης και αρνητικών αριθμών. Ο κώδικας αυτός, που ονομάζεται "συμπλήρωμα ως προς 2", χρησιμοποιείται σήμερα σε όλους τους υπολογιστές γιά την αναπαράσταση "προσημασμένων ακεραίων" (signed integers), και έχει πολύ σημαντικά πλεονεκτήματα απλότητας έναντι άλλων, εναλλακτικών κωδίκων. Στην καθημερινή μας ζωή παριστάνουμε τους προσημασμένους ακεραίους χρησιμοποιόντας έναν διαφορετικό κώδικα, τον κώδικα προσήμου - απόλυτης τιμής (sign-magnitude representation). Η κατεύθυνση αύξησης της απόλυτης τιμής, όμως, είναι άλλοτε δεξιόστροφα (θετικοί αριθμοί) και άλλοτε αριστερόστροφα (αρνητικοί αριθμοί), πάνω στον συνεστραμμένο άξονα των αριθμών. Αυτή η αλλαγή φοράς αύξησης έχει σαν συνέπεια, όταν προσθέτουμε προσημασμένους ακεραίους στην καθημερινή μας ζωή, άλλοτε να πρέπει να κάνουμε πρόσθεση κι άλλοτε αφαίρεση των απολύτων τιμών τους, και μάλιστα πριν από την αφαίρεση να πρέπει να συγκρίνουμε τις δύο απόλυτες τιμές γιά να βρούμε ποιά είναι η μικρότερη και να αφαιρέσουμε αυτήν από την άλλη.
Αντ' αυτού, οι υπολογιστές ακολουθούν τον πολύ απλούστερο τρόπο που πηγάζει από την παραπάνω μέθοδο της "συστροφής": επειδή η (αλγεβρική) αύξηση μιάς τιμής --είτε θετικής είτε αρνητικής-- αντιστοιχεί πάντα σε δεξιόστροφη κίνηση πάνω στον τροχό, προκύπτει ότι αρκεί πάντα να κάνουμε πρόσθεση και μόνο, ανεξαρτήτως του αν προσθέτουμε θετικούς ή αρνητικούς αριθμούς! Η άλλη βασική παρατήρηση είναι ότι η (αλγεβρική) ελάττωση μιάς τιμής, δηλαδή η πρόσθεση ενός αρνητικού αριθμού --π.χ. του (-1)-- που αντιστοιχεί σε αριστερόστροφη κίνηση πάνω στον τροχό --π.χ. κατά 22.5 μοίρες εδώ-- μπορεί να προκύψει ισοδύναμα και σαν πρόσθεση ενός "μεγάλου" θετικού αριθμού --του 15 στο εδώ παράδειγμα, που αντιστοιχεί σε δεξιόστροφη κίνηση κατά 360-22.5 = 337.5 μοίρες. Αν λοιπόν κωδικοποιήσουμε το -1 με τον ίδιο κώδικα όπως και το 15, τότε η πρόσθεση αυτού του κώδικα με έναν τετράμπιτο αθροιστή θα φέρνει το ίδιο αποτέλεσμα όπως η πρόσθεση του -1.
Ένας άλλος τρόπος να καταλάβουμε το τι γίνεται
όταν κάνουμε προσθέσεις με n bits
και κρατάμε μόνο τα n bits του αποτελέσματος,
δηλαδή πετάμε (αγνοούμε) το κρατούμενο εξόδου, το (n+1)-οστό bit,
είναι ο εξής.
Εάν προσθέσουμε τους αριθμούς A και B
και το αποτέλεσμα της πρόσθεσης A+B είναι ≥ 2n,
τότε, με το να πετάξουμε (αγνοήσουμε) το (n+1)-οστό bit του αποτελέσματος,
που είναι άσσος και έχει αξία 2n,
σημαίνει ότι το αποτέλεσμα που τελικά κρατάμε,
χωρίς αυτόν τον άσσο στη (n+1)-οστή θέση,
θα είναι κατά 2n μικρότερο από το πραγματικό άθροισμα.
Επομένως, όταν το άθροισμα A+B≥2n
κι εμείς κόβουμε το κρατούμενο εξόδου,
τότε μας μένει το αποτέλεσμα (A+B-2n),
που μπορούμε να το ερμηνεύσουμε είτε σαν A + (B-2n),
είτε σαν (A-2n) + B.
Όμως, οι αριθμοί (B-2n) ή (A-2n) είναι αρνητικοί!
Άρα, το αποτέλεσμα που βγάλαμε θσ είναι το σωστό αποτέλεσμα
εάν όταν κάναμε την πρόσθεση θέλαμε στην πραγματικότητα
να προσθέσουμε έναν αρνητικό αριθμό, N (negative),
και αντί να προσθέσουμε τον N προσθέσαμε τον N+2n,
δηλαδή B = N+2n,
άρα N = B-2n,
άρα το αποτέλεσμα (A+B-2n) που βγάλαμε είναι
A + (B-2n) = A + N, όπου N αρνητικός.
Ο κώδικας "συμπληρώματος ως προς 2" (2's Complement) που χρησιμοποιείται σήμερα στους υπολογιστές γιά την αναπαράσταση προσημασμένων ακεραίων (signed integers), κωδικοποιεί τον αρνητικό αριθμό (-A), όπου A μεταξύ 1 και 2n-1, με τον κώδικα μη προσημασμένου του ακεραίου (-A)+2n = 2n-A. Έτσι, στο σχήμα δεξιά, ο αριθμός -2 κωδικοποιείται όπως ο 2n - 2 = 256 - 2 = 254, δηλαδή 11111110. Ομοίως, ο -3 κωδικοποιείται όπως ο 253, ο -4 όπως ο 252, ο -5 κωδικοποιείται 11111011, σαν τον 251, κ.ο.κ. Βλέπουμε ότι οι κώδικες των αρνητικών αριθμών αυξάνουν προς την ίδια κατεύθυνση προς την οποία αυξάνουν και οι κώδικες των θετικών αριθμών. Τους θετικούς αριθμούς από 0 έως 2n-1-1, ο κώδικας συμπληρώματος ως προς 2 τους παριστά πανοποιότυπα όπως και ο κώδικας των μη προσημασμένων ακεραίων.
Σ' έναν οκτάμπιτο υπολογιστή όπως του παραπάνω παραδείγματος, έχουμε τη δυνατότητα να κωδικοποιήσουμε μέχρι 256 διαφορετικούς ακέραιους αριθμούς. Ποιούς 256 ακέραιους αριθμούς θα διαλέξουμε να κωδικοποιούμε; Η απάντηση εξαρτάται από τον κώδικα που επιλέγουμε. Είδαμε στην §5.1 ότι ο οκτάμπιτος κώδικας μη προσημασμένων ακεραίων παριστάνει τους αριθμούς από το 0 ώς το 255· γενικότερα, με n bits, ο κώδικας αυτός παριστάνει τους ακεραίους από το 0 έως και το 2n-1. Αντ' αυτού, ο κώδικας συμπληρώματος ως προς 2, με 8 bits, επιλέγουμε να παριστά μονοσήμαντα τους ακεραίους από -128 έως και +127· γενικότερα, με n bits, ο κώδικας αυτός παριστάνει τους ακεραίους από τον -2n-1 έως και τον +2n-1-1. Τις περιοχές αυτές τις βλέπουμε σημειωμένες στο σχήμα με αγκύλες. Όπως βλέπουμε, η περιοχή αναπαράστασης του κώδικα των προσημασμένων ακεραίων είναι σχεδόν συμμετρική γύρω από το μηδέν, και έχει επιλεγεί ούτως ώστε το αριστερό (MS) bit του κώδικα να είναι 1 γιά όλους τους αρνητικούς αριθμούς και μόνο, και να είναι 0 γιά όλους τους μη αρνητικούς αριθμούς και μόνο, δηλαδή γιά τον αριθμό μηδέν και όλους τους θετικούς αριθμούς.
Ας δούμε τώρα με επίσημο τρόπο τον ορισμό των κωδικοποιήσεων ακεραίων σαν μη προσημασμένους (unsigned) και σαν προσημασμένους (signed) σύμφωνα με τον κώδικα συμπληρώματος ως προς 2. Έστωσαν τα n bits: an-1 an-2... a2 a1 a0. Σύμφωνα με τον κώδικα των μη προσημασμένων (unsigned), που είχαμε δεί στην § 5.1, αυτά παριστάνουν τον μη αρνητικό ακέραιο αριθμό: Au = an-1·2n-1 + an-2·2n-2 + ... + a2·22 + a1·21 + a0·20. Τώρα, σύμφωνα με τον κώδικα συμπληρώματος-2 γιά προσημασμένους (signed) ακέραιους αριθμούς, τα ίδια αυτά n bits παριστάνουν τονi εξής αριθμό As:
(α) Πόσοι (πλήθος) και ποιοί (από ποιόν εώς και ποιόν) ακέραιοι αριθμοί αναπαρίστανται με τον 4-μπιτο κώδικα μη προσημασμένων (unsigned) ακεραίων αριθμών και γιατί; Ίδια ερώτηση γιά τον 4-μπιτο κώδικα συμπληρώματος ως προς 2 προσημασμένων (signedι) ακεραίων αριθμών. Ίδιες ερωτήσεις γιά τους κώδικες πλάτους 5 bits και 6 bits, unsigned και signed.
(β) Ο δεκαδικός αριθμός 29, σε μορφή unsigned, πόσα bits κατ' ελάχιστο χρειάζεται γιά να παρασταθεί, και γιατί; Ίδια ερώτηση γιά τον ίδιο αριθμό αλλά σε μορφή signed 2's complement. Ίδια ερώτηση γιά τον αριθμό -13 (μείον δεκατρία).
(γ) Γράψτε τους δεκαδικούς αριθμούς +29, -29, +13, και -13 σε μορφή εξάμπιτου (6-bit) signed 2's complement με δύο τρόπους και δείχνοντας τις πράξεις σας: (1) με τη μέθοδο του κύκλου των αριθμών (σχέση μεταξύ As, Au, και 2n), και (2) μέσω του πολυωνύμου δυνάμεων του 2 με συντελεστές τα bits του αριθμού, όπου το αριστερό (MS) bit έχει πρόσημο μείον, ενώ όλα τα άλλα bits έχουν πρόσημο συν.
(δ)
Ο δυαδικός αριθμός 00100101 (8 bits)
σε μορφή signed 2's complement
ποιόν αριθμό στο δεκαδικό παριστάνει και πώς το βρίσκετε;
Ίδια ερώτηση γιά τον δυαδικό αριθμό 11100000,
με τις δύο παραπάνω μεθόδους, και δείχνοντας τις πράξεις σας.
Γιά την απόδειξη θα χρησιμοποιήσουμε, όπως φαίνεται στο παραπάνω σχήμα,
τους ακεραίους Au και Bu,
που αποτελούν την ερμηνεία των As και Bs
ως μη προσημασμένων αριθμών·
δηλαδή, όπως ξέρουμε,
Au = As + 2n όταν As<0,
αλλοιώς Au = As
--και ομοίως γιά τον Bu.
Ο αθροιστής μη προσημασμένων υπολογίζει το
Su = (Au+Bu) mod 2n,
το οποίο στη συνέχεια ερμηνεύουμε σαν
τον προσημασμένο αριθμό Ss, δηλ.
Ss = Su όταν Su<2n-1,
αλλοιώς Ss = Su - 2n.
Η βασική ιδέα της απόδειξης είναι η εξής:
αφού ο Au είναι
είτε As είτε As + 2n,
και ο Bu είναι
είτε Bs είτε Bs + 2n,
τότε το άθροισμα (Au+Bu)
θα είναι: As+Bs+P,
όπου P = είτε 0, είτε 2n, είτε 2n+1.
Επομένως, αφού το άθροισμα Su
υπολογίζεται mod 2n,
ο όρος P θα φεύγει,
και θα μας μένει το άθροισμα As+Bs.
Γιά μιά πλήρη απόδειξη, πρέπει να εξετάσουμε προσεκτικά
τις περιοχές τιμών των προσθετέων και του αθροίσματος,
όπως θα κάνουμε τώρα, χωριστά γιά τις τέσσερεις περιπτώσεις:
(α) Θετικός συν Θετικό:
Όταν οι δύο προσθετέοι,
As και Bs,
είναι θετικοί ή μηδέν και δεν ξεπερνούν τον αριθμό +2n-1-1,
τότε Au = As και Bu = Bs,
άρα και Au+Bu = As+Bs.
Η υπόθεση του θεωρήματός μας είναι ότι
το άθροισμα As+Bs μπορεί να παρασταθεί με n bits
σε μορφή συμπληρώματος 2,
άρα το As+Bs δεν ξεπερνά το +2n-1-1.
Κατά συνέπεια, και το S = Au+Bu
δεν ξεπερνά το 2n-1-1,
επομένως Su = S <2n-1.
Σε αυτήν την περιοχή, όμως, Ss = Su,
άρα Ss = S = Au+Bu =
As+Bs
[ΟΕΔ].
(β) Θετικός συν Αρνητκό, με Άθροισμα Θετικό ή Μηδέν:
Έστω ότι As = +A και Bs = -B,
όπου A και B είναι θετικοί που δεν ξεπερνούν το +2n-1-1,
και ο A είναι μεγαλύτερος ή ίσος του B,
όπως φαίνεται στο σχήμα (πρώτοι δύο άξονες).
Επειδή As>0, έχουμε Au=As=A·
απ' την άλλη μεριά, Bs<0,
άρα Bu = Bs+2n = 2n-B.
Ο μη προσημασμένος αθροιστής υπολογίζει το άθροισμα
S = A + (2n - B) = 2n + (A-B),
το οποίο όμως είναι μεγαλύτερο ή ίσο του 2n,
επειδή ο A είναι μεγαλύτερος ή ίσος του B.
Άρα, Su = S mod 2n =
(2n + (A-B)) mod 2n = A - B.
Επειδή Su=A-B δεν ξεπερνά το +2n-1-1,
θα είναι Ss = Su·
επομένως, Ss = A-B = As+Bs
[ΟΕΔ].
(γ) Θετικός συν Αρνητκό, με Άθροισμα Αρνητικό:
Έστω ότι As = -A και Bs = +B,
όπου A θετικός, B θετικός ή μηδέν, A>B,
ο A δεν ξεπερνά το 2n-1,
και ο B δεν ξεπερνά το 2n-1-1.
Σε αυτή την περίπτωση, έχουμε:
Au = As+2n = 2n-A, και
Bu=Bs=B,
όπως φαίνεται στο σχήμα,
στη μετάβαση από τον πρώτο στον τρίτο άξονα των αριθμών.
Ο μη προσημασμένος αθροιστής υπολογίζει το άθροισμα
S = (2n - A) + B = 2n - (A-B)·
επειδή A>B, το άθροισμα αυτό είναι μικρότερο του 2n,
άρα ο αθροιστής το βγάζει αυτούσιο:
Su = S = 2n - (A-B).
Επειδή ο A δεν ξεπερνά το 2n-1,
το ίδιο ισχύει και γιά τον (A-B)·
επομένως, ο Su είναι μεγαλύτερος ή ίσος του 2n-1.
Ένας τέτοιος μη προσημασμένος αριθμός,
ερμηνευόμενος σε κωδικοποίηση συμπληρώματος-2,
θα ερμηνευτεί σαν ο αρνητικός αριθμός
Ss = Su - 2n =
(2n-(A-B)) - 2n = -A + B =
As + Bs
[ΟΕΔ].
(δ) Αρνητκός συν Αρνητκό:
Έστω ότι As = -A και Bs = -B,
όπου A και B είναι θετικοί που δεν ξεπερνούν,
ούτε αυτοί ούτε το άθροισμά τους, τον αριθμό 2n-1.
Τότε:
Au = As+2n = 2n-A, και
Bu = Bs+2n = 2n-B,
όπως φαίνεται στο δεξιό άξονα του σχήματος.
Ο μη προσημασμένος αθροιστής υπολογίζει το άθροισμα
S = (2n-A) + (2n-B) = 2n+1 - (A+B),
το οποίο όμως είναι μεταξύ
2n+1-2n-1 = 2n+2n-1
και 2n+1-1.
Άρα, επειδή ο αθροιστής βγάζει μόνο n bits, θα βγάλει τελικά:
Su = S mod 2n =
(2n+1 - (A+B)) mod 2n =
2n - (A+B),
το οποίο είναι μεταξύ
2n-1 και 2n-1.
Σε αυτήν την περιοχή τιμών,
Ss = Su - 2n =
(2n - (A+B)) - 2n = -A-B =
As + Bs
[ΟΕΔ].
Εύκολα βλέπει κανείς ότι το προσημασμένο άθροισμα των B + B' ισούται πάντα με -1, αφού έχει την αναπαράσταση με όλο άσσους: η πρόσθεση ενός bit 0 με ένα bit 1, χωρίς κρατούμενο εισόδου, δίνει πάντα άθροισμα 1 και κρατούμενο 0 (χρησιμοποιήσαμε την ιδιότητα ότι οι προσημασμένοι αριθμοί B και B' προστίθενται με τον ίδιο τρόπο όπως προσθέτουμε και τους μη προσημασμένους αριθμούς, όπως αποδείξαμε στην προηγούμενη παράγραφο, 6.4). Αφού B+B' = -1, προκύπτει ότι B+B'+1 = B + (B'+1) = 0, άρα οι αριθμοί B και (B'+1) είναι αλγεβρικά αντίθετοι: (B'+1) = -B --υπό την προϋπόθεση ότι το άθροισμα (B'+1) μπορεί να παρασταθεί σε συμπλήρωμα-2 με n bits, δηλαδή ότι το (B'+1) βρίσκεται μεταξύ -2n-1 και +2n-1-1, πράγμα που ισχύει πάντα εκτός της περίπτωσης B' = +2n-1-1 = 0111...111, δηλαδή εκτός B = 1000...000 = -2n-1, αφού τότε ο -B = +2n-1 δεν μπορεί να παρασταθεί με n bits σε μορφή συμπληρώματος-2.
Επομένως, συνολικά, όταν B είναι ακέραιος στο διάστημα [-(2n-1-1), +(2n-1-1)], τότε ο αλγεβρικός αντίθετός του, -B (που επίσης ανήκει στο ίδιο διάστημα), σε παράσταση συμπληρώματος-2, είναι ο Β'+1, δηλαδή ο αριθμός που προκύπτει από την παράσταση συμπληρώματος-2 του B αν αντιστρέψουμε το κάθε bit της και στη συνέχεια προσθέσουμε τον αριθμό 1 (μέσω προσημασμένης πρόσθεσης, που, όπως έχουμε δείξει, είναι η ίδια με την μη προσημασμένη όπου αγνοούμε το κρατούμενο εξόδου).
Ain Bin Cin Au+Bu = Su S(5) As+Bs= Ss S(4) 0010 0011 0 2 + 3 = 5 00101 2+3 = 5 0101 0010 1011 0 2 +11 = 13 01101 2-5 = -3 1101 1110 1111 0 1111 1111 0 1111 0001 0 0101 1110 0 0101 0001 0όπου: Ain, Bin, και Cin είναι οι δυαδικές είσοδοι του αθροιστή· Au+Bu = Su είναι η ερμηνεία των εισόδων και της αναμενόμενης εξόδου στο δεκαδικό και σύμφωνα με τον κώδικα μη προσημασμένων αριθμών· S(5) είναι η αναμενόμενη πεντάμπιτη έξοδος του αθροιστή (άθροισμα μη προσημασμένων εισόδων), και πρέπει να συμφωνεί με την προηγούμενη στήλη· As+Bs = Ss είναι η ερμηνεία των εισόδων και της αναμενόμενης εξόδου στο δεκαδικό και σύμφωνα με τον κώδικα συμπληρώματος-2 προσημασμένων αριθμών· και S(4) είναι η αναμενόμενη τετράμπιτη έξοδος του αθροιστή γιά άθροισμα προσημασμένων εισόδων, και πρέπει αφ' ενός να προκύπτει από την στήλη S(5) παραλείποντας το αριστερό (MS) bit, και αφ' ετέρου να συμφωνεί με την προηγούμενη στήλη Ss. Στο εργαστήριο, επαληθεύστε πειραματικά τις εξόδους S(5) και S(4) του πίνακα, ή και άλλες πρόσθετες που εσείς θα δοκιμάσετε. Μην χαλάστε το κύκλωμά σας όταν τελειώσετε: θα το χρειαστείτε στο πείραμα 6.9.
Πριν φτάσετε στο εργαστήριο,
κάντε το σχεδιάγραμμα συνδεσμολογίας
που δείχνει ποιά συγκεκριμένα pins ποιού chip πρέπει να συνδέσετε πού,
και συμπληρώστε τον παρακάτω πίνακα,
κατ' αναλογία εκείνου του προηγούμενου πειράματος 6.8.
Εδώ, Bin' είναι το συμπλήρωμα (NOT) του Bin·
Bu' είναι η ερμηνία του Bin' σαν unsigned·
Su είναι η ερμηνία του τι θα βγάλει ο αθροιστής σαν unsigned,
και πρέπει να συμφωνεί με την επόμενη στήλη, S(5),
που πρέπει να είναι το άθροισμα των Ain, Bin', και Cin=1·
και Bs' είναι η ερμηνεία του Bin' σαν signed.
Στο εργαστήριο, κατασκευάστε τον προσθαφαιρέτη,
και δώστε του τις εισόδους Bin του πίνακα,
πρώτα με το σήμα add'/sub στο 0 (πρόσθεση),
οπότε πρέπει να βλέπετε τα αποτελέσματα του πειράματος 6.8,
και μετά με το σήμα add'/sub = 1 (αφαίρεση),
ούτως ώστε να διαπιστώσετε πως οι ίδιες πράξεις
αυτή τη φορά σαν αφαιρέσεις γίνονται σωστά
και δίνουν τα αποτελέσματα του εδώ πίνακα.
Ain Bin As-Bs = Ss Bin' Cin Au+Bu'+1=Su S(5) As+Bs' +1=Ss S(4) 0010 0011 2-3 = -1 1100 1 2+12+1 =15 01111 2+(-4)+1=-1 1111 0010 1011 2-(-5)= 7 0100 1 2+ 4+1 = 7 00111 2+(+4)+1= 7 0111 1110 1111 0000 1 1111 1111 0000 1 1111 0001 1110 1 0101 1110 0001 1 0101 0001 1110 1
Κατασκευάστε το κύκλωμα αυτό στο εργαστήριο, και συνδέστε δύο LED's στις εξόδους του. Χρησιμοποιήστε δύο από τις πύλες ενός chip 7404 (βλ. §3.7). Το κύκλωμα αυτό δεν έχει εξωτερικές εισόδους, αφού κάθε είσοδος πύλης του οδηγείται από μιάν άλλη πύλη του! Επομένως, δεν μπορείτε να του αλλάξετε την κατάστασή του. Σβήστε και ανάψτε την τροφοδοσία πολλές φορές, και παρατηρήστε αν το κύκλωμα "σηκώνεται" πάντα στην ίδια κατάσταση, ή πότε στη μιά και πότε στην άλλη. (Αν το κύκλωμα είναι εντελώς "συμμετρικό", από ηλεκτρική άποψη, θα "πέφτει" με πιθανότητα 50% στη μία κατάσταση και 50% στην άλλη, σαν μιά μπίλια που την τοποθετείτε ακριβώς ισορροπημένη στην κόψη ενός ξυραφιού, κι αυτή πέφτει πότε από τη μιά και πότε από την άλλη· αν όμως το κύκλωμα έχει έστω και μία ανεπαίσθητη (ηλεκτρική) ασυμμετρία, τότε θα πέφτει συνήθως από την ίδια "πλευρά").
Ένας --ημιπαράνομος...-- τρόπος
να επηρρεάσουμε την κατάσταση του flip-flop
(με την τροφοδοσία αναμένη)
είναι να ακουμπήσουμε "στιγμιαία"
τον έναν από τους δύο κόμβους του με ένα σύρμα γειωμένο,
όπως δείχνει το σχήμα με τα κατακόρυφα βέλη.
(Εναλλακτικά, το σύρμα θα μπορούσε να συνδέονταν
και στην θετική τροφοδοσία).
(Γενικά, σ' ένα τυχόν κύκλωμα, είναι πολύ κακό να ακουμπάς
την έξοδο μιάς πύλης στη γή ή στην τροφοδοσία,
διότι όταν η έξοδος προσπαθεί να δώσει
την αντίθετη τιμή από αυτήν που της ακουμπάμε,
κατ' ουσίαν προκαλούμε βραχυκύκλωμα και υπερθέρμανση,
με πιθανό κάψιμο αν συνεχιστεί γιά πολλήν ώρα·
εδώ, ευτυχώς, τα πράγματα δεν είναι τόσο κακά:
το βραχυκύκλωμα διαρκεί ελάχιστα ns μόνο,
μέχρις ότου η νέα τιμή που αυτό επιβάλει εξωτερικά
κάνει την "βόλτα" του κυκλώματος και αλλάξει κατά την ίδια φορά
την τιμή που η πύλη προσπαθεί να δώσει στην έξοδό της·
έτσι, η υπερθέρμανση είναι πολύ μικρή).
Ακουμπήστε τον έναν κόμβο,
και δείτε ότι αμέσως η αντίστοιχη LED σβήνει και η άλλη ανάβει.
Απομακρύνετε το σύρμα και παρατηρήστε ότι το κύκλωμα μένει
εκεί που το αφήσατε, δηλαδή έχει μνήμη.
Επαναλάβετε από την άλλη πλευρά.
Όταν το ακούμπημα είναι από την ίδια πλευρά που είναι ήδη σβηστή,
αυτό δεν έχει επίδραση·
όταν είναι από την άλλη, τότε έχει.
Αυτή είναι η βασική (χειροκίνητη) ιδέα του flip-flop τύπου RS,
την αυτοματοποίηση της οποίας (με πύλες αντί ακουμπήματος συρμάτων)
θα δούμε στο επόμενο εργαστήριο.
[Up - Table of Contents] [Prev - 5. Binary Numbers, Adders] |
[printer version - PDF] [7. Latches and Registers - Next] |
Up to the Home Page of CS-120
|
© copyright
University of Crete, Greece.
last updated: 1 Nov. 2022, by M. Katevenis. |