陳 雪 ,李佩玥 ,章明朝 ,隋永新 ,楊懷江
(1.中國科學院長春光學精密機械與物理研究所,吉林 長春130033;2.中國科學院研究生院,北京100039)
在遠程實時控制、高速數(shù)據(jù)交換、高速光纖組網(wǎng)等領域,如何實現(xiàn)數(shù)據(jù)的高速實時采集和遠程傳輸已經(jīng)成為關鍵問題。目前的解決方案大都基于PCI總線,并利用電纜進行遠程傳輸。這種方式的共享總線,可達到的理論極限速率為133 Mb/s,遠不能滿足需求。而且在遠距離傳輸時損耗高,抗電磁干擾性低,信息容易被竊取。
與PCI總線相比,第三代高性能I/O總線——PCI Express(以下簡稱PCI-E)總線在總線結構上采取了根本性的變革。一是由并行總線變?yōu)榇锌偩€,二是采用點到點的互連。PCI-E總線×1通路數(shù)據(jù)傳輸率達0.5 Gb/s,32通路時可高達可達到16 Gb/s,大大高于目前任何一種總線,可以滿足當前及將來一段時期高速設備的帶寬需求。同時,由于總線變成鏈路,PCI-E引腳數(shù)大大減少,平均帶寬大幅提升[1]。
與電纜等其他通信介質相比,光纖通信具有傳輸速度快、損耗低、容量大、占用帶寬低、抗電磁干擾的優(yōu)點,非常適合于遠程高速數(shù)據(jù)傳輸。
由此,本文提出了基于PCI Express總線的高速光纖通信方式。在分析PCI Express協(xié)議、LocalLink協(xié)議和Aurora協(xié)議的基礎上,使用Virtex 5 XC5VLX50T FPGA進行接口卡的硬件設計,實現(xiàn)了PCI-E的DMA控制和光纖遠程傳輸,滿足了大容量數(shù)據(jù)的高速實時傳輸需求。
高速光纖接口卡主要分為PCI-E金手指、FPGA、光模塊、配置 PROM、時鐘管理、電源管理6個模塊,如圖1。
當主機通過板卡向外發(fā)送數(shù)據(jù)時,數(shù)據(jù)經(jīng)PCI-E插槽傳給FPGA的PCI-E差分接收端,并經(jīng)DMA控制后,被大量取出,放入發(fā)送FIFO中進行緩存。在發(fā)送FIFO控制邏輯下,F(xiàn)IFO數(shù)據(jù)被轉化為16 bit的LocalLink格式傳給 Aurora IP(Intelligence Property)核。Aurora IP 核通過GTP差分發(fā)送端將數(shù)據(jù)傳送給光模塊。數(shù)據(jù)經(jīng)過光模塊的電光轉化后,由光纖傳出板卡。主機通過板卡接收外界數(shù)據(jù)的過程與上述過程基本相反,如圖1。
FPGA是板卡的核心器件。在此選用Xilinx公司Virtex-5系列XC5VLX50T芯片。FPGA負責實現(xiàn)板卡的主要邏輯,包括:(1)PCI Express的物理層、數(shù)據(jù)鏈路層、事務層的實現(xiàn);(2)PCI Express的 DMA控制;(3)控制發(fā)送、接收緩沖;(4)LocalLink鏈路接口;(5)利用 Aurora協(xié)議實現(xiàn)光纖接口。
LocalLink接口是一種點對點的高效同步連接協(xié)議,可以連接用戶設計與系統(tǒng)級Xilinx IP核。在PCI-E高速板卡的設計中,Xilinx提供的Aurora核和PCI-E核均采用LocalLink接口與用戶邏輯進行通信[2]。
以往PCI-E的實現(xiàn)主要使用專用接口芯片(如PEX-8311)或使用FPGA編程實現(xiàn)PCI-E各層。第一種方法利用接口芯片實現(xiàn)物理層、數(shù)據(jù)鏈路層和事務層的邏輯控制,但使用芯片多、成本高。第二種方法具有靈活的可編程性,但是開發(fā)難度比較大,開發(fā)周期長。因此,Xilinx為PCI-E設計提供了第三種快速高效的解決方案,即利用Virtex-5芯片內嵌的Rocket I/O模塊、硬核端點PCI-E模塊及可選的軟核IP,大大降低了PCI-E的開發(fā)難度。
板卡設計中,使用IP核Endpoint Block Plus for PCI Express,并配置其為×4 PCI-E通路,傳統(tǒng) INTx中斷,僅使用BAR0區(qū)用作程序中的控制寄存器區(qū)。該IP核與PCI Express V1.1規(guī)范完全兼容,達到2.5 Gb/s的線速率, 支持×1、×4、×8多種通路, 支持 32vector的 MSI中斷,且具有時鐘補償、自動時鐘恢復、8B/10B編碼、流控等多種功能[3]。
PCI Express端點有PIO和DMA兩種數(shù)據(jù)傳輸方式。PIO方式是由CPU通過根復合器發(fā)起的讀寫操作,由于需要CPU的發(fā)起,所以速度和效率不是很高。DMA方式直接對內存進行讀寫,由本地PCI Express端點發(fā)出,其效率比PIO模式高出很多倍。DMA傳輸?shù)幕玖鞒倘鐖D2。
圖2 PCI-E DMA發(fā)送、接收數(shù)據(jù)過程圖
當主機通過板卡向外發(fā)送數(shù)據(jù)時,主機的PCI Express端口向板卡寫大量數(shù)據(jù)。如圖2(a)所示,可分為以下幾步:
①主機向板卡發(fā)送MWR(存儲器寫)TLP(事務層包),依次寫入要發(fā)送數(shù)據(jù)的地址、總長度len_sum,及控制寄存器的發(fā)送開始位,從而啟動DMA發(fā)送。
②板卡根據(jù)①中的地址和總長度,發(fā)送MRD(存儲器讀)請求,申請讀取長度為len_temp的有效數(shù)據(jù)。注意讀請求申請的長度len_temp不得大于主機PCI-E設備控制寄存器中Max Read Request Size所設定的長度,否則將不會返回正確長度的CPLD(帶有數(shù)據(jù)的完成)。
圖1 板卡系統(tǒng)框圖
③主機返回len_temp長度的CPLD。重復過程②和③,直至板卡總共收到len_sum長度的數(shù)據(jù),DMA過程完成,置位中斷標志寄存器的XMIT_COMP標志位。
④主機發(fā)送MRD,讀取中斷標志寄存器的值。
⑤板卡收到讀取中斷標志寄存器的請求后,返回中斷標志寄存器的值,并立即將中斷標志寄存器清0。
當主機通過板卡接收外界數(shù)據(jù)時,主機的PCI–E端口從板卡讀大量數(shù)據(jù)。如圖2(b)所示,可分為以下幾步:
①主機向板卡發(fā)送MWR,依次寫入主機中準備存放數(shù)據(jù)的地址、控制寄存器的接收開始位,從而啟動DMA傳輸。
②當接收FIFO中收到不少于某一定量的數(shù)據(jù)后,板卡通過多個MRD將這些數(shù)據(jù)寫入主機,完成一個包的DMA傳輸。注意每次寫請求的長度不得大于主機PCI-E設備控制寄存器中Max Payload所設定的長度,否則將不能完整寫入數(shù)據(jù)。
重復②直至寫入MAX_PACK_COUNT個包或超時時間到達,置位中斷標志寄存器的RECV_COMP位,并將收到包的總個數(shù)保存到接收包個數(shù)寄存器。
③主機發(fā)送存儲器讀請求,讀取中斷標志寄存器。
④板卡收到讀取中斷標志寄存器的請求后,返回中斷標志寄存器的值,并立即將中斷標志寄存器清0。
⑤主機發(fā)送存儲器讀請求,讀取接收包個數(shù)寄存器的值。
⑥板卡返回CPLD,攜帶數(shù)據(jù)為接收包的個數(shù)。
DMA控制邏輯的組成如圖3所示。
接收狀態(tài)機負責根據(jù)板卡從主機接收到的TLP包類型進行相應的處理,并將欲發(fā)送給光纖的數(shù)據(jù)存入發(fā)送FIFO。根據(jù)圖2可見,接收狀態(tài)機需要處理的事務包括 MWR、MRD、CPLD。
發(fā)送狀態(tài)機負責從接收FIFO中取數(shù)據(jù),并根據(jù)DMA控制的狀態(tài),發(fā)送相應的TLP包給主機。根據(jù)圖2可見,接收狀態(tài)機需要處理的事務包括MWR、MRD、CPLD。
中斷處理可以產生MSI或INTx兩種模式的中斷[1]。具體模式可以通過配置MSI控制寄存器的值來選擇。板卡中定義的中斷有XMIT_COMP、RECV_COMP。板卡收到主機的讀中斷請求后,要及時清除中斷標志,以防止中斷再次誤觸發(fā)。主機根據(jù)讀取到的中斷標志寄存器的值進入相應的中斷處理程序進行處理。
錯誤處理可以將DMA控制模塊中產生的錯誤匯報給 PCI-E IP核,包括非轉發(fā) UR(Unexpected Request)錯誤、轉發(fā)UR錯誤、超時錯誤等。
發(fā)送FIFO及接收FIFO均為異步FIFO,除進行數(shù)據(jù)緩存外,還完成了數(shù)據(jù)寬度32 bit和16 bit之間的相互轉化及時鐘域的變化。
光纖通道通過Aurora協(xié)議實現(xiàn)。Aurora協(xié)議是一種可升級、小型鏈路層協(xié)議,可以用來進行點到點的串行鏈路數(shù)據(jù)傳輸,同時消除了其他串行協(xié)議的資源不足、效率低等問題。Aurora是一個開放的協(xié)議,可以在包括FPGA、ASIC、ASSP在內的任何硅器件技術中實現(xiàn)。Aurora支持光纖、TCP/IP、以太網(wǎng)等高層協(xié)議[4]。
在Xilinx的FPGA器件中,可以通過IP核GTP Aurora實現(xiàn)。其不僅定義了Aurora協(xié)議的物理接口,而且定義了包結構、數(shù)據(jù)提取和流量控制等。IP核生成文件中包含有效鏈路的初始化程序、發(fā)生過量錯誤的鏈路相關程序、嵌入其他協(xié)議包的推薦程序等。
在本文的高速光纖網(wǎng)卡設計中,采用125 MHz參考時鐘,進行1通道帶流量控制的全雙工幀接口通信,可達到1.25 Gb/s線速率。
在板卡的開發(fā)設計過程中,對其進行了軟件仿真及實際性能測試。
軟件仿真中,利用Modelsim前仿真功能,對設計的正確性進行驗證;利用其后仿真功能,分析布局布線對設計的影響。仿真時,將Xilinx提供的下行端口(Downstream port model)測試平臺與自己的設計相連。下行端口模型的用途是模擬主機PCI-E端口,為生成下行 PCI Express TLP流量提供源機制,以驅動客戶設計,同時提供目標機制,以在仿真環(huán)境中接收來自客戶設計的上行 PCI Express TLP[5]。后仿真中,發(fā)現(xiàn)布局布線會對功能有一定的影響。對關鍵路徑進行修改后得到的最終發(fā)送和接收的DMA仿真波形如圖4和圖5所示。由圖可見,設計實現(xiàn)了預期的功能,且通過DMA,有效提高了PCI-E的數(shù)據(jù)速率。
實際性能測試中,將插有Agilent 1310 nm雙向單模SFP光模塊(極限速率1.25 Gb/s)的兩塊高速光纖網(wǎng)卡分別插入兩臺服務器Dell Power Edge R310的PCI-E插槽中,并使用chipscope對關鍵信號進行邏輯分析。通過連續(xù)發(fā)送大批量數(shù)據(jù),對板卡進行性能測試。測試結果表明,板卡可以穩(wěn)定地達到700 Mb/s的通信速率,滿足設計要求。
圖4 發(fā)送DMA仿真波形
圖5 接收DMA仿真波形
板卡的速度瓶頸主要在于光纖接口。若要提高板卡速率,可以使用更高速的光模塊或使用多個光纖鏈路。
經(jīng)過測試,該接口卡可以實現(xiàn)數(shù)據(jù)的高速、實時、穩(wěn)定傳輸。該光纖接口卡在高速數(shù)據(jù)遠程采集、遠程實時控制、高速數(shù)據(jù)交換、高速光纖網(wǎng)絡通信等領域,將有廣闊的應用前景。
[1]馬鳴錦,朱劍冰,何紅旗,等.PCI、PCI-X和 PCI Express的原理及體系結構[M].北京:清華大學出版社,2007.
[2]Xilinx.LocalLink Interface Specification SP006.July 25,2005.
[3]Xilinx.Endpoint Block Plus v1.9 for PCI Express DS551.2008(9),19.
[4]田耘,胡斌,徐文波.Xilinx ISE Design Suite 10.x FPGA開發(fā)指南——DSP、嵌入式與高速設計篇[M].北京:人民郵電出版社,2008.
[5]Xilinx.LogiCORE IP Endpoint Block Plus v1.9 for PCI Express User Guide UG341.2008(9),19.