石永亮 秦麗 張會新 劉文怡 樊劉華
摘 要: 設(shè)計一種USB 3.0+PCI的雙接口數(shù)據(jù)傳輸系統(tǒng),系統(tǒng)采用FPGA作為核心控制器,CYUSB3014和PCI9054作為USB 3.0與PCI接口芯片,實現(xiàn)上位機(jī)下發(fā)指令給遠(yuǎn)端采編存儲設(shè)備,及存儲設(shè)備的數(shù)據(jù)回傳。設(shè)計中PCI接口采用單次訪問結(jié)合突發(fā)訪問的數(shù)據(jù)傳輸模式,USB通信高速穩(wěn)定,且兩個接口互為備用,相較于單一接口具有更高的可靠性。實踐表明,該系統(tǒng)數(shù)據(jù)傳輸速率達(dá)到176 MB/s,保證可靠性的同時,相較于單一USB 2.0接口的12 MB/s有了大幅提高。
關(guān)鍵詞: 高速數(shù)據(jù)傳輸; 雙接口; PCI; USB 3.0
中圖分類號: TN911?34; TP274 文獻(xiàn)標(biāo)識碼: A 文章編號: 1004?373X(2016)08?0096?04
Application of PCI and USB3.0 in high?speed data transmission system
SHI Yongliang, QIN Li, ZHANG Huixin, LIU Wenyi, FAN Liuhua
(National Key Laboratory for Electronic Measurement Technology, MOE Key Laboratory of Instrumentation Science & Dynamic Measurement,
North University of China, Taiyuan 030051, China)
Abstract: A USB 3.0 and PCI dual?interface data transmission system was designed. A FPGA is used as the core controller in the system. CYUSB3014 and PCI9054 are adopted as interface chips of USB and PCI to achieve the functions that the host computer issued instructions to the remote storage devices, and collect the data returned from storage devices. The data transmission mode combining the single access with burst access is adopted in the design for PCI interface. USB communication is fast and stable, and the two interfaces are mutual backups of the two. Compared with the system with a single interface USB 2.0, whose data transmission rate is 12 MB/s, it has higher reliability. The practice shows that the data transmission rate of the system can reach up to 176 MB/s, while ensuring its reliability.
Keywords: high?speed data transmission; dual?interface; PCI; USB 3.0
0 引 言
飛行器的研制工作量大、系統(tǒng)復(fù)雜、成本昂貴,為了有效降低研制經(jīng)費、加快研制進(jìn)程,同時確保飛行試驗的工作參數(shù)可靠有效,本文設(shè)計了一種地面高速數(shù)據(jù)傳輸系統(tǒng)。該系統(tǒng)旨在實現(xiàn)遠(yuǎn)距離控制采編存儲設(shè)備的工作狀態(tài),同時能夠遠(yuǎn)距離可靠并實時傳輸采編設(shè)備的數(shù)據(jù),實現(xiàn)數(shù)據(jù)的回傳分析[1]。本系統(tǒng)將PCI9054作為“橋接”芯片,采用單次訪問結(jié)合突發(fā)訪問的數(shù)據(jù)傳輸模式,實現(xiàn)主控芯片F(xiàn)PGA和PCI接口的數(shù)據(jù)傳輸。由于USB接口占用資源少,易于開發(fā)和集成,支持熱插拔功能,串行接口選用了USB 3.0接口。本系統(tǒng)設(shè)置了自檢功能,一旦其中一個接口出現(xiàn)問題就選擇使用另外一個接口,即PCI和USB接口互為備用接口,保證了系統(tǒng)的可靠性,兩種典型的串并接口,使得本系統(tǒng)在保證高速、可靠的同時也增強(qiáng)了該系統(tǒng)的通用性。
1 系統(tǒng)總體設(shè)計
本系統(tǒng)通過PCI或USB與上位機(jī)實現(xiàn)指令接收與數(shù)據(jù)回傳,為了保證系統(tǒng)的工作可靠性,正常工作模式下,兩接口互為對方的備用通信接口。系統(tǒng)接收上位機(jī)下發(fā)的命令后,通過數(shù)據(jù)傳輸卡轉(zhuǎn)發(fā)到LVDS轉(zhuǎn)發(fā)器,采用LVDS傳輸協(xié)議實現(xiàn)系統(tǒng)與遠(yuǎn)程采編存儲設(shè)備的通信。系統(tǒng)總體設(shè)計如圖1所示。
USB 3.0通信采用CYUSB3014芯片,相比于早期的USB接口,USB 3.0在物理層上增加了支持并行傳輸?shù)木€路,實現(xiàn)了超高速傳輸。USB 3.0的全雙工數(shù)據(jù)傳輸模式,并兼容USB 2.0,雙向并發(fā)的工作模式減少了在USB 2.0協(xié)議傳輸中的等待時間。由于PCI總線協(xié)議復(fù)雜,PCI總線接口開發(fā)一般采用通用PCI接口芯片F(xiàn)PGA方式實現(xiàn)PCI總線接口通信,通用接口芯片可以實現(xiàn)PCI目標(biāo)和主控模塊的接口功能,將復(fù)雜的PCI總線接口協(xié)議轉(zhuǎn)化為比較簡單的用戶接口,這樣保證了系統(tǒng)的可靠性。
2 硬件電路設(shè)計
2.1 PCI接口電路設(shè)計
在PCI系統(tǒng)中,能夠獲取總線控制權(quán)的設(shè)備稱之為主設(shè)備,被主設(shè)備控制的設(shè)備稱為目標(biāo)設(shè)備或從設(shè)備。本系統(tǒng)中的PCI傳輸設(shè)備為主設(shè)備,其接口電路總體設(shè)計框圖如圖2所示。
PCI總線信號是直接與PCI插槽相連接的地址/數(shù)據(jù)信號和PCI協(xié)議控制信號,這類信號包括系統(tǒng)信號CLK(時鐘信號)、RST#(復(fù)位信號),地址/數(shù)據(jù)復(fù)用信號AD[31:00]、協(xié)議控制信號PAR(奇偶校驗信號)、STOP#(停止信號)、FRAME#(幀周期信號)、DEVSEL#(設(shè)備選擇信號)、IRDY#(主設(shè)備準(zhǔn)備好信號)、TRDY#(目標(biāo)設(shè)備),初始化設(shè)備選擇信號IDSEL(初始化設(shè)備選擇信號)、PERR#(數(shù)據(jù)奇偶校驗錯誤報告信號)、SERR#(系統(tǒng)錯誤報告信號)。由于較高的背板阻抗會加劇瞬態(tài)干擾,為減小信號線上的分支對總線的影響,需要對總線信號進(jìn)行串聯(lián)匹配,匹配電阻為10 Ω,由于本地總線過沖比較嚴(yán)重,故本系統(tǒng)設(shè)計時串聯(lián)22 Ω,以減小總線的過沖影響[2]。
PCI9054內(nèi)部提供一個串行的E2PROM配置接口,為PCI總線和局部總線存儲寄存器提供配置信息,設(shè)計中常選用93LC56B作為外接E2PROM。PCI9054上電后首先會自動讀取E2PROM中的數(shù)據(jù),若檢測到第一個長字為非全0或非全1時,說明存在已經(jīng)燒寫好的E2PROM,上電后該芯片會為PCI9054的寄存器配置初始化參數(shù)[3],圖2中,93LC56B的3、4引腳和EEDI/DO連接,并通過3.9 kΩ電阻分別接3.3 V和地,此處設(shè)計方便根據(jù)實際需求選擇電路連接方式,當(dāng)不需要E2PROM對PCI9054進(jìn)行配置時選擇下拉電阻接地,否則選擇上拉電阻接3.3 V。
2.2 USB接口電路設(shè)計
USB 3.0控制芯片采用CYUSB3014,該芯片具有高度集成的靈活特性,并向下兼容USB 2.0協(xié)議。在實際應(yīng)用中,USB接口經(jīng)常接觸人體,且頻繁進(jìn)行熱插拔,為了加強(qiáng)接口的靜電防護(hù)性能,本系統(tǒng)增加了外置ESD防護(hù)芯片,芯片采用Semtech公司的RCLAMP0524J芯片作為ESD防護(hù)器件[4],電路見圖3。另外,將PMODE[2:0]配置成Z1Z模式,系統(tǒng)上電時USB3014選擇I2C的引導(dǎo)方式,只需將配置好的固件程序通過I2C燒錄進(jìn)外部E2PROM,這樣在重新上電時不需要重復(fù)下載固件。USB3014和FPGA的硬件通信實現(xiàn)只需要將USB3014的控制總線和數(shù)據(jù)總線分別連接到FPGA的I/O引腳上即可。在實際工作時,F(xiàn)PGA通過控制片選引腳SLCS#、中斷控制引腳PKTEND#、寫選通控制引腳SLWR#、讀選通控制引腳SLRD#、輸出使能控制引腳SLOE、時鐘輸入引腳PCLK以及緩存選擇引腳A[1:0]等引腳來控制USB3014芯片的數(shù)據(jù)緩沖區(qū)的讀寫時序;而USB3014芯片通過狀態(tài)標(biāo)志引腳FLAGB和FLAGA引腳為FPGA提供數(shù)據(jù)緩沖區(qū)的空滿狀態(tài);通過雙向數(shù)據(jù)總線DQ[15:0],F(xiàn)PGA的高速I/O口與USB3014的數(shù)據(jù)傳輸接口進(jìn)行16位的并行高速傳輸。
3 軟件設(shè)計
FPGA控制單元選用XILINX公司的XC6SLX75作為主控芯片,以ISE14.7為開發(fā)環(huán)境,使用VHDL語言進(jìn)行FPGA與PCI接口及USB接口通信協(xié)議的邏輯時序控制。
3.1 PCI接口軟件設(shè)計
3.1.1 PCI通信協(xié)議
本地總線和PCI總線之間的數(shù)據(jù)傳輸有三種方式:PCI Initiator模式、PCI Target模式和DMA模式[5]。對于本系統(tǒng),主要目的是將數(shù)據(jù)快速地上傳至上位機(jī),在DMA和PCI Target的突發(fā)模式皆滿足速度要求的前提下,考慮到易操作性,選擇上傳數(shù)據(jù)采用突發(fā)模式,而下發(fā)命令采用DMA的單一周期訪問模式。
圖3 USB 3.0接口電路
本系統(tǒng)通過類似握手協(xié)議的方式來對指令確認(rèn)反饋,以確保正確下發(fā)指令。工作模式具體是:上位機(jī)給地址0x0010下發(fā)一個指令,F(xiàn)PGA通過改地址獲取指令,之后進(jìn)行兩種操作:一是通過將指令寫入地址0x0020反饋給上位機(jī);二是將指令發(fā)送給下一級設(shè)備。當(dāng)指令反饋給上位機(jī)之后,上位機(jī)判斷該指令是否與前一次發(fā)的一致,一致說明上位機(jī)下發(fā)指令成功,若不一致上位機(jī)自動重新下發(fā)指令,如果確認(rèn)三次都不一致,則上位機(jī)顯示發(fā)送失敗,保證指令的及時性和準(zhǔn)確性。本系統(tǒng)協(xié)議中上位機(jī)與功能板卡之間的指令約定為8 b,并約定4個地址用于交互指令和數(shù)據(jù),地址分配如表1所示。
表1 地址分配關(guān)系表
3.1.2 讀寫程序設(shè)計
FPGA與PCI通過專用接口控制器PCI9054進(jìn)行通信,實現(xiàn)單一周期和突發(fā)訪問,需要的本地信號主要有:Lhold(本地申請總線信號)、LW/R#(讀有效為低,寫有效為高)、ADS#(有效地址和新總線的開始)、Blast#(決定一個單周期被執(zhí)行或突發(fā)周期被執(zhí)行)、Ready#(有效時表示總線上讀的數(shù)據(jù)有效或者一次寫數(shù)據(jù)傳輸結(jié)束)[6]。為了同時滿足單一周期總線訪問和突發(fā)方式傳輸數(shù)據(jù)的要求,F(xiàn)PGA程序采用了狀態(tài)及方式,讀寫程序流程如圖4所示。
FPGA內(nèi)部邏輯從S0狀態(tài)開始,判斷ADS#是否為低電平。當(dāng)上位機(jī)沒有下發(fā)指令時,ADS#信號處于高電平,PCI總線一直處于空閑狀態(tài);當(dāng)有指令下發(fā)時ADS#拉低,新的總線傳輸啟動,進(jìn)入S1狀態(tài)進(jìn)行單一周期訪問。FPGA判斷LW/R#信號狀態(tài),當(dāng)LW/R#為高時執(zhí)行寫操作,即FPGA從本地數(shù)據(jù)端接收上位機(jī)下發(fā)的命令,一次單周期訪問以Ready#、Blast#信號拉低結(jié)束。結(jié)束單周期訪問后,狀態(tài)機(jī)又跳回S0狀態(tài),根據(jù)協(xié)議,LW/R#信號為PCI Target讀操作,傳輸?shù)谋镜氐刂窞橹噶畲_認(rèn)地址,將前一次剛接收 的命令寫入約定好的地址,并再一次結(jié)束單周期訪問,跳回S0狀態(tài)。同時上位機(jī)從0x0020獲取指令與前一次下發(fā)的指令作對比,對指令進(jìn)行確認(rèn)反饋。
當(dāng)通過單周期訪問完成下發(fā)指令后,若指令中有上傳數(shù)據(jù)指令,PCI總線會再一次啟動單周期PCI Target讀操作,將是否能獲取數(shù)據(jù)的標(biāo)志寫入固定地址,傳送給上位機(jī)進(jìn)行判斷,若是半滿信號,說明FPGA準(zhǔn)備好數(shù)據(jù),狀態(tài)機(jī)進(jìn)入突發(fā)訪問周期,上位機(jī)可以突發(fā)獲取數(shù)據(jù)。
3.2 USB接口軟件設(shè)計
USB3014的工作模式為同步Slave FIFO,將USB3014的GPIF端口配置為16位以匹配DDR2的位寬。GPIF接口作為雙向通道,它既可以將計算機(jī)的命令等內(nèi)容存入緩沖區(qū)以被FPGA讀取,也可以從FPGA內(nèi)部接收數(shù)據(jù)存入緩沖區(qū)回傳至計算機(jī)。FPGA作為Master對從屬器件USB3014的內(nèi)部緩沖區(qū)進(jìn)行突發(fā)或單周期數(shù)據(jù)存取,F(xiàn)PGA通過改變邏輯狀態(tài)來選擇對USB3014執(zhí)行讀寫操作, USB3014給FPGA提供FLAGA/FLAGB信號作為緩沖區(qū)的空/滿標(biāo)志,F(xiàn)PGA中的控制模塊就會根據(jù)空/滿標(biāo)志的狀態(tài)來決定是否暫停其讀或?qū)懙男袨閇7?8]。本傳輸系統(tǒng)USB 3.0模塊的程序功能主要為:時鐘管理模塊通過CMT對外部輸入的50 MHz進(jìn)行分頻倍頻處理,產(chǎn)生FPGA的工作時鐘以及與其他芯片諸如DDR2以及USB3014的通信時鐘; FIFO管理模塊將通過LVDS接收的數(shù)據(jù)進(jìn)行緩存,來解決不同模塊間數(shù)據(jù)傳輸?shù)目鐣r鐘域及位寬不同的問題,將數(shù)據(jù)寫入DDR2;DDR2控制模塊是調(diào)用IP核來實現(xiàn)FPGA對DDR2的控制,對其進(jìn)行充電、激活等操作[9];USB 3.0控制模塊是對USB3014進(jìn)行控制,并識別其標(biāo)志信號,最終實現(xiàn)把DDR2 SDRAM中的數(shù)據(jù)通過USB 3.0接口批量回傳給上位機(jī)。FPGA的功能結(jié)構(gòu)框圖如圖5所示。
4 測量結(jié)果與分析
4.1 PCI接口仿真測試
接口測試過程中用Chipscope進(jìn)行在線仿真調(diào)試,下發(fā)指令采用單一周期訪問模式,各信號時序如圖6所示,回傳數(shù)據(jù)采用突發(fā)傳輸模式,測試時序如圖7所示,仿真結(jié)果與本文中第3.1.1節(jié)PCI通信協(xié)議完全相符。
4.2 數(shù)據(jù)分析
通過搭建地面測試平臺對該傳輸系統(tǒng)進(jìn)行測試,測試過程中為便于分析,采編存儲設(shè)備中存儲的數(shù)據(jù)是帶有幀標(biāo)志的遞增數(shù),采編存儲設(shè)備接收到指令后從FLASH中讀取數(shù)據(jù)并通過LVDS發(fā)送給本文中的高速數(shù)據(jù)傳輸系統(tǒng),本系統(tǒng)通過USB 3.0及PCI接口分別接收數(shù)據(jù)回傳給上位機(jī),數(shù)據(jù)解析如圖8所示,分析結(jié)果:數(shù)據(jù)傳輸穩(wěn)定可靠,沒有丟幀及誤碼現(xiàn)象,下發(fā)指令正常。
5 結(jié) 語
本文主要介紹了一種基于PCI+USB 3.0的雙接口高速、高可靠性數(shù)據(jù)傳輸系統(tǒng),從硬件電路設(shè)計及軟件通信協(xié)議入手,詳細(xì)闡述了PCI和USB兩個接口在高速數(shù)據(jù)傳輸系統(tǒng)中的關(guān)鍵技術(shù)應(yīng)用,并搭建平臺進(jìn)行數(shù)據(jù)測試分析,驗證了該系統(tǒng)的性能,滿足任務(wù)需求提出的遠(yuǎn)距離高速可靠性傳輸,實現(xiàn)速率176 MB/s的數(shù)據(jù)傳輸。
參考文獻(xiàn)
[1] 曹賽男.基于FPGA的PCI接口控制器的設(shè)計與應(yīng)用[D].南京:南京航空航天大學(xué),2012.
[2] 董海蘭,康懷祺,鐘午.基于FPGA的多接口高速PCI傳輸系統(tǒng)設(shè)計[J].火控雷達(dá)技術(shù),2012(4):43?47.
[3] 張丹紅,張孝勇,劉文.基于PCI9054的數(shù)據(jù)通信接口卡設(shè)計[J].武漢理工大學(xué)學(xué)報(信息與管理工程版),2013,35(3):49?54.
[4] 薛圓圓,趙建領(lǐng).USB應(yīng)用開發(fā)寶典[M].北京:人民郵電出版社,2011.
[5] 王騏,王青萍.基于PCI9054的DMA和突發(fā)數(shù)據(jù)傳輸實現(xiàn)[J].物聯(lián)網(wǎng)技術(shù),2011,1(3):86?88.
[6] 郭柳柳,儲成君,甄國涌,等.基于PXI總線高速數(shù)據(jù)傳輸卡的設(shè)計[J].計算機(jī)測量與控制,2014,22(6):1899?1901.
[7] 李澤明.基于USB 3.0接口的高速數(shù)據(jù)傳輸電路設(shè)計與實現(xiàn)[D].太原:中北大學(xué),2013.
[8] LIN Mushan, TSAI Chien?Chun, CHANG Chih?Hsien. A 5Gb/s low?power PCI express/USB3.0 ready PHY in 40 nm CMOS technology with high?jitter immunity [C]// IEEE Asian Solid?State Circuits Conference. [S.l.]: IEEE, 2009: 16?18.
[9] 黃萬偉,董永吉,伊鵬,等.Xilinx FPGA應(yīng)用進(jìn)階[M].北京:電子工業(yè)出版社,2014.