错误检测的奇偶校验方法
許多系統(tǒng)都使用一個奇偶校驗位作為錯誤檢測的手段,比如我們最常用的串口傳輸就使用了這種校驗方法。
一個奇偶校驗位附加到多位數(shù)據(jù)中,使得這組數(shù)中的1的個數(shù)總是偶數(shù)或總是奇數(shù)。其中,一個偶校驗位使得數(shù)據(jù)中1的總數(shù)為偶數(shù),而一個奇校驗位使得1的總數(shù)為奇數(shù)。
對于一個給定的系統(tǒng),要么運行偶校驗,要么運行奇校驗,而不能同時使用這兩者。
比如在進行串口傳輸時,我們要么定義數(shù)據(jù)為偶校驗,要么定義成奇校驗。對于所接受的每一個多位數(shù)據(jù)做檢查時,如果是偶校驗,檢查發(fā)現(xiàn)收到的數(shù)據(jù)不是偶數(shù)個1,則說明數(shù)據(jù)發(fā)生了錯誤。反之,如果是奇校驗,如果檢查發(fā)現(xiàn)收到的數(shù)據(jù)不是奇數(shù)個1,則也說明數(shù)據(jù)發(fā)生了錯誤。
作為對奇偶校驗位怎么附加到數(shù)據(jù)編碼中的一個說明,下表列出了每個BCD數(shù)的奇偶校驗位。
奇偶校驗位可以附加到數(shù)碼的開頭或結(jié)尾,這取決于系統(tǒng)的設計。注意:1的總數(shù),包含奇偶校驗位上的1,對于偶校驗總是偶數(shù),對于奇校驗總是奇數(shù)。?
奇偶校驗位提供了單個位錯誤的檢測機制(或者說是任意奇數(shù)個錯誤,但這種概率很低),但是不能檢測一個數(shù)據(jù)中的兩個錯誤。
比如,我們希望傳輸BCD編碼0101(奇偶校驗可以應用于任何位數(shù),這里使用4位作為說明)。
如果我們想用偶校驗方式來傳輸,則所傳輸?shù)目倲?shù)碼為00101,如果接受系統(tǒng)只檢測到奇數(shù)個1,那么說明數(shù)據(jù)接收錯誤:
如果我們想用奇校驗方式來傳輸,則所傳輸?shù)目倲?shù)碼為10101,如果接受系統(tǒng)只檢測到偶數(shù)個1,那么說明數(shù)據(jù)接收錯誤:
那么問題來了,接收系統(tǒng)是通過什么電路來檢測數(shù)據(jù)含有偶數(shù)個或者奇數(shù)個1呢?實際上實現(xiàn)方式很簡單:就是博主在verilog專欄內(nèi)中介紹的單目運算符(位異或^)。
位異或的結(jié)果為1,則表明一個多位數(shù)據(jù)中含有奇數(shù)個1.
位異或的結(jié)果為0,則表明一個多位數(shù)據(jù)中含有偶數(shù)個1.
確定發(fā)送端的奇偶校驗位是發(fā)送0還是1也是如此原理~
總結(jié)
以上是生活随笔為你收集整理的错误检测的奇偶校验方法的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: loj121-动态图连通性
- 下一篇: 魔力宝贝服务器没响应连接超时,腾讯内容开