基于PCI總線(xiàn)的HDLC通信卡的設(shè)計(jì)與實(shí)現(xiàn)
3.2 HDLC通信模塊實(shí)現(xiàn)
HDLC的標(biāo)準(zhǔn)幀格式如表1所示,但HDLC也有由用戶(hù)定義的非標(biāo)準(zhǔn)幀格式,常用于點(diǎn)對(duì)點(diǎn)的通信中。在非標(biāo)準(zhǔn)格式中,地址段、控制段、CRC段是可選的。本通信卡主要用于點(diǎn)對(duì)點(diǎn)通信,且采用簡(jiǎn)化的HDLC協(xié)議,即省略地址段、控制段、CRC段。其中CRC校驗(yàn)功能由上位機(jī)軟件實(shí)現(xiàn)。
HDLC是面向位的,在待傳數(shù)據(jù)中出現(xiàn)與標(biāo)志字一樣的數(shù)據(jù)時(shí),如果不進(jìn)行處理,就會(huì)被誤認(rèn)為是幀邊界。為了避免此錯(cuò)誤,HDLC規(guī)定采用“零比特填充法”使一幀中兩個(gè)字段之間不會(huì)出現(xiàn)6個(gè)連續(xù)1。具體做法是:發(fā)送數(shù)據(jù)時(shí),先進(jìn)行幀數(shù)據(jù)掃描,只要發(fā)現(xiàn)有連續(xù)的5個(gè)1,則立即插入一個(gè)0,以此保證數(shù)據(jù)中不會(huì)出現(xiàn)連續(xù)6個(gè)1;接收數(shù)據(jù)時(shí),先找到3E字段以確定幀的邊界,接著對(duì)其后的比特流進(jìn)行掃描,每發(fā)現(xiàn)5個(gè)連續(xù)1就將其后的0刪除,以此保證所傳比特流中不出現(xiàn)幀標(biāo)志,直到幀尾標(biāo)志出現(xiàn),從而實(shí)現(xiàn)HDLC在鏈路層的“透明傳輸”,保證發(fā)送端可以發(fā)送任意組合的比特流信息,而接收端都能準(zhǔn)確無(wú)誤地接收到。
FPGA中實(shí)現(xiàn)的簡(jiǎn)化HDLC模塊總體框圖如圖3所示。讀寫(xiě)FIFO采用Ahera公司的LPM功能模塊實(shí)現(xiàn),大。小可根據(jù)需要設(shè)置,本通信卡設(shè)為512x32 bit。發(fā)送數(shù)據(jù)舅時(shí),寫(xiě)FIFO接收Pc數(shù)據(jù)(總線(xiàn)寬度為32 bit),首先進(jìn)行曼并串轉(zhuǎn)換,再進(jìn)行插“O”操作,最后插入標(biāo)志字按位發(fā)送出去,輸出數(shù)據(jù)Tx和輸出時(shí)鐘Tx_Clk保持同步,整個(gè)過(guò)程由發(fā)送控制狀態(tài)機(jī)進(jìn)行控制。接收數(shù)據(jù)與發(fā)送數(shù)據(jù)過(guò)程相反,由接收控制狀態(tài)機(jī)進(jìn)行控制。其中輸入、輸出時(shí)鐘可以設(shè)置為68 kHz或者768 kHz。
發(fā)送控制狀態(tài)機(jī)和接收控制狀態(tài)機(jī)分別如圖4、圖5所示。發(fā)送數(shù)據(jù)時(shí),發(fā)送狀態(tài)機(jī)首先判斷寫(xiě)FIFO是否有數(shù)據(jù),若有數(shù)據(jù),則插入幀頭,依次讀取FIFO數(shù)據(jù),完成插“0”操作和插幀尾操作,并按照從低到高的順序發(fā)送數(shù)據(jù),直至寫(xiě)FIFO為空。接收數(shù)據(jù)時(shí),首先搜索幀頭,為了防止接收到連續(xù)兩個(gè)標(biāo)志字而把后一個(gè)標(biāo)志字誤認(rèn)為是數(shù)據(jù),設(shè)置搜索數(shù)據(jù)狀態(tài)(Data_find),若不是標(biāo)志字,則作為數(shù)據(jù)進(jìn)行去“0”操作,完成串并轉(zhuǎn)換和幀尾檢測(cè),并將接收到的數(shù)據(jù)以32 bit為單位,逐次寫(xiě)入讀FIFO中。當(dāng)一幀傳輸結(jié)束,采用中斷信號(hào)通知上位機(jī)及時(shí)讀取數(shù)據(jù)。一旦檢測(cè)到丟棄序列(0x7F),則結(jié)束對(duì)此幀數(shù)據(jù)的處理,并清空讀FIFO里的數(shù)據(jù),同時(shí)上報(bào)PC機(jī)錯(cuò)誤信息,請(qǐng)求發(fā)送方重新發(fā)送數(shù)據(jù)。
3.3 功能時(shí)序圖
圖6、圖7分別給出了利用Quartus II的在線(xiàn)邏輯分析儀SignalTap II獲取的PCI寫(xiě)數(shù)據(jù)、HDLC數(shù)據(jù)發(fā)送和HDLC接收、PCI讀數(shù)據(jù)的時(shí)序波形圖。從圖中可以看到,HDLC模塊正確實(shí)現(xiàn)了插“O”和去“0”操作,并能與PCI9054進(jìn)行正確的數(shù)據(jù)收發(fā)。
本文采用PCI總線(xiàn)控制器PCI9054和FPGA技術(shù)設(shè)計(jì)實(shí)現(xiàn)了一款符合簡(jiǎn)化HDLC協(xié)議的通信卡,并已成功應(yīng)用于實(shí)際工作中。實(shí)際應(yīng)用表明收發(fā)數(shù)據(jù)正確,可以滿(mǎn)足高速數(shù)據(jù)通信要求。同時(shí),該通信卡設(shè)計(jì)中預(yù)留了一定的擴(kuò)展空間,能夠根據(jù)需要進(jìn)行功能拓展。本通信卡可應(yīng)用于信號(hào)處理、數(shù)據(jù)通信等場(chǎng)合,對(duì)PCI總線(xiàn)應(yīng)用設(shè)計(jì)有一定的參考價(jià)值。
實(shí)驗(yàn)結(jié)果表明,基于ARM9和CPLD硬件平臺(tái),在嵌入式Linux操作系統(tǒng)下,系統(tǒng)能夠?qū)崿F(xiàn)等速跟蹤、位置定點(diǎn)和正弦跟蹤等功能,滿(mǎn)足控制實(shí)時(shí)性要求,可實(shí)現(xiàn)伺服控制。系統(tǒng)體積小、成本低、功耗小、接口豐富、便于開(kāi)發(fā),且Linux系統(tǒng)具有很好的文件管理功能,有助于實(shí)驗(yàn)數(shù)據(jù)的存儲(chǔ)和導(dǎo)出,便于實(shí)驗(yàn)結(jié)果分析。系統(tǒng)進(jìn)一步完善后可將控制程序設(shè)計(jì)成圖形界面,利用觸摸屏輸入和顯示伺服控制結(jié)果,則可實(shí)現(xiàn)控制結(jié)果實(shí)時(shí)顯示,可視化效果好,整個(gè)系統(tǒng)可脫離計(jì)算機(jī)工作,具有廣泛的應(yīng)用價(jià)值。
評(píng)論