Εργαστήριο 10: Μηχανές Πεπερασµένων Καταστάσεων (Finite State Machines - FSM)



Σχετικά έγγραφα
ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ. Εργαστήριο 10: Μηχανές Πεπερασμένων Καταστάσεων (Finite State Machines - FSM)

Παραδείγματα σχεδίασης με μηχανές πεπερασμένων καταστάσεων

ΕΡΓΑΣΤΗΡΙΟ ΗΛΕΚΤΡΟΝΙΚΩΝ ΕΦΑΡΜΟΓΩΝ

8.1 Θεωρητική εισαγωγή

Εργαστήριο 7: Μανταλωτές (Latches), Καταχωρητές, και ιφασικά Ρολόγια

5.1 Θεωρητική εισαγωγή

6 η Θεµατική Ενότητα : Σχεδίαση Συστηµάτων σε Επίπεδο Καταχωρητή

6.1 Καταχωρητές. Ένας καταχωρητής είναι μια ομάδα από f/f αλλά μπορεί να περιέχει και πύλες. Καταχωρητής των n ψηφίων αποτελείται από n f/f.

100 ΕΡΩΤΗΣΕΙΣ ΜΕ ΤΙΣ ΑΝΤΙΣΤΟΙΧΕΣ ΑΠΑΝΤΗΣΕΙΣ ΓΙΑ ΤΟ ΜΑΘΗΜΑ ΨΗΦΙΑΚΑ ΚΥΚΛΩΜΑΤΑ

7.1 Θεωρητική εισαγωγή

e-book ΛΟΓΙΚΗ ΣΧΕΔΙΑΣΗ ΑΣΚΗΣΕΙΣ

Εργαστήριο Ψηφιακής Σχεδίασης

Υπάρχουν δύο τύποι μνήμης, η μνήμη τυχαίας προσπέλασης (Random Access Memory RAM) και η μνήμη ανάγνωσης-μόνο (Read-Only Memory ROM).

Ηλεκτρολόγοι Μηχανικοί ΕΜΠ Λογική Σχεδίαση Ψηφιακών Συστημάτων Διαγώνισμα κανονικής εξέτασης 2017

Ηλεκτρολόγοι Μηχανικοί ΕΜΠ Λογική Σχεδίαση Ψηφιακών Συστημάτων Διαγώνισμα κανονικής εξέτασης Θέμα 1ο (3 μονάδες)

σύνθεση και απλοποίησή τους θεωρήµατα της άλγεβρας Boole, αξιώµατα του Huntington, κλπ.

ΨΗΦΙΑΚΑ ΚΥΚΛΩΜΑΤΑ - ΕΡΓΑΣΤΗΡΙΑΚΗ ΑΣΚΗΣΗ 3

Κυκλώµατα. Εισαγωγή. Συνδυαστικό Κύκλωµα

ΠΡΟΓΡΑΜΜΑ ΣΠΟΥ ΩΝ ΠΛΗΡΟΦΟΡΙΚΗΣ

Η συχνότητα f των παλµών 0 και 1 στην έξοδο Q n είναι. f Qn = 1/(T cl x 2 n+1 )

ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ. Εργαστήριο 7: Μανταλωτές (Latches), Καταχωρητές, και Διφασικά Ρολόγια

4.1 Θεωρητική εισαγωγή

6.1 Θεωρητική εισαγωγή

4 η Θεµατική Ενότητα : Συνδυαστική Λογική. Επιµέλεια διαφανειών: Χρ. Καβουσιανός

ΨΗΦΙΑΚΗ ΛΟΓΙΚΗ ΣΧΕΔΙΑΣΗ

Ακολουθιακό κύκλωμα Η έξοδος του κυκλώματος εξαρτάται από τις τιμές εισόδου ΚΑΙ από την προηγούμενη κατάσταση του κυκλώματος

5. Σύγχρονα Ακολουθιακά Κυκλώματα

ΨΗΦΙΑΚΗ ΛΟΓΙΚΗ ΣΧΕΔΙΑΣΗ

Α. ΣΚΟΔΡΑΣ ΠΛΗ21 ΟΣΣ#2. 14 Δεκ 2008 ΠΑΤΡΑ ΕΛΛΗΝΙΚΟ ΑΝΟΙΚΤΟ ΠΑΝΕΠΙΣΤΗΜΙΟ 2008 Α. ΣΚΟΔΡΑΣ ΧΡΟΝΟΔΙΑΓΡΑΜΜΑ ΜΕΛΕΤΗΣ

Καταστάσεων. Καταστάσεων

13. ΣΥΓΧΡΟΝΑ ΑΚΟΛΟΥΘΙΑΚΑ ΚΥΚΛΩΜΑΤΑ

Κεφάλαιο 3 ο Ακολουθιακά Κυκλώματα με ολοκληρωμένα ΤΤL

ΤΕΧΝΟΛΟΓΙΚΟ ΕΚΠΑΙ ΕΥΤΙΚΟ Ι ΡΥΜΑ (Τ.Ε.Ι.) ΚΡΗΤΗΣ Τµήµα Εφαρµοσµένης Πληροφορικής & Πολυµέσων. Ψηφιακή Σχεδίαση. Κεφάλαιο 5: Σύγχρονη Ακολουθιακή

Σελίδα 1 από 11. Απαντήσεις στο φυλλάδιο 57 Ερώτηση: 1 η : Οι ακροδέκτες αυτοί χρησιµοποιούνται για:

βαθµίδων µε D FLIP-FLOP. Μονάδες 5

Κυκλώµατα. Εισαγωγή. Συνδυαστικό Κύκλωµα

Ολοκληρωμένα Κυκλώματα

Πανεπιστήμιο Δυτικής Μακεδονίας. Τμήμα Μηχανικών Πληροφορικής & Τηλεπικοινωνιών. Ψηφιακή Σχεδίαση

1 η Θεµατική Ενότητα : Δυαδικά Συστήµατα

Είναι το ηλεκτρικό ρεύµα διανυσµατικό µέγεθος;

Εργαστήριο 8: Μετρητής μέσω Αθροιστή & Καταχωρητή, Ακμοπυροδότηση

7 η Θεµατική Ενότητα : Καταχωρητές, Μετρητές και Μονάδες Μνήµης

Άσκηση 3 Ένα νέο είδος flip flop έχει τον ακόλουθο πίνακα αληθείας : I 1 I 0 Q (t+1) Q (t) 1 0 ~Q (t) Κατασκευάστε τον πίνακα

ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ

PLD. Εισαγωγή. 5 η Θεµατική Ενότητα : Συνδυαστικά. PLAs. PLDs FPGAs

Ακολουθιακό κύκλωμα Η έξοδος του κυκλώματος εξαρτάται από τις τιμές εισόδου ΚΑΙ από την προηγούμενη κατάσταση του κυκλώματος

