Κεφάλαιο 5 H σηµειωτική διάσταση της µετάφρασης · γλώσσα µαζί µε άλλους κώδικες, όπως το θέατρο και
Κώδικες SECDED
description
Transcript of Κώδικες SECDED
ΗΡΥ 101
Λογική Σχεδίαση
Συμπληρωματικό Υλικό:
Κώδικες SECDED
Έκδοση 2.0
Χειμερινό Εξάμηνο 2013
Καθ. Απόστολος Δόλλας
Εργαστήριο Μικροεπεξεργαστών και Υλικού Σχολή ΗΜΜΥ
Πολυτεχνείο Κρήτης
1.0 Κώδικες Ανίχνευσης Λαθών (SEC, SECDED)
1.1 Κώδικες SEC (Single Error Correction)
Η ανάγκη για κώδικες διόρθωσης λαθών έγκειται στο ότι μπορεί κατά την μετάδοση κάποιας πληροφορίας να υπάρχουν λάθη. Θεωρώντας συμβατικά ότι μόνο ένα λάθος μπορεί να συμβεί την φορά, θέλουμε να μπορούμε να το διορθώσουμε.
Οι κώδικες SEC (Hamming) βασίζονται στην ομαδοποίηση των Bits της πληροφορίας και την εύρεση της συνάρτησης ισοτιμίας (parity, XOR) για κάθε ομάδα. Για παράδειγμα, αν έχουμε τον δυαδικό αριθμό 01001101, η XOR των 8 bit θα είναι 0 επειδή είναι άρτιος ο αριθμός των 1 στην ομάδα των 8 Bits.
XOR 0 1 0 0 1 1 0 1 0
n
a3 a2 a1 a0 k
Στην γενική περίπτωση, αν έχουμε n bits πληροφορίας που μεταδίδουμε και k bits ελέγχου θα ισχύει ότι
k = log2(n+k+1) όπου n είναι τα bit της πληροφορίας που μεταδίδουμε k είναι τα bit του κώδικα για τον εντοπισμό θέσης λάθους 1 είναι μία θέση (η 0…0) που αντιστοιχεί σε μη σφάλμα κατά τη μετάδοση Bοήθημα: Αν μας δοθούν n bits πληροφορίας και πρέπει να βρούμε τον αριθμό των bits ελέγχου k, ένας εύκολος τρόπος είναι ο εξής: Υποθέτουμε ότι k = log2(n) , κάτι που είναι πολύ εύκολο γιατί ξέρουμε ήδη καλά τις δυνάμεις του 2. Κατόπιν επιβεβαιώνουμε ότι το k που βρήκαμε είναι σωστό, με το να κάνουμε την σύγκριση του 2k με το (n+k+1). Αν είναι όντως μεγαλύτερο το 2k τότε η υπόθεσή μας είναι σωστή και κρατάμε το κ. Διαφορετικά απλά αυξάνουμε το k κατά 1 και θα ξέρουμε ότι το νέο k είναι σίγουρα το σωστό. Παράδειγμα: Αν n = 1024 πόσα Bits χρειαζόμαστε για να έχουμε κώδικα SEC;
n = 1024
+ 1
+ k = 10 (Αρχική υπόθεση για k είναι το log2(1024) = 10 ‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐ 1035
Αλλά 210 = 1024 < 1035, οπότε 10 bit δε φτάνουν για να διευθυνσιοδοτήσουμε και τους κώδικες, άρα χρειαζόμαστε 11 Bits. Επιβεβαίωση 211= 2048 > 1036 που προκύπτει από το (1024+1+11). Οι θέσεις των k bits είναι πάντοτε στις αντίστοιχες δυνάμεις του 2: 0 1 2 3 4 5 6 7 k0 k1 a0 k2 a1 a2 a3 Βλέπουμε στο παράδειγμα ότι τα bits k0 – k2 είναι στις θέσεις 1,2, και 4 που αντιστοιχούν σε δυνάμεις του 2. Οι συναρτήσεις που υπολογίζουν τα k bits είναι ομάδες XOR από τα bits poy θέλουμε να μεταδόσουμε – προσέχουμε ότι ποτέ δεν έχουμε κάποιο k σαν είσοδο στις XOR (δηλαδή ⊕ . k0 = a0 ⊕a1 ⊕a3 (κάθε 2o bit)
k1 = a0 ⊕a2 ⊕a3 (ομάδες των 2 bit, 2 αφήνουμε – 2 παίρνουμε κ.λ.π.)
k2 = a1 ⊕a2 ⊕ a3 (ομάδες των 2 bit, 4 αφήνουμε – 4 παίρνουμε κ.λ.π.)
Διαδικασία
Υπολογίζουμε τα bits k0 – k2. Μεταδίδουμε ολόκληρη τη λέξη, μαζί με τα k bits. Ο δέκτης ξαναϋπολογίζει τα k bits. Κατόπιν κάνουμε τη συνάρτηση XOR μεταξύ των k bits που μεταδόθηκαν και των k bits που υπολογίστηκαν. Εφόσον υπάρχει ακριβώς 1 bit λάθους στη μετάδοση, το αποτέλεσμα των XOR είναι η θέση του λάθους. Εάν δεν υπάρχει λάθος το αποτέλεσμα είναι “000”.
Παράδειγμα:
a3 a2 a1 a0 1 1 0 0 0 1 0 0 0 0 1 1 0 1 2 3 4 5 6 7 k0 k1 a0 k2 a1 a2 a3 Υπολογίζουμε τα k bits: k0 = 1 k1 = 0 k2 = 0
Μεταδίδουμε την λέξη – ας υποθέσουμε ότι έγινε λάθος στο 5ο Bit, το a1, και ελήφθη το ακόλουθο:
error k0 k1 a0 k2 a1 a2 a3 1 0 0 0 1 1 1
Ξαναδείχνουμε τα k bits που αρχικά υπολογίσαμε και μεταδόσαμε, και τα k’ bits που υπολογίσαμε στην λέξη που λάβαμε:
k0 = 1 k0’ = 0
k1 = 0 k1’ = 0
k2 = 0 k2’ = 1
Η XOR των k0⊕k0’, k1⊕k1’, k2⊕k2’ δίνει 101 δηλαδή την διεύθυνση του bit που είναι λάθος. 1.2 Κώδικες SECDED (Single Error Correction Double Error Detection)
Οι κώδικες SECDED μας προσφέρουν μία φθηνή λύση για να εντπίσουμε κατά πόσον υπάρχει και δεύτερο bit πληροφορίας που αλλοιώθηκε, χωρίς όμως να μπορούμε να εντοπίσουμε ποια είναι αυτά τα δύο bits.
Για να γίνει ο κώδικας SEC σε SECDED προσθέτουμε και 1 bit parity σε ολόκληρη τη λέξη. Εάν αυτό το bit (υπολογισμένο σε σχέση με μεταδομένο) δείχνει ότι δεν υπάρχει λάθος αλλά τα k bits δείχνουν ότι υπάρχει, τότε έχουμε διπλό λάθος.
ΚΩΔΙΚΕΣ SECDED ‐ ΑΣΚΗΣΕΙΣ
Άσκηση 1
(α) Έχουμε μια λέξη q3q2q1q0 = 0101. Υπολογίστε τα bits k0k1k2 για κώδικα SEC. Κατόπιν δείξετε τι θα λάβουμε στον δέκτη αν υπάρχει σφάλμα στο bit q1 και πως θα το εντοπίσουμε.
(β) Τι θα χρειαζόταν για να γίνει ο κώδικας SECDED; Επεκτείνετε την παραπάνω άσκηση σε κώδικα SECDED (μην ξαναδείξετε ότι έχετε ήδη κάνει, μόνο όσα είναι επί πλέον).
(γ) Βρέστε τον αριθμό Bits ελέγχου αν η χρήσιμη πληροφορία δεν είναι 4 bits αλλά 2037.
Άσκηση 2
Αποδείξετε ότι το βοήθημα για τον υπολογισμό του αριθμού k των bits ελέγχου όντως ισχύει.
Άσκηση 3
Πόσα bits ελέγχου χρειαζόμαστε για να μεταδόσουμε με κώδικα SEC μία λέξη 505 bits; Σε ποιές θέσεις βρίσκονται αυτά; Η αρίθμηση ξεκινάει από την θέση 0.
Άσκηση 4
Θα μπορούσε ποτέ η ισοτιμία (parity) ολόκληρης μία λέξης μετά την μετάδοση να είναι ίδια με την αρχική αν δεν έχουμε κανένα λάθος; Αν έχουμε ένα λάθος; Αν έχουμε δύο λάθη; Αποδείξετε ότι η μέθοδος DED για να γίνει ο κώδικας SED σε SECDED είναι ορθή.