文獻(xiàn)標(biāo)識(shí)碼: A
文章編號(hào): 0258-7998(2012)08-0030-03
PCI總線及在其基礎(chǔ)上發(fā)展起來(lái)的CPCI總線,,在工業(yè)控制,、數(shù)據(jù)采集、信息通信,、航空航天等領(lǐng)域得到了廣泛的應(yīng)用,。高級(jí)數(shù)據(jù)鏈路控制(HDLC)是一個(gè)在同步網(wǎng)上傳輸數(shù)據(jù)并面向位的數(shù)據(jù)鏈路層協(xié)議,具有透明傳輸、 可靠性高,、傳輸效率高以及靈活性高等特點(diǎn),,可以實(shí)現(xiàn)點(diǎn)到點(diǎn)或者點(diǎn)到多點(diǎn)的數(shù)據(jù)傳輸,在路由器,、網(wǎng)關(guān)等通信或者網(wǎng)絡(luò)設(shè)備中應(yīng)用廣泛[1],。為了滿足實(shí)際工作的需要,并為后續(xù)系統(tǒng)升級(jí)提供拓展空間,,本文設(shè)計(jì)并實(shí)現(xiàn)了一款基于PCI總線,、符合HDLC協(xié)議的通信卡,以滿足高速數(shù)據(jù)傳輸?shù)男枰?。通信卡采用PCI總線控制器實(shí)現(xiàn)PCI總線接口設(shè)計(jì),,采用FPGA實(shí)現(xiàn)HDLC通信協(xié)議及接口邏輯設(shè)計(jì),采用RS-422標(biāo)準(zhǔn)對(duì)外通信,,實(shí)現(xiàn)與外系統(tǒng)的互連,。
1 HDLC通信卡總體方案
通信卡主要采用PCI9054和FPGA構(gòu)成硬件系統(tǒng),其硬件結(jié)構(gòu)圖如圖1所示,。數(shù)據(jù)傳輸流程為:接收數(shù)據(jù)時(shí),,通過RS-422接口芯片接收數(shù)據(jù),數(shù)據(jù)格式滿足簡(jiǎn)化的HDLC協(xié)議,;通過FPGA內(nèi)部的HDLC模塊進(jìn)行數(shù)據(jù)接收和串并轉(zhuǎn)換,;然后在本地控制邏輯的控制下通過PCI9054以DMA方式傳給上位機(jī),實(shí)現(xiàn)數(shù)據(jù)的接收和判讀,;發(fā)送數(shù)據(jù)時(shí),,上位機(jī)軟件將數(shù)據(jù)以DMA方式傳給PCI9054再輸入FPGA,在其內(nèi)部HDLC模塊的作用下,,進(jìn)行數(shù)據(jù)并串轉(zhuǎn)換和HDLC協(xié)議轉(zhuǎn)換,,最后通過RS-422發(fā)送器進(jìn)行電平轉(zhuǎn)換和數(shù)據(jù)發(fā)送。預(yù)留SDRAM以滿足大容量數(shù)據(jù)通信需要,。
2 HDLC通信卡電路設(shè)計(jì)
2.1 總線接口設(shè)計(jì)
PCI總線具有高性能,、低成本、開放性,、兼容性良好等優(yōu)點(diǎn),,但PCI總線具有嚴(yán)格的時(shí)序關(guān)系和電氣規(guī)范,使得開發(fā)工作量和難度比較大,。PCI總線一般都采用各IC生產(chǎn)商設(shè)計(jì)的PCI專用接口芯片進(jìn)行PCI總線設(shè)備的開發(fā),,以減少開發(fā)難度、降低工作量,?;诖丝紤],,在本設(shè)計(jì)中,采用PLX公司的PCI9054芯片進(jìn)行總線開發(fā)[2],。
PCI9054芯片滿足PCI V2.2協(xié)議,,可作為橋接芯片在PCI總線和本地總線(local bus)之間提供信息傳輸,既可以作為兩個(gè)總線的主控設(shè)備去控制總線,,也可以作為兩個(gè)總線的目標(biāo)設(shè)備去響應(yīng)總線,。其本地總線可工作在M、C,、J三種模式,,可方便地與多種微處理器連接。在C模式下,,因本地總線的地址線和數(shù)據(jù)線分開,,時(shí)序與控制邏輯比較簡(jiǎn)單,得到了廣泛應(yīng)用[3],。因此本通信卡中,,PCI9054工作于C模式從設(shè)備方式,,本地總線時(shí)鐘采用40 MHz恒溫補(bǔ)償晶振,。PCI9054的PCI總線端引腳按照對(duì)應(yīng)關(guān)系與PCI總線金手指連接器相連,本地端地址總線為15 bit,,數(shù)據(jù)總線為32 bit,,控制總線包括ADS、BLAST,、LHOLD,、LHOLDA、LW/R#,、READY,、EOT#引腳,將它們分別與FPGA的IO口互連,。
2.2 FPGA芯片選型與設(shè)計(jì)
HDLC協(xié)議是面向比特的高級(jí)數(shù)據(jù)鏈路控制規(guī)程,,具有強(qiáng)大的差錯(cuò)檢測(cè)功能、高效和同步傳輸?shù)奶攸c(diǎn),,利用它可以確保數(shù)據(jù)信息可靠互通,。市場(chǎng)上有許多使用簡(jiǎn)單的專用HDLC芯片,但由于HDLC標(biāo)準(zhǔn)的文本較多,,這些芯片出于專用目的難以通用于不同版本,,缺乏應(yīng)用靈活性,且其片內(nèi)存儲(chǔ)器容量有限,。另一種方法是通過軟件對(duì)MCU編程實(shí)現(xiàn)HDLC協(xié)議,,雖然功能靈活,、適應(yīng)性強(qiáng),但處理速度慢,、占用處理器資源多,,難以高速實(shí)現(xiàn)對(duì)HDLC數(shù)據(jù)的插“0”和去“0”操作,一般只適用于路數(shù)較少的低速場(chǎng)合[4],。
為了實(shí)現(xiàn)與當(dāng)前系統(tǒng)HDLC協(xié)議的兼容,,本通信卡采用FPGA實(shí)現(xiàn)HDLC收發(fā)功能模塊,充分利用FPGA硬件可編程的特點(diǎn),,發(fā)揮其速度快,、靈活性高、并行處理信號(hào),、實(shí)時(shí)性能夠預(yù)測(cè)的優(yōu)勢(shì),。同時(shí),考慮到通信卡傳輸一幀數(shù)據(jù)的長(zhǎng)度通常為512 KB~1 KB,,而PCI9054的DMA只有32長(zhǎng)字FIFO,,且PCI讀寫速度與HDLC收發(fā)速度不一致,需要利用FIFO進(jìn)行數(shù)據(jù)緩存,,達(dá)到時(shí)序匹配的目的,。為了提高系統(tǒng)集成度及其可靠性,采用FPGA內(nèi)部存儲(chǔ)單元實(shí)現(xiàn)FIFO功能,。因此,,綜合考慮FPGA內(nèi)部存儲(chǔ)單元數(shù)量、IO引腳數(shù)量等,,選擇Altera公司的EP2C20-F240用于功能模塊開發(fā),。EP2C20F240為QFP封裝,可用IO口142個(gè),,內(nèi)部LE 18 752個(gè),,內(nèi)部RAM為239 616 bit,可以滿足系統(tǒng)開發(fā)需要,。
2.3 差分接口設(shè)計(jì)
通信卡對(duì)外通信采用RS-422方式傳輸數(shù)據(jù),,傳輸頻率最高為768 kHz。因此,,選用MAXIM公司的RS-422發(fā)送器MAX3032E和接收器MAX3094E,,其數(shù)據(jù)傳輸率最高分別可達(dá)20 Mb/s和10 Mb/s,滿足數(shù)據(jù)高速傳輸需要,。
3 HDLC通信卡邏輯設(shè)計(jì)
通信卡上的FPGA完成PCI9054本地總線數(shù)據(jù)讀寫時(shí)序邏輯的轉(zhuǎn)換,,實(shí)現(xiàn)HDLC收發(fā)模塊和FIFO數(shù)據(jù)緩存功能。設(shè)計(jì)中采用VHDL硬件描述語(yǔ)言實(shí)現(xiàn)各功能模塊,,利用Altera公司的集成開發(fā)環(huán)境Quartus II(11.0)完成相關(guān)的編譯,、調(diào)試,、下載等開發(fā)工作。
3.1 本地總線數(shù)據(jù)讀寫模塊
PCI9054工作于C模式從設(shè)備方式,,采用分散/聚合(Scatter-Gather)DMA方式進(jìn)行數(shù)據(jù)快速傳輸,,以發(fā)揮其速度快的優(yōu)勢(shì)。根據(jù)PCI9054讀寫時(shí)序圖可知,,在C模式從設(shè)備方式下,,F(xiàn)PGA讀取PCI9054本地端ads_n和blast_n的引腳狀態(tài),判斷是單周期讀寫狀態(tài)還是猝發(fā)讀寫狀態(tài),,實(shí)現(xiàn)地址獲取和數(shù)據(jù)讀寫,,其狀態(tài)機(jī)如圖2所示。同時(shí),,在上位機(jī)讀數(shù)據(jù)完畢后,,如果讀FIFO為空則將EOT#引腳拉低,將數(shù)據(jù)傳輸結(jié)束信號(hào)上傳,,強(qiáng)行停止主機(jī)數(shù)據(jù)讀操作,。這就需要在DMA初始化過程中,設(shè)置DMAMODE寄存器的第14位為EOT#有效模式,。
3.2 HDLC通信模塊實(shí)現(xiàn)
HDLC的標(biāo)準(zhǔn)幀格式如表1所示,,但HDLC也有由用戶定義的非標(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)[4-5]。
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ú)誤地接收到[6],。
FPGA中實(shí)現(xiàn)的簡(jiǎn)化HDLC模塊總體框圖如圖3所示,。讀寫FIFO采用Altera公司的LPM功能模塊實(shí)現(xiàn),大小可根據(jù)需要設(shè)置,,本通信卡設(shè)為512×32 bit,。發(fā)送數(shù)據(jù)時(shí),寫FIFO接收PC數(shù)據(jù)(總線寬度為32 bit),,首先進(jìn)行并串轉(zhuǎn)換,,再進(jìn)行插“0”操作,最后插入標(biāo)志字按位發(fā)送出去,,輸出數(shù)據(jù)Tx和輸出時(shí)鐘Tx_Clk保持同步,,整個(gè)過程由發(fā)送控制狀態(tài)機(jī)進(jìn)行控制。接收數(shù)據(jù)與發(fā)送數(shù)據(jù)過程相反,,由接收控制狀態(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ī)首先判斷寫FIFO是否有數(shù)據(jù),,若有數(shù)據(jù),則插入幀頭,,依次讀取FIFO數(shù)據(jù),,完成插“0”操作和插幀尾操作,并按照從低到高的順序發(fā)送數(shù)據(jù),,直至寫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為單位,逐次寫入讀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的在線邏輯分析儀SignalTap II獲取的PCI寫數(shù)據(jù),、HDLC數(shù)據(jù)發(fā)送和HDLC接收,、PCI讀數(shù)據(jù)的時(shí)序波形圖。從圖中可以看到,,HDLC模塊正確實(shí)現(xiàn)了插“0”和去“0”操作,,并能與PCI9054進(jìn)行正確的數(shù)據(jù)收發(fā)。
本文采用PCI總線控制器PCI9054和FPGA技術(shù)設(shè)計(jì)實(shí)現(xiàn)了一款符合簡(jiǎn)化HDLC協(xié)議的通信卡,,并已成功應(yīng)用于實(shí)際工作中,。實(shí)際應(yīng)用表明收發(fā)數(shù)據(jù)正確,可以滿足高速數(shù)據(jù)通信要求,。同時(shí),,該通信卡設(shè)計(jì)中預(yù)留了一定的擴(kuò)展空間,能夠根據(jù)需要進(jìn)行功能拓展,。本通信卡可應(yīng)用于信號(hào)處理,、數(shù)據(jù)通信等場(chǎng)合,對(duì)PCI總線應(yīng)用設(shè)計(jì)有一定的參考價(jià)值,。
參考文獻(xiàn)
[1] 羅文翰,張劍鋒.基于MPC860的HDLC通道驅(qū)動(dòng)程序的設(shè)計(jì)與實(shí)現(xiàn)[J].電子技術(shù)應(yīng)用,,2005,,31(15):66-68.
[2] 張素蘭,余國(guó)輝.基于PCI總線的高速串行通信模擬系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[J].計(jì)算機(jī)工程與設(shè)計(jì),,2007,,28(15):3617-3620.
[3] 陳斌,王成華,,夏永君.基于DSP和PCI的通用數(shù)據(jù)采集及處理卡實(shí)現(xiàn)[J].計(jì)算機(jī)應(yīng)用研究,,2005(1):171-173.
[4] 羅力凡,,常春藤.基于VHDL的FPG開發(fā)快速入門·技巧·實(shí)例[M].北京:人民郵電出版社,2009.
[5] 陸園琳,,喬廬峰,,王志功.多通道高速HDLC處理器的設(shè)計(jì)與實(shí)現(xiàn)[J].電子學(xué)報(bào),2003,,31(11):1630-1634.
[6] 馬萍,,唐衛(wèi)華,李緒志.基于PCIExpress總線高速數(shù)采卡的設(shè)計(jì)與實(shí)現(xiàn)[J].微計(jì)算機(jī)信息,,2008,,28(9-1):116-118.