Περίληψη. ΗΜΥ-210: Λογικός Σχεδιασµός Εαρινό Εξάµηνο Μετρητής Ριπής (Ripple Counter) Μετρητές (Counters) Μετρητής Ριπής (συν.

Συνδυαστικά Λογικά Κυκλώματα

Ψηφιακά Συστήματα. 6. Σχεδίαση Συνδυαστικών Κυκλωμάτων

ΘΕΜΑΤΑ & ΕΝΔΕΙΚΤΙΚΕΣ ΛΥΣΕΙΣ

Η κανονική μορφή της συνάρτησης που υλοποιείται με τον προηγούμενο πίνακα αληθείας σε μορφή ελαχιστόρων είναι η Q = [A].


PLC. Εισαγ γωγή στα. ιαδικασία προγραµµατισµού. Η δοµή ενός προγράµµατος. Η µνήµη και η δοµή της. Εκτέλεση προγράµµατος

ΕΛΛΗΝΙΚΟ ΑΝΟΙΚΤΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΣΧΟΛΗ ΘΕΤΙΚΩΝ ΕΠΙΣΤΗΜΩΝ ΚΑΙ ΤΕΧΝΟΛΟΓΙΑΣ ΠΡΟΓΡΑΜΜΑ ΣΠΟΥ ΩΝ ΠΛΗΡΟΦΟΡΙΚΗΣ ΑΠΑΝΤΗΣΕΙΣ ΘΕΜΑΤΩΝ ΕΞΕΤΑΣΕΩΝ

Κυκλώµατα µε MSI. υαδικός Αθροιστής & Αφαιρέτης

ΤΙΤΛΟΣ ΕΡΓΑΣΤΗΡΙΑΚΗΣ ΑΣΚΗΣΗΣ ΣΕΙΡΙΑΚΗ ΠΡΟΣΘΕΣΗ

Ελίνα Μακρή

ΘΕΜΑΤΑ & ΑΠΑΝΤΗΣΕΙΣ Α. ΨΗΦΙΑΚΗ ΣΧΕ ΙΑΣΗ

C D C D C D C D A B

Πανεπιστήμιο Πατρών Τμήμα Φυσικής Εργαστήριο Ηλεκτρονικής. Ψηφιακά Ηλεκτρονικά. Καταχωρητές και Μετρητές 2. Επιμέλεια Διαφανειών: Δ.

3 η Θεµατική Ενότητα : Σύγχρονα Ακολουθιακά Κυκλώµατα. Επιµέλεια διαφανειών: Χρ. Καβουσιανός

1.1 Θεωρητική εισαγωγή

Ψηφιακή Λογική Σχεδίαση

Εισαγωγή στην πληροφορική

Θέμα 1ο (3 μονάδες) Υλοποιήστε το ακoλουθιακό κύκλωμα που περιγράφεται από το κατωτέρω διάγραμμα

Ψηφιακή Λογική Σχεδίαση

ΚΕΦΑΛΑΙΟ Συνδυαστικά Κυκλώµατα. 3.2 Σχεδιασµός Συνδυαστικής Λογικής 3.3 ιαδικασία Ανάλυσης 3.4 ιαδικασία Σχεδιασµού.

7. ΚΑΤΑΧΩΡΗΤΕΣ ΕΡΩΤΗΣΕΙΣ ΑΣΚΗΣΕΙΣ

ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΠΛΗΡΟΦΟΡΙΚΗ

Συνδυαστικά Κυκλώματα

Ασύγχρονοι Απαριθμητές. Διάλεξη 7

«Σχεδιασμός Ψηφιακών Συστημάτων σε FPGA» Εαρινό εξάμηνο Διάλεξη 8 η : Μηχανές Πεπερασμένων Κaταστάσεων σε FPGAs

Κεφάλαιο Τρία: Ψηφιακά Ηλεκτρονικά

7 η διάλεξη Ακολουθιακά Κυκλώματα

Μάθημα 0: Εισαγωγή. Λευτέρης Καπετανάκης. ΤΕΧΝΟΛΟΓΙΚΟ ΕΚΠΑΙΔΕΥΤΙΚΟ ΙΔΡΥΜΑ ΚΡΗΤΗΣ ΤΜΗΜΑ ΗΛΕΚΤΡΟΝΙΚΗΣ Άνοιξη 2011

Πανεπιστήμιο Δυτικής Μακεδονίας. Τμήμα Μηχανικών Πληροφορικής & Τηλεπικοινωνιών. Ψηφιακή Σχεδίαση

i Το τρανζίστορ αυτό είναι τύπου NMOS. Υπάρχει και το συμπληρωματικό PMOS. ; Τι συμβαίνει στο τρανζίστορ PMOS; Το τρανζίστορ MOS(FET)

ΗΜΥ-210: Σχεδιασμός Ψηφιακών Συστημάτων

Περιεχόµενα. Πρόλογος Εισαγωγή 21

Πανεπιστήμιο Πατρών Τμήμα Φυσικής Εργαστήριο Ηλεκτρονικής. Ψηφιακά Ηλεκτρονικά. Συνδυαστική Λογική. Επιμέλεια Διαφανειών: Δ.

ΗΜΥ 210: Σχεδιασμός Ψηφιακών Συστημάτων. Μετρητές 1

ΗΥ220 Εργαστήριο Ψηφιακών Κυκλωµάτων Τµήµα Επιστήµης Υπολογιστών Χειµερινό Εξάµηνο

ΦΟΙΤΗΤΡΙΑ : ΒΟΥΛΓΑΡΙ ΟΥ ΜΑΡΙΑ, ΑΕΜ: 2109 ΕΠΙΒΛΕΠΩΝ : ΚΑΛΟΜΟΙΡΟΣ ΙΩΑΝΝΗΣ, ΕΠΙΚΟΥΡΟΣ ΚΑΘΗΓΗΤΗΣ

3 η Θεµατική Ενότητα : Απλοποίηση Συναρτήσεων Boole. Επιµέλεια διαφανειών: Χρ. Καβουσιανός

ΤΙΤΛΟΣ ΕΡΓΑΣΤΗΡΙΑΚΗΣ ΑΣΚΗΣΗΣ ΑΣΥΓΧΡΟΝΟΙ ΜΕΤΡΗΤΕΣ

Γενική οργάνωση υπολογιστή «ΑΒΑΚΑ»

ΤΙΤΛΟΣ ΕΡΓΑΣΤΗΡΙΑΚΗΣ ΑΣΚΗΣΗΣ ΣΥΓΧΡΟΝΟΙ ΜΕΤΡΗΤΕΣ

Ψηφιακή Λογική και Σχεδίαση

Ψηφιακά Κυκλώματα (1 ο μέρος) ΜΥΥ-106 Εισαγωγή στους Η/Υ και στην Πληροφορική

Επίπεδο Ψηφιακής Λογικής (The Digital Logic Level)

Συλλογή & Επεξεργασία Δεδομένων Εργαστήριο 5. Ρυθμίζοντας τη Φορά Περιστροφής. Σύστημα Συλλογής & Επεξεργασίας Μετρήσεων

ΨΗΦΙΑΚΗ ΛΟΓΙΚΗ ΣΧΕΔΙΑΣΗ

ΕΙΣΑΓΩΓΗ ΣΤΟΥΣ ΥΠΟΛΟΓΙΣΤΕΣ. ΜΑΘΗΜΑ 2 ο. ΑΛΓΕΒΡΑ Boole ΛΟΓΙΚΑ ΚΥΚΛΩΜΑΤΑ

ΑΣΚΗΣΗ 10 ΣΧΕΔΙΑΣΗ ΑΚΟΛΟΥΘΙΑΚΩΝ ΚΥΚΛΩΜΑΤΩΝ

15 ΤΕΛΟΣ 1ΗΣ ΑΠΟ 5 ΣΕΛΙ ΕΣ

Κεφάλαιο 6. Σύγχρονα και ασύγχρονα ακολουθιακά κυκλώματα

Εργαστήριο 6: Προσηµασµένοι Ακέραιοι, Προσθαφαιρέτες, Flip-Flops

ΚΕΦΑΛΑΙΟ 6 ΒΑΣΙΚΑ ΑΚΟΛΟΥΘΙΑΚΑ ΚΥΚΛΩΜΑΤΑ. 6.1 Εισαγωγή

ΗΜΥ 210 ΣΧΕΔΙΑΣΜΟΣ ΨΗΦΙΑΚΩΝ ΣΥΣΤΗΜΑΤΩΝ. Χειµερινό Εξάµηνο 2016 ΔΙΑΛΕΞΗ 16: Μετρητές (Counters)

ΗΜΥ 210 ΣΧΕΔΙΑΣΜΟΣ ΨΗΦΙΑΚΩΝ ΣΥΣΤΗΜΑΤΩΝ. Χειµερινό Εξάµηνο 2016 ΔΙΑΛΕΞΗ 18: Διαδικασία Σχεδίασης Ψηφιακών Συστηµάτων - Επανάληψη

Transcript:

1 of 6 16/12/2003 9:23 µµ ΗΥ-120: Ψηφιακή Σχεδίαση Φθινόπωρο 2003 Τµ. Επ. Υπολογιστών Πανεπιστήµιο Κρήτης Εργαστήριο 10: Μηχανές Πεπερασµένων Καταστάσεων (Finite State Machines - FSM) 12-15 Ιανουαρίου 2004 [Βιβλίο: προαιρετικά µπορείτε να διαβάσετε µέρος της 6.4 (σελ. 274-280) και σελίδες 304-305 (από την 6.7).] 10.1 Ακολουθιακά Κυκλώµατα: Έχουµε πει ( 7.6) ότι "συνδυαστικά" (combinational) κυκλώµατα λέµε αυτά που δεν έχουν µνήµη, άρα οι τιµές εξόδου τους εξαρτώνται µόνο από τις παρούσες τιµές των εισόδων τους και όχι από το παρελθόν. Αντίθετα, "ακολουθιακά" (sequential) κυκλώµατα λέµε αυτά που έχουν µνήµη, κι έτσι η συµπεριφορά τους εξαρτάται όχι µόνο από το τι "βλέπουν" τώρα στις εισδους τους, αλλά και από την "κατάσταση" (state) στην οποία βρίσκονται, και στην οποία κατάσταση έχουν περιέλθει λόγω του παρελθόντος --στα ακολουθιακά κυκλώµατα συνηθίζουµε να ονοµάζουµε "κατάσταση" τις δυαδικές τιµές που είναι αποθηκευµένες στο σύνολο των στοιχείων µνήµης του κυκλώµατος. Στο σχήµα δεξιά φαίνεται µιά γενική αναπαράσταση ενός ακολουθιακού κυκλώµατος, η οποία δείχνει ότι αυτό αποτελείται (α) από τα στοιχεία µνήµης (flip-flops) που αποθηκεύουν την κατάσταση του κυκλώµατος, και (β) από ένα συνδυαστικό κύκλωµα το οποίο προσδιορίζει: (β1) τις εξόδους σαν συναρτήσεις των εισόδων και της κατάστασης, και (β2) την επόµενη κατάσταση, πάλι σαν συνάρτηση των εισόδων και της παρούσας κατάστασης. Η κατάσταση αποτελεί, τρόπον τινά, µιά "περίληψη" όλου του παρελθόντος --σε κάθε σύστηµα, γιά κάθε εφαρµογή, ο σχεδιαστής αποφασίζει πόσο µεγάλη και λεπτοµερή τέτοια "περίληψη" χρειάζεται να κρατάµε. Εδώ θα µελετήσουµε τις " Μηχανές Πεπερασµένων Καταστάσεων (Finite State Machines - FSM). Από µιάν άποψη, όλα τα ακολουθιακά κυκλώµατα είναι µηχανές πεπερασµένων καταστάσεων, διότι, αν έχουν n bits µνήµης (κατάστασης), τότε βρίσκονται ανά πάσα στιγµή σε µιάν από τις 2 n διαφορετικές καταστάσεις τις οποίες διαθέτουν --οι οποίες και είναι πάντα πεπερασµένες. Όµως, συνηθίζουµε να αναφερόµαστε µε τον όρο "FSM" κυρίως σε εκείνα τα ακολουθιακά κυκλώµατα τα οποία έχουν σχετικά λίγες καταστάσεις, και των οποίων τη λειτουργία µπορούµε να περιγράψουµε και να καταλάβουµε καλύτερα αν µιλήσουµε γιά το πώς η κάθε µιά κατάστασή τους, σε συνδυασµό µε τις τιµές εισόδου, καθορίζει τις εξόδους και την επόµενη κατάσταση συνήθως, η περιγραφή αυτή γίνεται µε ένα " ιάγραµµα (Μετάβασης) Καταστάσεων " (State (Transition) Diagram), όπως θα δούµε αµέσως παρακάτω. Μεγαλύτερα ακολουθιακά κυκλώµατα, µε πολλά bits µνήµης, συνήθως τα µελετάµε και τα σχεδιάζουµε κόβοντάς τα σε υποκυκλώµατα, µερικά από τα οποία τα περιγράφουµε σαν FSM's ενώ άλλα τα περιγράφουµε και τα µελετάµε µε άλλους τρόπους (µνήµες RAM, datapaths --που θα πούµε αργότερα-- κλπ). 10.2 Μετρητές, και το ιάγραµµα Καταστάσεών τους: Στο παράγραφο 8.2 είδαµε ένα κύκλωµα µετρητή µε χρήση αθροιστή. Εδώ δίπλα φαίνεται µιά παραλλαγή αυτού του κυκλώµατος: είναι τρίµπιτο αντί τετράµπιτο, γιά απλότητα του σχεδίου, και αντί παράλληλης φόρτωσης (αρχικοποίησης) µε αυθαίρετο αριθµό υπάρχει µόνο η δυνατότητα µηδενισµού, µέσω της εισόδου reset' επίσης, αντί δύο µανταλωτών σε σειρά, φυσικά, εδώ χρησιµοποιούµε έναν ακµοπυροδότητο καταχωρητή. Το ακολουθιακό αυτό κύκλωµα µετρητή αποτελείται από έναν τρίµπιτο καταχωρητή, που κρατά την κατάσταση του κυκλώµατος, και από ένα συνδυαστικό κύκλωµα που αποτελείται από τον πολυπλέκτη, τον αθροιστή, και τις πύλες AND. Η µία πύλη AND στο σχήµα παριστάνει στην πραγµατικότητα 3 πύλες, µε κοινή πρώτη είσοδο "reset'" και µε δεύτερη είσοδο από ένα από τα bits του αθροίσµατος, καθεµία. Όταν reset'=1, οι 3 έξοδοι των πυλών AND ταυτίζονται µε το άθροισµα, ενώ όταν reset'=0, οι 3 αυτές έξοδοι είναι 000. Κάτω από το κύκλωµα φαίνεται το διάγραµµα καταστάσεων αυτού του µετρητή. Οι 8 κύκλοι παριστάνουν τις 8 διαφορετικές καταστάσεις στις οποίες αυτός µπορεί να βρίσκεται, αφού έχει 3 bits κατάστασης. Τα βέλη παριστάνουν τις µεταβάσεις καταστάσεων: εάν σε δεδοµένο κύκλο ρολογιού το κύκλωµα βρίσκεται σε δεδοµένη κατάσταση, και είναι δεδοµένες οι τιµές των εισόδων του, τότε το αντίστοιχο βέλος δείχνει σε ποιάν επόµενη κατάσταση θα πάει το κύκλωµα στον επόµενο κύκλο ρολογιού. Τα µπλέ βέλη, που σηµειώνονται µε "u" (από "up", δηλ. µέτρηση προς τα επάνω), αντιστοιχούν στην τιµή εισόδου ελέγχου του πολυπλέκτη που επιλέγει την είσοδο +1 (και ενώ ταυτόχρονα η είσοδος reset' είναι 1) υπ' αυτές τις συνθήκες, η επόµενη κατάσταση είναι εκείνη µε κωδικό κατά 1 µεγαλύτερο από την παρούσα. Τα κόκκινα βέλη, που σηµειώνονται µε "d" (down - κάτω), αντιστοιχούν στην είσοδο που επιλέγει το -1, και

