楊 峰, 秦兆濤
(1北京遙感設(shè)備研究所 北京 100854 2北京航空航天大學(xué) 北京 100191)
在現(xiàn)代信息社會,數(shù)據(jù)通信占據(jù)著重要的地位,對實時通信數(shù)據(jù)的存儲也不可或缺。很多電子產(chǎn)品都通過HDLC協(xié)議[1]進行通信,然而PC機上卻沒有與之對應(yīng)的接口,所以需要一種“轉(zhuǎn)換”設(shè)備將依該協(xié)議通信的數(shù)據(jù)存儲于PC機中。本文所論述的正是這種“轉(zhuǎn)換”設(shè)備:基于FPGA設(shè)計和實現(xiàn)的USBHDLC協(xié)議轉(zhuǎn)換器。通過該系統(tǒng),便可將RS-485接口轉(zhuǎn)換為USB端口,實現(xiàn)外設(shè)與PC機的數(shù)據(jù)通信。
以往的轉(zhuǎn)換器系統(tǒng)采用的是專用芯片+單片機+接口電路的結(jié)構(gòu),由專用ASIC芯片實現(xiàn)HDLC協(xié)議[2],但存在如下問題:ASIC器件出于專用性目的難以通用不同版本,缺乏靈活性;器件片內(nèi)存儲器容量有限,不適合大數(shù)據(jù)量傳輸;為追求功能完備,芯片控制復(fù)雜[3]。本文系統(tǒng)采用FPGA的單片解決方案,可有效利用片內(nèi)硬件資源,無需外圍電路,高度集成且操作簡單,能夠兼顧速度和靈活性。FPGA既適合完成計算控制,又適合完成接口協(xié)議的編寫,所以本文通過FPGA硬件編程,實現(xiàn)了單片高度集成的USBHDLC協(xié)議轉(zhuǎn)換系統(tǒng)。
本文系統(tǒng)主要包括FPGA控制器、HDLC模塊和USB模塊三部分。系統(tǒng)由FPGA芯片控制實現(xiàn)HDLC通信協(xié)議,通過RS-485接口與外接設(shè)備進行通信。系統(tǒng)配備USB端口,通過FPGA編程配置USB芯片實現(xiàn)系統(tǒng)與PC機的通信,進而實現(xiàn)對數(shù)據(jù)的讀取、存儲和事后分析,亦或?qū)C機上的指令和數(shù)據(jù)發(fā)送出去。
本文系統(tǒng)設(shè)計簡單、靈活,可靠性高,較易實現(xiàn)HDLC通信協(xié)議,USB接口通用性強,具有較強的兼容性和廣泛的適用性,能夠很好地應(yīng)用于各種中小型通信設(shè)備[4]。
高級數(shù)據(jù)鏈路控制規(guī)程HDLC[5](High-Level Data Link Control Procedures)是一種面向比特位的同步數(shù)據(jù)鏈路層協(xié)議,由國際標(biāo)準化組織ISO制定,廣泛應(yīng)用于數(shù)據(jù)通信領(lǐng)域。該協(xié)議使用統(tǒng)一的幀格式,運用方便;采用零比特插入法,易于硬件實現(xiàn),且支持任意的位流傳輸,實現(xiàn)信息的透明傳輸;全雙工通信,吞吐率高,在未收到應(yīng)答幀的情況下,可連續(xù)發(fā)送信息幀,提高數(shù)據(jù)鏈路傳輸?shù)男?采用CRC幀校驗序列,可防止漏幀,提高信息傳輸?shù)目煽啃浴?/p>
HDLC以幀作為傳輸?shù)幕締挝?,其結(jié)構(gòu)如圖1所示。
圖1 HDLC幀結(jié)構(gòu)
結(jié)合圖1,標(biāo)志位“F”作為幀頭和幀尾,各1個字節(jié),設(shè)定為十六進制“7E”。為防止數(shù)據(jù)傳輸誤判,提高可靠性,可發(fā)送多個“7E”?!癐NFO”為有效數(shù)據(jù)信息,為字節(jié)的整數(shù)倍。對圖1所示的校驗區(qū)間采用CRC方式校驗,即循環(huán)冗余校驗,得到2個字節(jié)的幀校驗序列“FCS”。為防止傳輸?shù)挠行?shù)據(jù)被誤判為幀標(biāo)志位“F”,協(xié)議采用零比特插入和刪除法[6],即規(guī)定:在發(fā)送數(shù)據(jù)時,當(dāng)比特流中連續(xù)出現(xiàn)5個“1”bit時,在后面自動插入一個“0”bit;在接收數(shù)據(jù)時,當(dāng)比特流中連續(xù)出現(xiàn)5個“1”bit時,自動刪除后面的“0”bit。
本文系統(tǒng)采用HDLC協(xié)議與外接設(shè)備進行數(shù)據(jù)通信。由于FPGA可重復(fù)性編程,設(shè)計開發(fā)靈活,可多路并行處理,程序移植性強,能實時仿真,可在眾多通信產(chǎn)品中設(shè)計實現(xiàn)HDLC協(xié)議功能[7],因此本文基于可編程器件FPGA實現(xiàn)HDLC通信協(xié)議。
本文所論述的系統(tǒng)為基于FPGA的USB-HDLC協(xié)議轉(zhuǎn)換器,系統(tǒng)結(jié)構(gòu)如圖2所示。系統(tǒng)主要由FPGA控制模塊、HDLC模塊和USB模塊三部分組成。此外,系統(tǒng)通過RS-485接口與外接設(shè)備連接,通過USB端口與PC機相連。
圖2 系統(tǒng)結(jié)構(gòu)
當(dāng)發(fā)送數(shù)據(jù)時,PC機上的數(shù)據(jù)信息或指令通過USB接口傳輸進入系統(tǒng),將數(shù)據(jù)暫存于USB芯片中,再進入系統(tǒng)緩存RAM,緩存中的數(shù)據(jù)按HDLC協(xié)議通過RS-485接口傳輸至外接設(shè)備;當(dāng)接收數(shù)據(jù)時,外接設(shè)備的數(shù)據(jù)通過RS-485接口進入系統(tǒng),按照內(nèi)部HDLC協(xié)議對數(shù)據(jù)進行解析并存入FPGA緩存中,USB芯片經(jīng)FPGA配置控制,可接收來自緩存中的外部數(shù)據(jù),進而將其通過USB接口傳入PC機中。
HDLC協(xié)議是通過可編程邏輯器件FPGA編程實現(xiàn)的,而USB模塊功能的實現(xiàn)則依賴于USB芯片和FPGA對它的配置控制。
本文系統(tǒng)采用的 USB芯片為 Cypress公司生產(chǎn)的 EZ-USB芯片 CY7C68013[8]。CY7C68013采用USB2.0協(xié)議,主要有端口模式、GPIF模式和Slave FIFO模式三種工作模式。該芯片全速信號速率最大為12Mb/s,高速信號速率可達480Mb/s。端口模式下的傳輸速率較慢,這是因為其I/O口為8051通用I/O口,需要CPU的參與;在GPIF模式下,GPIF作為主控制器,產(chǎn)生可編程的控制信號,可與外部接口通信;在Slave FIFO模式下,外部處理器可以直接與FIFO連接。
USB芯片CY7C68013的功能如圖3所示。
本文中CY7C68013采用Slave FIFO工作模式,便于系統(tǒng)間通信和協(xié)同合作。該芯片受主控器件FPGA的配置,可控制芯片的數(shù)據(jù)總線讀寫使能,即圖3中的EP2和EP6,進而實現(xiàn)數(shù)據(jù)的高速傳輸。
圖3 USB模塊功能
可編程邏輯器件FPGA芯片作為主控器件,控制數(shù)據(jù)通信時的USB模塊和HDLC通信協(xié)議模塊,進而實現(xiàn)USB-HDLC協(xié)議轉(zhuǎn)換器功能,其原理如圖4所示。
FPGA編程實現(xiàn)USB譯碼模塊、USB控制模塊和HDLC協(xié)議發(fā)送、接收模塊,緩存RAM可在芯片內(nèi)調(diào)用;USB控制模塊通過控制總線對USB芯片進行配置,經(jīng)USB接口實現(xiàn)與PC機的通信互聯(lián)。USB譯碼模塊對接收或發(fā)送的數(shù)據(jù)進行解析譯碼處理,譯碼后的數(shù)據(jù)信息或經(jīng)USB模塊數(shù)據(jù)總線進入USB芯片上傳到PC機,或緩存到RAM中按HDLC協(xié)議通過RS-485接口發(fā)送給外接設(shè)備。
圖4 FPGA控制實現(xiàn)USB-HDLC協(xié)議轉(zhuǎn)換器原理
下面具體敘述FPGA是如何設(shè)計實現(xiàn)HDLC協(xié)議和控制USB模塊的。
FPGA實現(xiàn)HDLC協(xié)議的流程如圖5所示。在發(fā)送端,數(shù)據(jù)由發(fā)送緩存RAM經(jīng)并/串轉(zhuǎn)換、CRC校驗、插零和包裝幀頭幀尾標(biāo)志字等操作將數(shù)據(jù)發(fā)送出去;接收端,檢測接收數(shù)據(jù)的幀頭標(biāo)志字,然后經(jīng)CRC校驗檢測、刪零操作后對數(shù)據(jù)串/并轉(zhuǎn)換,并存儲到接收緩存單元RAM中,檢測到幀尾標(biāo)志字后停止接收過程。
具體來講,發(fā)送端首先發(fā)送標(biāo)志字“7E”,然后將緩存中待發(fā)送的并行數(shù)據(jù)并/串轉(zhuǎn)換,同時系統(tǒng)自動完成CRC編碼、“0”比特插入等操作,再將處理后的數(shù)據(jù)按同步串行傳輸方式發(fā)送。在接收端,系統(tǒng)自動完成標(biāo)志字“7E”的檢測、刪“0”及CRC校驗操作,再將同步串行數(shù)據(jù)串/并轉(zhuǎn)換,轉(zhuǎn)換成8位并行數(shù)據(jù)存儲至接收緩存中。整個系統(tǒng)采用同一個全局時鐘。
圖5 HDLC協(xié)議的FPGA設(shè)計實現(xiàn)流程
RS-485接口選用 J30J-21ZKP,通過連接線纜與外設(shè)相連。發(fā)送數(shù)據(jù)時,首先經(jīng)過光耦合器件進行電氣性能隔離,然后經(jīng)過單端電平轉(zhuǎn)差分電平芯片輸出到發(fā)送總線上,這樣的設(shè)計能夠在保證外部通信的同時,有效地保護系統(tǒng)硬件平臺。接收數(shù)據(jù)端,信號經(jīng)過差分電平轉(zhuǎn)單端電平芯片,將差分信號轉(zhuǎn)換為單端信號,然后經(jīng)過光耦合器件輸入到FPGA芯片。本設(shè)計中選擇HCPL-063L光耦隔離芯片以及MAX3485電平轉(zhuǎn)換芯片,理論上此電平轉(zhuǎn)換芯片可以達到10Mb/s的傳輸速率。為滿足不同設(shè)計的需要,F(xiàn)PGA內(nèi)部設(shè)有專門的波特率寄存器,可以通過PC機界面環(huán)境裝訂選擇發(fā)送數(shù)據(jù)的波特率,如2Mb/s或4Mb/s。
USB控制模塊主要實現(xiàn)對PC機下發(fā)指令的譯碼解析,傳輸下發(fā)數(shù)據(jù)信息以及將系統(tǒng)接收的內(nèi)部數(shù)據(jù)上傳給PC機。系統(tǒng)與PC機連接時,用戶可以從PC機界面環(huán)境向系統(tǒng)發(fā)送指令,進行指令裝訂、保存接收數(shù)據(jù)等操作。
FPGA對USB模塊的控制流程如圖6所示。
如圖6所示,在發(fā)送數(shù)據(jù)時,F(xiàn)PGA編程控制選擇USB FIFO通道EP2,系統(tǒng)接收PC機下發(fā)的指令并對其進行解析、譯碼操作,或通過配置寄存器實現(xiàn)復(fù)位、波特率選擇和觸發(fā)發(fā)送等功能,或?qū)C機下發(fā)的數(shù)據(jù)信息寫入發(fā)送緩存RAM;在接收數(shù)據(jù)時,通過狀態(tài)寄存器判斷接收RAM中是否有數(shù)據(jù),若有,F(xiàn)PGA編程控制選擇USB FIFO通道EP6,上行數(shù)據(jù)通過USB接口傳入PC機中,經(jīng)解析使之顯示在PC機界面環(huán)境中或存儲于PC機內(nèi)部。
圖6 USB控制模塊的FPGA實現(xiàn)流程
本系統(tǒng)FPGA控制實現(xiàn)HDLC協(xié)議部分采用VHDL語言進行編程,并通過第三方軟件Signal TapⅡLogic Analyzer顯示數(shù)據(jù)的通信傳輸過程,用行為級仿真驗證轉(zhuǎn)換器功能。
圖7為FPGA配置控制USB芯片CY7C68013,PC機下發(fā)數(shù)據(jù)時的測試圖。系統(tǒng)采用40MHz時鐘信號采樣,F(xiàn)IFOData為并行數(shù)據(jù),SLRD、SLWR為讀寫信號。從仿真圖中FIFOData信號可以看出,系統(tǒng)設(shè)計發(fā)送 EE、FF、02、01、00 數(shù)據(jù)指令,44、55、33、00、01 等為需要發(fā)送的有效數(shù)據(jù),說明 PC 機中數(shù)據(jù)已進入USB芯片緩存中。接下來的工作是將該數(shù)據(jù)轉(zhuǎn)換為符合HDLC協(xié)議的數(shù)據(jù),并通過RS-485接口發(fā)送出去。
圖7 PC機下發(fā)USB數(shù)據(jù)仿真測試
圖8 為FPGA實現(xiàn)HDLC通信協(xié)議發(fā)送數(shù)據(jù)時的仿真測試。其中TX_Reg為預(yù)備發(fā)送PC機下行并行數(shù)據(jù)的寄存器,SPI_Dat_Out_R為HDLC數(shù)據(jù)總線發(fā)送的串行數(shù)據(jù)。如圖所示,首先發(fā)送幀頭標(biāo)志4個“7E”,然后發(fā)送寄存器中的數(shù)據(jù)44、55、33、00、01等,以及兩個 CRC 校驗字節(jié)“BC”和“A1”。最后,發(fā)送幀尾標(biāo)志4個“7E”。由于設(shè)計規(guī)定,數(shù)據(jù)發(fā)送為先發(fā)低位再發(fā)高位,所以在串行數(shù)據(jù)線上讀取信息時需將數(shù)據(jù)倒置讀取。
圖8 HDLC協(xié)議數(shù)據(jù)傳輸仿真測試
根據(jù)上述兩圖FIFOData、TX_Reg和SPI_Dat_Out_R信號數(shù)據(jù)內(nèi)容的對比,系統(tǒng)實現(xiàn)了將PC機數(shù)據(jù)通過USB接口轉(zhuǎn)入FPGA緩存中并通過RS-485接口并行輸出的功能,即完成了USB-FPGA協(xié)議轉(zhuǎn)換器的功能。
HDLC協(xié)議模塊中,HCPL-063L光耦隔離芯片能達到的最高傳輸速率為15Mb/s,MAX3485電平轉(zhuǎn)換芯片可以達到10Mb/s的傳輸速率;USB模塊中,CY7C68013芯片數(shù)據(jù)傳輸速率可達到480Mb/s,片內(nèi)擁有8kB的RAM,完全可以滿足系統(tǒng)傳輸數(shù)據(jù)的需要。
當(dāng)系統(tǒng)FPGA芯片EP1C6T144C8工作時,資源占用情況如表1所示。
表1 資源使用情況
本文系統(tǒng)地介紹了基于FPGA的USB-HDLC協(xié)議轉(zhuǎn)換器的設(shè)計與實現(xiàn)。系統(tǒng)采用HDLC總線接口與外接設(shè)備連接,通過USB接口與PC機通信傳輸信息。通過可編程邏輯器件FPGA編程代替專用芯片實現(xiàn)HDLC協(xié)議,編程簡單,易于修改,數(shù)據(jù)傳輸可靠,實時性和穩(wěn)定性較高[10];采用USB2.0協(xié)議接口與PC機進行通信,通用簡便,接口設(shè)計靈活,具有較高的數(shù)據(jù)傳輸率。該USB-HDLC協(xié)議轉(zhuǎn)換器實現(xiàn)了PC機與外接設(shè)備的信息通信和數(shù)據(jù)存儲,采用HDLC協(xié)議和USB接口,使系統(tǒng)具有更強的兼容性和廣泛的應(yīng)用性,具有一定的實用價值。
[1]彭圻平,胡國慶,等.基于FPGA的HDLC規(guī)程模塊實現(xiàn)[J].計算機與網(wǎng)絡(luò),2013,(10):64~67.
[2]劉振宇,陳 禾,等.低功耗RS-485總線HDLC控制器的ASIC設(shè)計[J].微電子學(xué),2002,32(6):469~472.
[3]張文昊,王 俊,等.基于FPGA的HDLC規(guī)程的設(shè)計與實現(xiàn)[J].電子器件,2009,(3):696~699.
[4]應(yīng)三叢,張 行.基于FPGA的HDLC協(xié)議控制器[J].四川大學(xué)學(xué)報,2008,40(3):116~120.
[5]ISO/IEC 13239.Information Technology—Telecommunication Exchange between Systems— High-level Data Link Control(HDLC)Procedures[S].
[6]鄧風(fēng)軍,張 龍,等.基于PCI總線的HDLC通信卡的設(shè)計與實現(xiàn)[J].電子技術(shù)應(yīng)用,2012,38(8):30~33.
[7]張 偉.基于FPGA的HDLC規(guī)程控制系統(tǒng)實現(xiàn)[J].指揮信息系統(tǒng)與技術(shù),2011,(2):48~52.
[8]鄢 濤,杜小丹,等.基于RS485的數(shù)據(jù)通信協(xié)議的設(shè)計與實現(xiàn)[J].電子設(shè)計工程,2013,21(17):19~22.
[9]劉文學(xué),郭玉忠,等.HDLC協(xié)議的FPGA實現(xiàn)方法[J].航空計算技術(shù),2011,41(3):93~96.
[10]劉杰宇.基于FPGA技術(shù)的HDLC幀收發(fā)器的設(shè)計與實現(xiàn)[D].北京交通大學(xué),2010.