Esercizio 29codice di Hamming su 16 bit di dati
In questa pagina 7
Testo (compitino di Architettura degli Elaboratori, UniPD, del 17 novembre 2015, quesito 2, e esempio di compitino sulla prima parte, a.a. 2015-16, quesito 2). Si consideri un codice di correzione di Hamming su 16 bit. Dire quale sequenza di bit è memorizzata in memoria se si devono memorizzare i seguenti 16 bit di dati:
A. 0100111000101011, con le opzioni: a) 010011100010101111110; b) 111110110100011010010; c) 110101000111001001111; d) 010010110001011011111; e) nessuna delle precedenti.
B. 0101101011101010, con le opzioni: a) 110101110000001010111; b) 010111110101001010101; c) 010010000111011001011; d) 010111010111001011010; e) nessuna delle precedenti.
Inoltre: C. se leggendo dalla memoria la parola A si trova il bit in posizione 13 invertito, come lo si scopre e come lo si corregge?
Teoria: Codifiche binarie e informazione non numericaBit, byte e multipli (potenze di 2 e di 10); codici BCD e Gray; caratteri ASCII, Unicode e UTF-8; ordine dei byte (little e big endian); bit di parità e codice di Hamming per rilevare e correggere errori.Codifiche binarie e informazione non numerica →, Memoria principale a semiconduttoreCella di memoria e operazioni; RAM dinamica (condensatore, refresh) e statica (flip-flop), confronto; ROM, PROM, EPROM, EEPROM e flash; organizzazione dei chip e dei moduli con calcolo di linee di indirizzo e numero di chip; DRAM sincrona e DDR; errori e codici di correzione.Memoria principale a semiconduttore →. Esercizi analoghi: Esercizio 3 · bit di controllo di Hamming per un byte, Esercizio 6 · codice SEC per una parola di 16 bit.
Quanti bit di controllo
Per bit di dati servono bit di controllo con
Per : con è falso; con è vero. Quindi e la parola è di bit.
Disposizione dei bit
- Le posizioni sono numerate da 1 (la meno significativa, a destra) a 21 (a sinistra).
- I bit di controllo stanno nelle posizioni potenza di 2: 1, 2, 4, 8, 16.
- I 16 bit di dati occupano le altre 16 posizioni (3, 5, 6, 7, 9, 10, 11, 12, 13, 14, 15, 17, 18, 19, 20, 21), con il primo bit del dato (a sinistra) nella posizione più alta, 21 (è la disposizione per cui i risultati coincidono con le opzioni dei temi).
- Il bit di controllo in posizione è lo XOR (parità pari) dei bit di dati le cui posizioni, scritte in binario, hanno il bit uguale a 1.
A. Dati 0100111000101011
Posizioni da 21 a 1 (le caselle sono i bit di controllo, da calcolare):
| posizione | 21 | 20 | 19 | 18 | 17 | 16 | 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| contenuto | 0 | 1 | 0 | 0 | 1 | 1 | 1 | 0 | 0 | 0 | 1 | 0 | 1 | 0 | 1 | 1 |
Ogni bit di controllo copre le posizioni con quel bit a 1 nel numero di posizione:
| bit | posizioni di dati coperte | valori | XOR (parità pari) |
|---|---|---|---|
| 3, 5, 7, 9, 11, 13, 15, 17, 19, 21 | 1, 1, 1, 0, 0, 0, 1, 1, 0, 0 | 5 uni → 1 | |
| 3, 6, 7, 10, 11, 14, 15, 18, 19 | 1, 0, 1, 1, 0, 1, 1, 0, 0 | 5 uni → 1 | |
| 5, 6, 7, 12, 13, 14, 15, 20, 21 | 1, 0, 1, 0, 0, 1, 1, 1, 0 | 5 uni → 1 | |
| 9, 10, 11, 12, 13, 14, 15 | 0, 1, 0, 0, 0, 1, 1 | 3 uni → 1 | |
| 17, 18, 19, 20, 21 | 1, 0, 0, 1, 0 | 2 uni → 0 |
Parola memorizzata (posizione 21 a sinistra):
| posizione | 21 | 20 | 19 | 18 | 17 | 16 | 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| bit | 0 | 1 | 0 | 0 | 1 | 0 | 1 | 1 | 0 | 0 | 0 | 1 | 0 | 1 | 1 | 0 | 1 | 1 | 1 | 1 | 1 |
B. Dati 0101101011101010
Con lo stesso procedimento i dati occupano le posizioni 21...3 saltando le potenze di 2; i bit di controllo risultano , , , , (rispettivamente: parità dei bit 0,1,1,0,1,0,0,1,0,0, 0,0,1,1,1,1,0,1,0, 1,0,1,1,0,1,0,1,0, 0,1,1,1,0,1,0, 1,1,0,1,0). Parola memorizzata:
C. Errore in lettura
Se si legge la parola A con il bit 13 invertito, si ricalcolano le cinque parità sulla parola ricevuta (ogni parità comprende il bit di controllo stesso): ciascun gruppo dà se è giusto e se contiene l'errore. Il numero binario formato dai cinque risultati è la sindrome:
La sindrome è la posizione del bit sbagliato: basta invertire il bit 13 per correggerlo. Se l'errore fosse in un bit di controllo (per esempio la posizione 8), la sindrome sarebbe 8 e si invertirebbe il bit di controllo; sindrome significa nessun errore (con un solo errore alla volta).
Verifica con un programma
def hamming(dati):
"""Codice SEC: dati MSB per primo, posizioni 1..n con il bit 1 a destra, check bit nelle potenze di 2."""
m = len(dati)
k = 0
while 2 ** k < m + k + 1:
k += 1
n = m + k
pos_dati = [p for p in range(n, 0, -1) if p & (p - 1)] # posizioni non potenza di 2, dall'alto
parola = {p: int(b) for p, b in zip(pos_dati, dati)}
for i in range(k):
p = 2 ** i
parola[p] = sum(v for q, v in parola.items() if q & p and q != p and q & (q - 1)) % 2
return parola, n
def stringa(parola, n):
return "".join(str(parola[p]) for p in range(n, 0, -1))
def sindrome(parola, n):
s, i = 0, 0
while 2 ** i <= n:
s |= (sum(v for q, v in parola.items() if q & 2 ** i) % 2) << i
i += 1
return s
pa, n = hamming("0100111000101011")
print(stringa(pa, n)) # 010010110001011011111
pb, _ = hamming("0101101011101010")
print(stringa(pb, n)) # 010111010111001011010
print(sindrome(pa, n)) # 0: parola corretta
pa[13] ^= 1 # errore nel bit 13
print(sindrome(pa, n)) # 13: posizione del bit errato
pa[13] ^= 1
pa[8] ^= 1 # errore in un bit di controllo
print(sindrome(pa, n)) # 8Errori comuni
- Sbagliare il numero di bit di controllo: la condizione è (con si avrebbe , falso): per 16 bit di dati sono 5, non 4.
- Mettere i bit di controllo in fondo o in testa invece che nelle posizioni potenza di 2.
- Numerare le posizioni da sinistra: le posizioni (e i gruppi di parità) si contano da 1 a destra; in una stringa scritta con la posizione 21 a sinistra il bit è l'ultimo a destra.
- Usare parità dispari invece di pari (le opzioni sono tutte a parità pari).
- Dimenticare che ogni bit di controllo copre solo le posizioni con il proprio bit a 1.
Versione ripasso
Compitino del 17 novembre 2015 e esempio di compitino a.a. 2015-16: Hamming su 16 bit di dati. Teoria: Codifiche binarie e informazione non numericaBit, byte e multipli (potenze di 2 e di 10); codici BCD e Gray; caratteri ASCII, Unicode e UTF-8; ordine dei byte (little e big endian); bit di parità e codice di Hamming per rilevare e correggere errori.Codifiche binarie e informazione non numerica →.
Bit di controllo: ; → , parola di 21 bit. Posizioni numerate da 1 (a destra) a 21; controllo in ; dati nelle altre, il primo bit del dato nella posizione 21.
Parità: il controllo in posizione è lo XOR (parità pari) dei dati con il bit della posizione a 1.
- A.
0100111000101011→ , , , , →010010110001011011111(d). - B.
0101101011101010→ , , , , →010111010111001011010(d).
Correzione: si ricalcolano le parità sulla parola ricevuta; la sindrome (numero formato dai gruppi errati) è la posizione del bit sbagliato (errore nel bit 13 → ); sindrome 0: nessun errore.
Errori comuni: ; controllo non nelle potenze di 2; posizioni numerate da sinistra; parità dispari; copertura di tutte le posizioni invece di quelle con il proprio bit a 1.