2 of 6 16/12/2003 9:23 µµ µας µεταφέρουν στην κατάσταση µε κωδικό κατά 1 µικρότερο της παρούσας. Τα βέλη που σηµειώνονται µε "n" (noop - καµιά πράξη) αντιστοιχούν στην είσοδο που επιλέγει το 0, και γι' αυτό η επόµενη κατάσταση ταυτίζεται µε την παρούσα. Κάθε ακολουθιακό κύκλωµα πρέπει να έχει έναν τρόπο αρχικοποίησης ( reset ) όταν του πρωτοδίνουµε τάση τροφοδοσίας, ή σε περίπτωση (έκτακτης) "ανάγκης" --όταν "χάνουµε το λογαριασµό" σε ποιά κατάσταση βρίσκεται, ή όταν πάει και "κολλάει" σε µιά κατάσταση και δεν ξέρουµε πώς αλλοιώς να το βγάλουµε από εκεί. Όπως έχουµε πει, όταν πρωτοανάβουµε την τροφοδοσία ενός flip-flop, αυτό πηγαίνει τυχαία σε µιάν από τις δύο σταθερές καταστάσεις του, 0 ή 1, και δεν υπάρχει τρόπος να προβλεφθεί σε ποιάν από τις δυό θα πάει (σαν να ρίχνεις ένα κέρµα "κορώνα-γράµµατα"). Έτσι, η κατάσταση εκκίνησης ενός ακολουθιακού κυκλώµατος είναι τυχαία, και πρέπει να υπάρχει τρόπος, στη συνέχεια, αυτό να έλθει σε γνωστή και επιθυµητή αρχική κατάσταση. Στο παραπάνω κύκλωµα, η αρχικοποίηση γίνεται ενεργοποιώντας το σήµα "reset", δηλαδή reset'=0, οπότε η επόµενη κατάσταση είναι πάντα η 0, ανεξαρτήτως προηγούµενης κατάστασης και των άλλων εισόδων. Στο διάγραµµα καταστάσεων, αυτό παριστάνεται µε τα µάυρα βέλη που σηµειώνονται µε "r'" (έχει παραληφθεί ένα ακόµα τέτοιο βέλος, από την κατάσταση 0 στον εαυτό της, που έπρεπε να υπάρχει αλλά δεν χωρούσε στο σχήµα). 10.3 Παράδειγµα FSM: Φώτα Κυκλοφορίας σε ιασταύρωση Οδών Το πρώτο µας παράδειγµα µηχανής πεπερασµένων καταστάσεων (FSM) θα έχει να κάνει µε τον χρονοπρογραµµατισµό (scheduling) κοινόχρηστων πόρων. Θα χρησιµοποιήσουµε σαν παράδειγµα µιά διασταύρωση δρόµων, αλλά οι ιδέες είναι ίδιες π.χ. µε δροµολόγηση πακέτων πληροφοριών σε δίκτυα υπολογιστών, ή µε την εναλλάξ εκτέλεση διεργασιών (προγραµµάτων) σ' έναν υπολογιστή που χρησιµοποιεί πολυπρογραµµατισµό. Ας φανταστούµε δύο µονόδροµους, A και B, οι οποίοι συµβάλουν, όπως δείχνει το σχήµα δεξιά ο A είναι κεντρικός, ενώ ο B είναι πάροδος. Στη διασταύρωσή τους υπάρχουν φώτα κυκλοφορίας, Ago και Bgo (1=πράσινο, 0=κόκκινο). Θέλουµε να σχεδιάσουµε το κύκλωµα ελέγχου των φαναριών. Στις πιό εξελιγµένες παραλλαγές του, το κύκλωµα αυτό θα χρησιµοποιεί σαν εισόδους του δύο ανιχνευτές αυτοκινήτων (car detectors), Ad και Bd: όταν υπάρχει αυτοκίνητο που περιµένει να περάσει από το φανάρι A, τότε Ad=1, αλλοιώς Ad=0, και οµοίως γιά το δρόµο B. Γιά απλοποίηση της συζήτησής µας θα θεωρήσουµε ότι υπάρχει ένα ρολόϊ, ck, που κάθε περίοδος του επαρκεί γιά τη διέλευση ακριβώς ενός αυτοκινήτου από τη διασταύρωση στην αρχή της περιόδου, η FSM ελέγχου λαµβάνει τις εισόδους Ad και Bd που την ενηµερώνουν γιά την ύπαρξη ή µη αυτοκινήτων στον κάθε δρόµο, αµέσως µετά ανάβει πράσινο στο κατάλληλο φανάρι, Ago ή Bgo, και κατά την υπόλοιπη περίοδο του ρολογιού περνάει το αυτοκίνητο που έχει πράσινο. Θα µελετήσουµε πέντε παραλλαγές του κυκλώµατος ελέγχου, µε σταδιακή βελτίωση των χαρακτηριστικών του. 10.3.1 Κλασσικά φανάρια, χωρίς ανιχνευτές, µε αναλογία 1 προς 1: Τα συνηθισµένα φώτα κυκλοφορίας δεν έχουν ανιχνευτές αυτοκινήτων, κι έτσι δεν µπορούν να προσαρµοστούν στις πραγµατικές συνθήκες κυκλοφορίας --απλώς αναβοσβήνουν περιοδικά το κόκκινο και το πράσινο µε συγκεκριµένη διάρκεια γιά τον κάθε δρόµο. Στην απλούστερη περίπτωση, στο παραπάνω παράδειγµα, το πράσινο θα ανάβει εναλλάξ στους δύο δρόµους, γιά διάστηµα ενός κύκλου ρολογιού --δηλαδή επαρκές γιά ένα αυτοκίνητο-- κάθε φορά. Το κύκλωµα ελέγχου σε αυτή την περίπτωση θα είναι η απλούστατη FSM τύπου µετρητή µε 2 καταστάσεις που φαίνεται στο σχήµα. Η FSM αυτή δεν έχει εισόδους, και οι µεταβάσεις καταστάσεων γίνονται πάντα µε τον ίδιο τρόπο, χωρίς συνθήκη γιά το λόγο αυτό, στα βέλη σηµειώνουµε "1" (πάντα αληθές), δηλαδή η αντίστοιχη µετάβαση γίνεται πάντα. Προφανώς, η FSM αυτή εναλλάσει συνεχώς κατάσταση µεταξύ της "Ago" (πράσινο στον A) και της "Bgo" (πράσινο στον B). Το απλούστατο αυτό κύκλωµα ελέγχου έχει µιά σειρά από µειονεκτήµατα: Περιττές καθυστερήσεις υπό ελαφρύ φορτίο: λέµε ότι το σύστηµα λειτουργεί υπό ελαφρύ φορτίο όταν περνάνε πολύ λίγα αυτοκίνητα, "αραιά και πού". Υπ' αυτές τις συνθήκες, όταν ένα αυτοκίνητο φτάνει στη διασταύρωση, συνήθως δεν θα υπάρχει αυτοκίνητο στον άλλο δρόµο, άρα θα µπορούσε να περάσει αµέσως. Παρ' όλα αυτά, το φανάρι µε το κύκλωµα ελέγχου που µόλις σχεδιάσαµε µπορεί να τύχει να είναι κόκκινο (µε πιθανότητα 50%), οπότε αυτό προκαλεί καθυστέρηση χωρίς λόγο. Έλλειψη δικαιοσύνης υπό βαρύ φορτίο: λέµε ότι το σύστηµα λειτουργεί υπό βαρύ φορτίο όταν υπάρχει πολλή κίνηση, άρα σχηµατίζεται ουρά πίσω από τα φανάρια, και στους δύο δρόµους. Υπ' αυτές τις συνθήκες, το κύκλωµα ελέγχου που µόλις σχεδιάσαµε αφήνει να περνούν τα αυτοκίνητα A και τα αυτοκίνητα B µε αναλογία 1 προς 1 όµως, δεδοµένου ότι ο A είναι κεντρικός δρόµος ενώ ο B είναι πάροδος, η αναλογιά αυτή δεν είναι δίκαια. Ανεπαρκής αξιοποίηση πόρων υπό ασύµµετρο φορτίο: λέµε ότι το σύστηµα λειτουργεί υπό ασύµµετρο φορτίο όταν ο ένας δρόµος έχει πολλή κίνηση και ο άλλος λίγη. Υπ' αυτές τις συνθήκες, το κύκλωµα ελέγχου που µόλις σχεδιάσαµε αφήνει να περνά µόνο ένα αυτοκίνητο κάθε 2 χρόνους από τον βεβαρυµένο δρόµο, δηλαδή ρυθµός ροής µόνο 50 % της µέγιστης εφικτής παροχής, ακόµα και όταν στον άλλο δρόµο δεν υπάρχει κανένα αυτοκίνητο.

