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