Κώδικες SECDED

4
ΗΡΥ 101 Λογική Σχεδίαση Συμπληρωματικό Υλικό: Κώδικες SECDED Έκδοση 2.0 Χειμερινό Εξάμηνο 2013 Καθ. Απόστολος Δόλλας Εργαστήριο Μικροεπεξεργαστών και Υλικού Σχολή ΗΜΜΥ Πολυτεχνείο Κρήτης

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 είναι ορθή.