3 of 6 16/12/2003 9:23 µµ 10.3.2 Κλασσικά φανάρια, χωρίς ανιχνευτές, µε αναλογία 2 προς 1: Την αδικία προς τον κεντρικό δρόµο υπό βαρύ φορτίο, λόγω αναλογίας 1:1 στη διάρκεια του πράσινου στους δύο δρόµους, µπορούµε να την διορθώσουµε προσθέτονας καταστάσεις στον παραπάνω µετρητή, όπως φαίνεται στο διάγραµµα καταστάσεων της νέας FSM, δίπλα. Εδώ, το πράσινο στον δροµο A ανάβει σε δύο από τις τρείς καταστάσεις, ενώ στον δρόµο B µόνο σε µία έτσι, υπό βαρύ φορτίο, η αναλογία παροχής A:B είναι 2:1, και η µέγιστη παροχή A έχει αυξηθεί στα 2/3 ενώ η µέγιστη παροχή B έχει µειωθεί στο 1/3. Φυσικά, συνεχίζουν να υπάρχουν περιττές καθυστερήσεις υπό ελαφρύ φορτίο και ανεπαρκής αξιοποίηση υπό ασύµµετρο φορτίο --τώρα µάλιστα οι καθυστερήσεις στο δρόµο B έχουν αυξηθεί και η µέγιστη παροχή του έχει µειωθεί. 10.3.3 Συνδυαστικό κύκλωµα σταθερής προτεραιότητας (απλό "STOP"): Οι περιττές καθυστερήσεις υπό ελαφρύ φορτίο και η ανεπαρκής αξιοποίηση υπό ασύµµετρο φορτίο είναι αδύνατον να διορθωθούν χωρίς ανιχνευτές αυτοκινήτων, διότι χωρίς αυτούς το κύκλωµα ελέγχου είναι "τυφλό": δεν έχει τρόπο να ξέρει τις πραγµατικές συνθήκες κυκλοφορίας. Έστω τώρα ότι έχουµε τις εισόδους Ad και Bd από τους ανιχνευτές. Ας προσπαθήσουµε κατ' αρχήν να φτιάξουµε το κύκλωµα ελέγχου σαν σκέτο συνδυαστικό κύκλωµα, χωρίς µνήµη. Φυσικά, όταν υπάρχει αυτοκίνητο µόνο σε έναν από τους δύο δρόµους, πρέπει να το αφήνουµε να περνάει, τώρα που ξέρουµε τι γίνεται σε κάθε δρόµο την κάθε στιγµή. Το πρόβληµα είναι όταν Ad=1 και Bd=1, δηλαδή υπάρχουν αυτοκίνητα και στους δύο δρόµους. Αφού δεν θυµόµαστε τίποτα από το παρελθόν (συνδυαστικό κύκλωµα), και αφού ο δρόµος A είναι κεντρικός ενώ ο B είναι πάροδος, λογικό είναι να δώσουµε προτεραιότητα στον A, άρα: Ago = Ad, και Bgo = (Ad') (Bd) --δηλαδή αν υπάρχει αυτοκίνητο στον A του ανάβουµε πράσινο και το αφήνουµε να περάσει, ενώ αν δεν υπάρχει αυτοκίνητο στον A και υπάρχει στον B τότε ανάβουµε πράσινο στον B. Σαν συνδυαστικό που είναι το κύκλωµα αυτό αποφασίζει χρησιµοποιώντας µόνο τα δεδοµένα της στιγµής --χωρίς καµία γνώση από το παρελθόν-- άρα στην πράξη υλοποιείται χωρίς φανάρια, µε µιά σκέτη πινακίδα "STOP" στο δευτερεύοντα δρόµο B. Το κύκλωµα ελέγχου αυτό δεν εισάγει περιττές καθυστερήσεις υπό ελαφρύ φορτίο, διότι κάθε αυτοκίνητο περνάει αµέσως µόλις έρθει αν δεν υπάρχει αυτοκίνητο στον άλλο δρόµο (ελαφρύ φορτίο). Επίσης, υπό ασύµµετρο φορτίο, προσφέρει πλήρη αξιοποίηση πόρων: όποτε υπάρχει αυτοκίνητο σε κάποιο δρόµο εισόδου, περνάει κάποιο από αυτά στην έξοδο, άρα η έξοδος ποτέ δεν µένει ανεκµετάλλευτη τη στιγµή που υπάρχουν αυτοκίνητα που θέλουν να περάσουν. Όµως, το κύκλωµα αυτό πάσχει από µεγάλη έλλειψη δικαιοσύνης προς τα αυτοκίνητα B: µόνο όποτε και εάν δεν υπάρχει κανένα αυτοκίνητο A µπορεί να περάσει ένα αυτοκίνητο B. Η αδικία αυτή δεν αποκλείεται να φτάσει στην ακραία µορφή του λεγόµενου φαινόµενου "λιµοκτονίας" (starvation): εάν συνεχώς υπάρχουν αυτοκίνητα A, ένα αυτοκίνητο B δεν θα εξυπηρετηθεί ποτέ. 10.3.4 Προσαρµοστικός Έλεγχος (µε αναλογία 1 προς 1): Η αδικία της τελευταίας λύσης προέρχεται από την έλλειψη µνήµης στο κύκλωµα: όσο πολλά αυτοκίνητα A και να έχουν περάσει πρόσφατα, ο ελεγκτής δεν το ξέρει, κι έτσι αφήνει ακόµα ένα να περάσει. Η έλλειψη αυτή διορθώνεται µε την απλή FSM που φαίνεται στο σχήµα δίπλα. Εδώ έχουµε 1 bit µνήµης (µόνο), µέσω του οποίου θυµόµαστε από ποιόν δρόµο ήλθε το τελευταίο αυτοκίνητο που πέρασε. Εάν το τελευταίο ήταν από τον A και τώρα υπάρχει αυτοκίνητο στον B, το αφήνουµε να περάσει αντίθετα, αν το τελευταίο ήταν από τον B, τώρα δίνουµε προτεραιότητα στον A: προτεραιότητα θα έχει ο άλλος δρόµος από αυτόν που εξυπηρετήθηκε την τελευταία φορά. Φυσικά, εάν δεν υπάρχει αυτοκίνητο στο δρόµο µε την προτεραιότητα, αφήνουµε να περάσει το αυτοκίνητο από τον άλλο δρόµο, εάν υπάρχει. Η επόµενη κατάσταση είναι ανάλογη µε το ποιός τελικά πέρασε, ενώ αν δεν πέρασε κανείς (διότι δεν υπήρχε κανείς) η κατάσταση παραµένει αµετάβλητη. Πάνω στα βέλη του διαγράµµατος καταστάσεων σηµειώνουµε τη συνθήκη µετάβασης (µαύρο), αλλά και την έξοδο που πρέπει να ενεργοποιηθεί (µπλέ). Ας δούµε τώρα πώς συνθέτουµε το κύκλωµα µιάς FSM από το διάγραµµα καταστάσεών της. Πρώτα πρέπει να αποφασίσουµε πόσα bits κατάστασης θα χρειαστούµε, και µε ποιό συνδυασµό τιµών τους θα παραστήσουµε την κάθε κατάσταση του διαγράµµατος. Φυσικά, υπάρχουν πολλές δυνατές επιλογές η επιλογή µας δεν θα επηρεάσει την εξωτερική συµπεριφορά της FSM, αλλά είναι πολύ πιθανό να επηρεάσει την πολυπλοκότητα του κυκλώµατος υλοποίησης --εδώ, πάντως, δεν υπάρχει εύκολος κανόνας γιά τον τρόπο που συµφέρει να γίνει η κωδικοποίηση των καταστάσεων. Στο παρόν παράδειγµά µας, οι καταστάσεις είναι δύο, άρα αρκεί ένα bit γιά την κωδικοποίησή τους ας το ονοµάσουµε S, και ας θεωρήσουµε ότι S=0 σηµαίνει ότι "το τελευταίο ήταν A", ενώ S=1 σηµαίνει ότι "το τελευταίο ήταν B". Εάν ονοµάσουµε ns την επόµενη κατάσταση, τότε ο πίνακας αληθείας του συνδυαστικού κυκλώµατος µέσα στην FSM είναι ο παρακάτω (αριστερά), από τον οποίον προκύπτουν οι έξοδοι του κυκλώµατος σαν συναρτήσεις των εισόδων του (δεξιά): S Ad Bd Ago Bgo ns 0 0 0 0 0 0 0 0 1 0 1 1 Ago = Ad [ S + (S') (Bd') ] 0 1 0 1 0 0 0 1 1 0 1 1 Bgo = Bd [ S' + (S) (Ad') ] 1 0 0 0 0 1 1 0 1 0 1 1 ns = S Ad' + S' Bd 1 1 0 1 0 0 1 1 1 1 0 0

