用FPGA實(shí)現(xiàn)數(shù)據(jù)遠(yuǎn)距離的高精度傳輸
1 意義
簡(jiǎn)單的多機(jī)間數(shù)據(jù)通信在我們的設(shè)計(jì)中很普遍,一般情況下數(shù)據(jù)傳輸距離很短,不會(huì)超過(guò)百十m,因此僅采用雙絞線加RS232或RS485標(biāo)準(zhǔn)就可以有效傳輸。但有時(shí)多機(jī)之間的距離也會(huì)很遠(yuǎn),如我們所設(shè)計(jì)的一個(gè)氣象項(xiàng)目,就要求子站遍布在基站1km范圍內(nèi)。因此在考慮成本、不增加很多設(shè)備的前提下,有效防止噪聲干擾,保證子站與基站的數(shù)據(jù)高精確傳輸就很重要。
通常多機(jī)短距通信中,可以在收發(fā)端加入奇校驗(yàn)、累加和校驗(yàn)等出錯(cuò)就重發(fā)的防噪聲措施;但以上措施都只能檢錯(cuò),不能糾錯(cuò),也就是說(shuō)傳輸過(guò)程中不能容錯(cuò)。在遠(yuǎn)距離、干擾大、出錯(cuò)概率非常高的情況下,單純的出錯(cuò)就重發(fā)措施會(huì)失去工作效率和意義。因此,我們需要一種能容錯(cuò)的數(shù)據(jù)傳輸方式,就要對(duì)數(shù)據(jù)編碼。因此,不同傳輸環(huán)境的噪聲性質(zhì)不相同,對(duì)應(yīng)的編碼方式也不一樣,所以我們?cè)O(shè)計(jì)編碼時(shí)強(qiáng)調(diào)更多位的糾錯(cuò)冗余,以適合較多的環(huán)境,但相應(yīng)地就降低了傳輸速率。另外,出于通用性和簡(jiǎn)易性的考慮,我們的設(shè)計(jì)應(yīng)可直接加載于原有的有線或無(wú)線通信系統(tǒng)上,除數(shù)據(jù)連線外,不需對(duì)原有系統(tǒng)做任何改變。
在此,我們采用了交錯(cuò)編碼技術(shù)來(lái)增加數(shù)據(jù)傳輸過(guò)程的容錯(cuò)能力
。編解碼設(shè)備插入加載到通信系統(tǒng)原來(lái)的數(shù)據(jù)收發(fā)端口。因此,微處理器要發(fā)送的數(shù)據(jù)由原先的直接經(jīng)發(fā)送端(無(wú)線通信為調(diào)制器和發(fā)送器)發(fā)送,變?yōu)橄冉?jīng)編碼設(shè)備編碼,然后再經(jīng)原有的發(fā)送端發(fā)送;同理,接收端(無(wú)線通信為接收器和解調(diào)器)收到信息,經(jīng)解碼設(shè)備解碼出數(shù)據(jù),再傳送給微處理器。
2 設(shè)計(jì)方案
為適應(yīng)多種信道,要求我們的設(shè)計(jì)能同時(shí)糾隨機(jī)錯(cuò)和突發(fā)錯(cuò),并且能有多位的糾錯(cuò)冗余。因此,我們基于常用的卷積碼和循環(huán)碼特性,自定義一種簡(jiǎn)單的線性分組碼作為糾錯(cuò)編碼,以便我們刻意去提高糾錯(cuò)的位數(shù)。同時(shí)我們采用交錯(cuò)發(fā)送技術(shù)來(lái)提高糾突發(fā)錯(cuò)能力,并利用FPGA去實(shí)現(xiàn)該方案。
(1)方案的應(yīng)用范圍
我們所設(shè)計(jì)的方案用于遠(yuǎn)距離的多機(jī)通信。根據(jù)實(shí)際經(jīng)驗(yàn),本方案默認(rèn)微處理器收發(fā)的數(shù)據(jù)為8位并行數(shù)據(jù)+1位同步時(shí)鐘,因此提供8位數(shù)據(jù)線和1位同步線。對(duì)于串口,則可增加串行轉(zhuǎn)換的移位寄存器來(lái)轉(zhuǎn)化。
(2)方案的實(shí)現(xiàn)
方案的實(shí)現(xiàn)如圖1所示。
?、僭谧诱尽⒒镜氖瞻l(fā)端口與微處理器之間分別加入相應(yīng)的編解碼設(shè)備,使得子站與基站間傳輸?shù)臄?shù)據(jù)先經(jīng)過(guò)編解碼再傳輸,以達(dá)到增強(qiáng)容錯(cuò)的能力。
②用幀結(jié)構(gòu)實(shí)現(xiàn)碼字的交錯(cuò)。
?、圻h(yuǎn)距離傳輸,收發(fā)端最好選用同步方式,但這不是本設(shè)計(jì)的內(nèi)容,不予以討論。
3)基于精度,對(duì)數(shù)據(jù)的每一位單獨(dú)編碼
實(shí)際應(yīng)用中,對(duì)數(shù)據(jù)精確的定義并非數(shù)據(jù)的完全重合,而是要求某一個(gè)精度。完全重合只對(duì)用做標(biāo)志的數(shù)據(jù)有意義,對(duì)單純計(jì)算用的數(shù)據(jù)并沒有必要?;诰纫?,顯然一個(gè)數(shù)據(jù)信息的高位對(duì)精度影響遠(yuǎn)比低位大(如:FFH,當(dāng)最高位出錯(cuò)變?yōu)?FH時(shí),精度變化最大,而最低位出錯(cuò)變?yōu)镕EH時(shí),精度變化最小)。因此,我們并沒有對(duì)8位數(shù)據(jù)信息進(jìn)行整體編碼,而是逐位分開進(jìn)行編碼:高數(shù)據(jù)位,采用更長(zhǎng)的編碼,以保證更高的正確率;低數(shù)據(jù)位,則可采用較短的編碼,兼顧效率和設(shè)備容量。具體編碼如表1所列。
對(duì)8個(gè)位遠(yuǎn)逐位編碼,8個(gè)生成矩陣為1維矢量。因此用FPGA實(shí)現(xiàn)編碼時(shí),采用查表法更方便,如表2所列。
之所以選用010等作為碼字,是因?yàn)?1相間在組合為幀發(fā)送時(shí),可以減少連0或連1的出現(xiàn)概率。
(4)幀結(jié)構(gòu)實(shí)現(xiàn)交錯(cuò)發(fā)送技術(shù)
為糾突發(fā)錯(cuò),碼字要按交錯(cuò)格式發(fā)送。因此,用幀實(shí)現(xiàn)碼字的交錯(cuò),數(shù)據(jù)發(fā)端按幀發(fā)送,數(shù)據(jù)收端按幀解碼。8個(gè)碼字共48位(6字節(jié)),加幀頭2字節(jié),所以,幀為8字節(jié)。為說(shuō)明幀結(jié)構(gòu),暫以字母表示碼字各位:
碼字0:a2a1a0; 碼字3:d4d3d2ed1d0;
碼字1:b2b1b0; 碼字4:e6e5e4e3e2e1e0;
碼字2:c4c3c2c1c0; 碼字5:f6f5f4f3f2f1f0;
碼字6:g8g7g6g5g4g3g2g1g0;
碼字7:h8h7h6h5h4h3h2h1h0;
幀結(jié)構(gòu)如表3所列。
利用幀頭1和幀頭2的重合特點(diǎn)來(lái)檢測(cè)幀頭,因?yàn)榇a字交錯(cuò)發(fā)送時(shí)相鄰兩字節(jié)對(duì)應(yīng)位基本01相間的。由表3可得,第3字節(jié)到第8字節(jié),相鄰字節(jié)至少有6位不相同。因此可借用漢明距的糾錯(cuò)思想,認(rèn)為幀頭1和2不重合的位在2位以內(nèi),則表示正確收到幀頭。
3 FPGA實(shí)現(xiàn)設(shè)計(jì)
(1)單工條件下的實(shí)現(xiàn)
用兩塊FPGA分別實(shí)現(xiàn)編碼器和解碼器。按前面的編解碼原理,編碼器接收子站8位信息和1位同步,輸出8字節(jié)
評(píng)論