4 of 6 16/12/2003 9:23 µµ Στην FSM αυτή, ειδική αρχικοποίηση δεν απαιτείται, διότι οιαδήποτε αρχική κατάσταση είναι έγκυρη και αποδεκτή. 10.3.5 Προσαρµοστικός έλεγχος µε αναλογία 2 προς 1: Η τελευταία FSM διατηρεί όλες τις καλές ιδιότητες του προσαρµοστικού ελέγχου (adaptive control), δηλαδή του ελέγχου που παρακολουθεί το φορτίο του συστήµατος και προσαρµόζεται σε αυτό: υπό ελαφρύ φορτίο ποτέ δεν προκαλεί περιττές καθυστερήσεις, και υπό ασύµµετρο φορτίο προσφέρει πλήρη χρήση πόρων. Επίσης, αίρει την κατάφορη αδικία στο δρόµο B, δίνοντάς του ισότιµη µεταχείριση µε τον δρόµο A. Μένει τώρα να διορθώσουµε την αναλογία παροχής υπό βαρύ φορτίο από 1:1 σε κάτι ορθότερο, δεδοµένου ότι η A είναι κύρια οδός και η B είναι πάροδος αυτό µπορεί να επιτευχθεί µε την τροποποιηµένη FSM που φαίνεται δίπλα. Εδώ, ξεχωρίζουµε την περίπτωση (κατάσταση) όπου το ένα τελευταίο αυτοκίνητο ήταν A ενώ το προηγούµενό του ήταν B από την περίπτωση που και τα δύο τελευταία αυτοκίνητα ήταν A στην πρώτη περίπτωση αφήνουµε να περάσει και δεύτερο A κατά προτεραιότητα, ενώ στη δεύτερη περίπτωση δίνουµε προτεραιότητα στο B. Υπό βαρύ φορτίο η FSM αυτή εξυπηρετεί τους δρόµους A και B µε αναλογία 2:1, ενώ επίσης διατηρεί και όλα τα άλλα πλεονεκτήµατα των δύο τελευταίων λύσεων, δηλαδή τελικά λύνει όλα τα παραπάνω µειονεκτήµατα της λύσης της 10.3.1. Άσκηση 10.4: Σχεδίαση της FSM (5) γιά τη ιασταύρωση των Οδών [Κάντε την πριν το εργαστήριο και παραδώστε την µε την αναφορά σας.] Σχεδιάστε την τελευταία παραπάνω FSM της περίπτωσης 5 (προσαρµοστικός έλεγχος µε αναλογία 2 προς 1), όπως σχεδιάσαµε και την FSM 4, δηλαδή εκφράστε όλες τις εξόδους του συνδυαστικού κυκλώµατος σαν συναρτήσεις των εισόδων του. Κωδικοποιήστε τις 3 καταστάσεις της FSM µε δύο bits κατάστασης, S1-S0, ως εξής: 00 = "το ένα τελευταίο ήταν A", 01 = "τα δύο τελευταία ήταν A", 10 = "το τελευταίο ήταν B". Μεταφράστε το διάγραµµα καταστάσεων στον πίνακα αληθείας των εξόδων Ago, Bgo, ns1, και ns0 σαν συναρτήσεις των εισόδων S1, S0, Ad, και Bd. Παρατηρήστε ότι οι γραµµές του πίνακα µε S1-S0 = 11 δεν καλύπτονται από το διάγραµµα καταστάσεων, δεδοµένου ότι η 11 είναι αχρησιµοποίητη κατάσταση. Αρχικά, αφήστε τις εξόδους, στις γραµµές αυτές, σαν συνθήκες αδιαφορίας ( 4.3 ), γιά να διευκολυνθεί η απλοποίηση των συναρτήσεων των εξόδων. Στη συνέχεια όµως, ελέγξτε ποιά σας προέκυψε σαν επόµενη κατάσταση µετά την 11 γιά τις διάφορες τιµές των εισόδων: το κύκλωµα πρέπει να εγκαταλείπει αυτή την "παράνοµη" κατάσταση όσο πιό γρήγορα γίνεται, αν τύχει να βρεθεί εκεί όταν πρωτοανάβει η τροφοδοσία. Γιά να είστε εντελώς εντάξει, πρέπει και να σιγουρευτείτε και ότι δεν θα ανάψουν ποτέ και τα δύο πράσινα µαζί (Ago=Bgo=1), ακόµα και όταν το κύκλωµα βρεθεί στην "παράνοµη" κατάσταση 11. 10.5 Κώδικες Μεταβλητού Μήκους: Κωδικοποίηση Huffman Το επόµενο παράδειγµα FSM που θα δούµε είναι από µιάν άλλη ενδιαφέρουσα περιοχή, τους κώδικες µεταβλητού µήκους, οι οποίοι έχουν σηµαντικές εφαρµογές στις ψηφιακές επικοινωνίες και οµοιότητες µε την αναγνώριση γραµµατικών από τους µεταφραστές (compilers). Ξέρουµε ότι µε n bits µπορούµε να κωδικοποιήσουµε 2 n διαφορετικά σύµβολα (εργαστήριο 1) οι κώδικες εκείνοι είναι σταθερού µήκους (ή πλάτους), διότι κωδικοποιούν όλα τα σύµβολα µε το ίδιο πλήθος bits, καθένα. Οι κώδικες σταθερού πλάτους βολεύουν όταν τα σύµβολα αποθηκεύονται σε µνήµες και όταν µεταφέρουµε τα bits τους όλα µαζί, εν παραλλήλω (π.χ. µέσα στο datapath επεξεργαστών). Όµως, όταν τα bits της κωδικοποίησης µεταδίδονται σειριακά, το ένα µετά το άλλο, µέσα από ένα κανάλι επικοινωνίας, χρησιµοποιούνται και κώδικες µεταβλητού µήκους (variable length), όταν αυτοί µπορούν να επιτύχουν µετάδοση της πληροφορίας µε λιγότερα συνολικά bits. Οι κώδικες αυτοί πήραν το όνοµά τους από τον Huffman ο οποίος τους µελέτησε. Γιά παράδειγµα, θεωρήστε ότι θέλουµε να στέλνουµε µηνύµατα αποτελούµενα από µακρές ακολουθίες τεσσάρων (4) συµβόλων, των A, B, C, και D --δηλαδή το αλφάβητό µας έχει αυτά τα 4 γράµµατα/σύµβολα. Ξέρουµε ότι αυτά µπορούµε να τα παραστήσουµε µ' ένα κώδικα σταθερού µήκους 2 bits ανά σύµβολο: 00, 01, 10, και 11. Έστω τώρα ότι στα µηνύµατά µας η συχνότητα µε την οποία εµφανίζονται τα διάφορα σύµβολα δεν είναι η ίδια: υπάρχουν σύµβολα πολύ συχνά και άλλα πολύ σπάνια. Σ' αυτή την περίπτωση, ένας κώδικας µεταβλητού µήκους µπορεί να µεταδώσει τα µηνύµατά µας µε λιγότερα bits συνολικά και κατά µέσον όρο. Ας πούµε, στο παραπάνω παράδειγµα, ότι στα µηνύµατά µας το 50 % των εµφανιζοµένων συµβόλων είναι A, το 25 % είναι B, το 12.5 % είναι C, και το 12.5 % είναι D, και ας θεωρήσουµε τον κώδικα µεταβλητού µήκους: A: 0, B: 10, C: 110, D: 111. Τότε, γιά κάθε π.χ. 1000 σύµβολα που µεταδίδονται, χρειάζονται περίπου 500 bits γιά τη µετάδοση των περίπου 500 A που υπάρχουν κατά µέσον όρο εκεί (1 bit ανά A), συν άλλα 500 bits γιά τα 250 B (2 bits ανά B), σύν 375 bits γιά τα 125 C (3 bits ανά C), σύν 375 bits γιά τα D. Το σύνολο είναι 1750 bits γιά κάθε 1000 µεταδιδόµενα σύµβολα, ή 1.75 bits/σύµβολο κατά µέσον όρο, πράγµα σηµαντικά χαµηλότερο από τα 2 bits/σύµβολο του κώδικα σταθερού πλάτους. Το κλειδί γιά την επίτευξη αυτής της οικονοµίας είναι το να αφιερώνουµε τους (λίγους) κώδικες µικρού µήκους στα σύµβολα εκείνα που εµφανίζονται περισσότερο συχνά, σε βάρος των σπανιότερων συµβόλων που παρίστανται µε περισσότερα bits. Ο γνωστός µας από παλιά κώδικας Μορς είναι φτιαγµένος µε παρόµοιο τρόπο, εκµεταλλευόµενος το γεγονός ότι στις ανθρώπινες γλώσσες ορισµένα γράµµατα είναι πολύ συχνότερα από άλλα.

5 of 6 16/12/2003 9:23 µµ Ο παραπάνω κώδικας έχει φτιαχτεί προσεκτικά ούτως ώστε να είναι εφικτή η κατ' ευθείαν αναγνώριση του κάθε σύµβολου αµέσως µόλις φτάσει το τελευταίο bit της κωδικοποιηµένης µορφής του, χωρίς διφορούµενα και χωρίς την ανάγκη να περιµένουµε πρώτα να δούµε τα επόµενα bits του µηνύµατος. Η ιδιότητα αυτή υπάρχει επειδή ο κώδικας κάθε βραχύτερου σύµβολου δεν αποτελεί πρόθεµα του κώδικα κανενός από τα µακρύτερα σύµβολα. Παρόµοια ιδιότητα έχουν και οι αριθµοί τηλεφώνου, όπου τα πρώτα ψηφία (πρόθεµα) καθορίζουν µονοσήµαντα το συνολικό µήκος και το είδος του αριθµού. Την ιδιότητα αυτή δεν θα την είχε π.χ. ο κώδικας A=0, B=1, C=10, D=11: µε αυτόν τον κώδικα, το µήνυµα 110 µπορεί να σηµαίνει είτε BC είτε DA. Παρόµοιο "διφορούµενο" (ambiguous) κώδικα είχε χρησιµοποιήσει και το Μαντείο των ελφών στον περίφηµο εκείνο χρησµό του "ίξεις αφίξεις ουκ εν τω πολέµω θνήξεις", που µπορούσε να ερµηνευτεί είτε σαν "ίξεις, αφίξεις, ουκ εν τω πολέµω θνήξεις" (θα πας, θα γυρίσεις, δεν θα πεθάνεις στον πόλεµο), είτε σαν "ίξεις, αφίξεις ουκ, εν τω πολέµω θνήξεις" (θα πας, δεν θα γυρίσεις, στον πόλεµο θα πεθάνεις). 10.6 FSM Αποκωδικοποίησης Huffman: Ο παραπάνω κώδικας µεταβλητού µήκους γιά τα 4 σύµβολα A, B, C, D αποκωδικοποιείται µε την FSM που φαίνεται δεξιά. Υποθέτουµε ότι τα bits των κωδικοποιηµένων συµβόλων έρχονται σειριακά, ένα-ένα, από µιάν είσοδο in, και ότι υπάρχει ένα ρολόϊ ck που σηµαδεύει, µε την ενεργή ακµή του, το τέλος του κάθε bit εισόδου in. Η FSM έχει 4 εξόδους, A, B, C, D κάθε µιά τους ανάβει όποτε παραλαµβάνουµε ένα αντίστοιχο σύµβολο, γιά διάρκεια ακριβώς ενός κύκλου ρολογιού, και συγκεκριµένα κατά τον κύκλο ρολογιού παραλαβής του τελευταίου bit του αντίστοιχου συµβόλου. Η κατάσταση εκκίνησης είναι η S0, οπότε και περιµένουµε να µας έλθει ένα νέο σύµβολο, µε όλα του τα bits από την αρχή. Στην ίδια κατάσταση επιστρέφουµε κάθε φορά που τελειώνουν όλα τα bits του προηγούµενου σύµβολου, και εποµένως περιµένουµε ένα νέο σύµβολο από την αρχή. Εάν είµαστε στην κατάσταση S0 και µας έλθει είσοδος 0 (in' αληθές), σηµαίνει ότι βλέπουµε ένα σύµβολο A (το µοναδικό άρα και το τελευταίο του bit), εποµένως πρέπει να ανάψει η έξοδος A και η επόµενη κατάσταση να είναι πάλι η S0, αφού στον επόµενο κύκλο περιµένουµε το πρώτο bit του εποµένου συµβόλου. Εάν τώρα είµαστε στην S0 και έλθει είσοδος 1 (in αληθές), τότε ξέρουµε ότι βλέπουµε το πρώτο bit ενός συµβόλου B ή C ή D, αλλά δεν ξέρουµε ακόµα τίνος από τα τρία έτσι, µεταβαίνουµε στην κατάσταση S1 που σηµαίνει ότι έχουµε δεί µέχρι στιγµής ένα "1". Τον επόµενο κύκλο, όντας στην S1, αν δούµε είσοδο 0 σηµαίνει ότι βλέπουµε το τέλος ενός συµβόλου B, άρα ανάβουµε την έξοδο B και µεταβαίνουµε στην S0. Αν αντιθέτως δούµε είσοδο 1 σηµαίνει ότι βλέπουµε το δεύτερο bit ενός συµβόλου C ή D, αλλά δεν ξέρουµε ακόµα τίνος από τα δύο έτσι, µεταβαίνουµε στην κατάσταση S2. Τον επόµενο κύκλο, όντας στην S2, είσοδος 0 σηµαίνει ότι βλέπουµε το τέλος ενός συµβόλου C, και είσοδος 1 υποδεικνύει το τέλος ενός συµβόλου D. 10.7 Κωδικοποίηση Καταστάσεων One-Hot: Στο εργαστήριο θα κατασκευάσετε την παραπάνω FSM λήψης του κώδικα µεταβλητού µήκους, χρησιµοποιώντας ένα στύλ κωδικοποίησης των καταστάσεών της που λέγεται " one-hot" (ένα "ζεστό"): όπως φαίνεται στο σχήµα δίπλα, χρησιµοποιούµε τόσα flip-flops κατάστασης όσες και οι καταστάσεις (αντί όσος ο δυαδικός λογάριθµος του πλήθους των καταστάσεων, που θα αρκούσαν), και θα φροντίσουµε ένα και µόνον ένα από αυτά να είναι αναµένο σε κάθε µιά από τις έγκυρες καταστάσεις της FSM. Το στυλ αυτό είναι σπάταλο σε flip-flops, αλλά συχνά δίνει απλούστερη συνδυαστική λογική γιά την FSM: είναι σαν να είχαµε µιά πιό πυκνά κωδικοποιηµένη κατάσταση, και µετά να είχαµε κι έναν συνδυαστικό αποκωδικοποιητή που µας δίνει µία και µόνο µία αναµένη έξοδο, αυτήν που αντιστοιχεί στην παρούσα κατάσταση. Φυσικά, µε το να έχουµε 3 (εν προκειµένω) flip-flops κατάστασης, σηµαίνει ότι το κύκλωµα στην πραγµατικότητα έχει 8 καταστάσεις, από τις οποίες µόνο 3 είναι οι έγκυρες γιά µας, και πρέπει να σιγουρευτούµε ότι το σήµα αρχικοποίησης reset θα φέρνει πάντα την FSM στην επιθυµητή έγκυρη αρχική κατάσταση S0, ανεξαρτήτως σε ποιάν από τις 8 υπαρκτές καταστάσεις (όχι µόνο τις 3 έγκυρες) αυτή ήταν πρίν. Εδώ λοιπόν, την κατάσταση "S0" θα την κωδικοποιούµε µε S0=1 και S1=S2=0 την "S1" θα την κωδικοποιούµε µε S1=1 και S0=S2=0 και η "S2" θα είναι η S2=1 και S0=S1=0. Με αυτή την κωδικοποίηση καταστάσεων, οι έξοδοι της FSM εκφράζονται πολύ απλά:

6 of 6 16/12/2003 9:23 µµ A = (S0) (in'), B=(S1) (in'), C=(S2) (in'), D=(S2) (in) διότι (S0) είναι αληθές όταν και µόνον όταν βρισκόµαστε στην κατάσταση S0, κ.ο.κ. γιά κάθε κατάσταση. Στη συνέχεια, εκφράζουµε τις εξόδους επόµενης κατάστασης. Η έξοδος ns1 πρέπει πάντα να έχει την τιµή που πρέπει να πάρει το flip-flop S1 κατά τον επόµενο κύκλο ρολογιού άρα το ns1 πρέπει να είναι αληθές τότε και µόνο τότε όταν στον επόµενο κύκλο ρολογιού η FSM πρέπει να µεταβεί στην κατάσταση S1. Από το διάγραµµα καταστάσεων της 10.6 βλέπουµε ότι η επόµενη κατάσταση είναι η S1 µόνο σε µία περίπτωση (µόνο ένα βέλος µπαίνει στην S1): όταν τώρα είµαστε στην S0 και in=1 άρα, το ns1 πρέπει να είναι αληθές όταν και µόνον όταν (S0) (in). Οµοίως, η S2 είναι επόµενη κατάσταση µόνο όταν S1=1 και in=1, άρα τότε και µόνο τότε πρέπει να ανάβει το ns2. Τώρα, η S0 είναι επόµενη κατάσταση σε πέντε διαφορετικές περιπτώσεις: όταν είµαστε στην S0 και in=0, ή στην S1 και in=0, ή είµαστε στην S2 (µε οιαδήποτε είσοδο in), ή όταν reset=1. Έτσι, προκύπτουν οι εξής σχέσεις γιά τις εξόδους επόµενης κατάστασης: ns1 = (S0) (in) (reset'), ns2 = (S1) (in) (reset'), ns0 = (S0) (in') + (S1) (in') + (S2) + (reset) = in' + S2 + reset Βλέπουµε ότι η έκφραση γιά το ns0 απλοποιήθηκε ως εξής: όποτε in=0 επόµενη κατάσταση είναι πάντα η S0, και αυτό καλύπτει τα τρία επάνω βέλη στο διάγραµµα καταστάσεων το βέλος γιά S2 και in=1 µπορούµε να το καλύψουµε µε τον όρο S2 (που επίσης καλύπτει την περίπτωση S2 και in=0 που ήδη καλύψαµε µε τον όρο in') έτσι, το µόνο άλλο βέλος προς S0 που έµεινε είναι το reset, άρα συνολικά ns0 = in' + S2 + reset. Όσον αφορά, τώρα, τη συνολική δράση του reset, αυτή πρέπει να σχεδιαστεί προσεκτικά: όταν reset=1, πρέπει η επόµενη κατάσταση να είναι η S0 ανεξαρτήτως του πού βρισκόµασταν, είτε σε µιάν από τις έγκυρες καταστάσεις S0, S1, S2, είτε σε κάποιαν από τις υπόλοιπες 5 "παράνοµες" καταστάσεις (000, 011, 101, 110, 111). Με τον τρόπο που περιελήφθη το reset στις παραπάνω συναρτήσεις, αυτό εξασφαλίζεται: οιαδήποτε τιµή και αν έχουν τα S0, S1, S2, και in, όταν reset=1, ο όρος "AND (reset')" στις εξόδους ns1 και ns2 εξασφαλίζει ότι αυτές θα είναι 0, και ο όρος "OR (reset)" στην έξοδο ns0 εξασφαλίζει ότι αυτή θα είναι 1. Πείραµα 10.8: η FSM Αποκωδικοποίησης Huffman Κατασκευάστε στο εργαστήριο την παραπάνω FSM λήψης του κώδικα µεταβλητού µήκους, σύµφωνα µε το κύκλωµα του τελευταίου σχήµατος και τις παραπάνω εξισώσεις που περιγράφουν το συνδυαστικό του κοµάτι. Όπως δείχνει το σχήµα, µπορείτε να πάρετε και τις δύο πολικότητες, in και in', της εισόδου µε έναν διακόπτη DPDT. Εάν θέλετε, µπορείτε να παραλήψετε τον όρο (reset') από τα ns1 και ns2, αρκεί να θυµάστε πάντα όταν κάνετε reset να έχετε ταυτόχρονα και in=0. Γιά το συνδυαστικό κοµάτι του κυκλώµατος θα χρειαστείτε 2 chips 7408 (πύλες AND) και 1 chip 7432 (πύλες OR). Γιά την κατάσταση, χρησιµοποιήστε 3 από τα 8 ακµοπυροδότητα flip-flops ενός chip 74574. Γιά το ρολόϊ του, θα χρειαστείτε τον καθαρισµό παλµών που είπαµε στην παράγραφο 8.5: χρησιµοποιήστε ένα chip 7402 (πύλες NOR), αντιστάσεις, και διακόπτη SPDT. Συνδέστε LED's γιά να παρακολουθείτε την είσοδο in, την κατάσταση της FSM, και τις εξόδους A, B, C, και D, όπως δείχνει το σχήµα. Πριν φτάσετε στο εργαστήριο, κάντε ένα πλήρες σχεδιάγραµµα συνδεσµολογίας, περιλαµβανοµένων και όλων των διακοπτών, αντιστάσεων, LED's, και της τροφοδοσίας. Επίσης, γράψτε στο χαρτί σας την κωδικοποίηση του µηνύµατος "ABACADACABADACAC" σύµφωνα µε τον κώδικά µας µεταβλητού µήκους. Επίσης, αποκωδικοποιήστε το µήνυµα που περιέχουν τα bits "1001001110111011001100" σύµφωνα πάντα µε τον ίδιο κώδικα. Στο εργαστήριο, κατασκευάστε το κύκλωµα, αρχικοποιήστε το σωστά (reset=1 και in=0 και ακµή ρολογιού), και στη συνέχεια ελέγξτε τη σωστή λειτουργία του στέλνοντάς του τα δύο παραπάνω µηνύµατα (ή όσο κοµάτι από αυτά αντέξετε) και βλέποντας αν τα λαµβάνει σωστά, δηλαδή αν ανάβει η σωστή LED µία φορά γιά κάθε γράµµα-σύµβολο. Up to the Home Page of CS-120 copyright University of Crete, Greece. Last updated: 16 Dec. 2003, by M. Katevenis.