呂 鵬,趙潤卓,王春燕,湯新廣
(1.河北省電磁頻譜認知與管控重點實驗室,河北 石家莊 050000; 2.中國電子科技集團公司第五十四研究所,河北 石家莊 050081; 3.南開大學 物理科學學院,天津 300071; 4.河北軌道運輸職業(yè)技術學院 機電系,河北 石家莊 050000)
面對瞬息萬變的國際形式,國家正在全力推行利用國產(chǎn)化操作系統(tǒng)替換國外的操作系統(tǒng),并完成關鍵技術的研制,這已經(jīng)成為目前的主要任務。而高速數(shù)據(jù)的傳輸又是所有技術發(fā)展的一個關鍵的技術基礎。
現(xiàn)在高速數(shù)據(jù)傳輸技術已經(jīng)在圖像處理、數(shù)字信號處理等多個領域的應用變得越來越復雜,速率要求越來越高。為了提升數(shù)據(jù)高速傳輸、解析的能力,需要使用一種更加靈活、快捷的傳輸方式。當前主流的高速數(shù)據(jù)傳輸技術主要包括PCIE(PCI Express)、SRIO(Serial RapidIO)、萬兆網(wǎng)等,其中SRIO串行傳輸技術主要是面向嵌入式系統(tǒng)開發(fā)的高可靠、高性能,基于包交換的新一代高速互聯(lián)技術[1]。該技術利用串行背板、FPGA、DSP和相關串行數(shù)據(jù)平面,通過SRIO路由配置構(gòu)建一個星型或網(wǎng)狀的拓撲結(jié)構(gòu),實現(xiàn)系統(tǒng)內(nèi)所有節(jié)點任意、高速的數(shù)據(jù)傳輸[2]。
傳統(tǒng)的SRIO路由配置方式為PPC或DSP 為主的架構(gòu),該方式主要實現(xiàn)PPC或DSP對具有SRIO功能的設備芯片進行初始化、狀態(tài)查詢、路由配置等功能。這種架構(gòu)不僅對主配芯片功能壓力較大,需要考慮各種芯片的工作時序、運行狀態(tài)等多種影響因素,而且對嵌入式操作系統(tǒng)在程序調(diào)試、后期維護上也極不方便。
本文在VPX結(jié)構(gòu)的板卡上采用國產(chǎn)中標麒麟操作系統(tǒng)。該系統(tǒng)有著高安全性,其功能、穩(wěn)定性、效率方面都達到國外同類產(chǎn)品水平,部分指標還要優(yōu)于國外同類水平,并且具有編程容易、調(diào)試方便、應用廣泛的優(yōu)點,實現(xiàn)對SRIO的快速配置[3],極大地減少了板卡啟動時間,功能劃分更加簡單、清晰明了。
利用SRIO串行總線傳輸效率高、拓撲靈活、高可靠性、高實時性的特點,保證對多種不同來源數(shù)據(jù)連續(xù)性傳輸?shù)囊?,研制了如圖1所示的板卡。
圖1 板卡連接框圖Fig.1 Board connection block diagram
該板卡主要由中標麒麟操作系統(tǒng)、橋芯片TSI721、交換芯片CPS1848、單片機和FPGA五部分組成。其中麒麟操作系統(tǒng)運行在X86架構(gòu)的Intel E2680 CPU上,該CPU為8核,2.8 GHz主頻,并自帶集成GPU,運算處理能力突出。單片機型號為C8051F041,該芯片不僅性價比高,而且體積小、集成度高,便于簡單程序的開發(fā)和應用。橋芯片TSI721解決了X86架構(gòu)下PCIE總線和SRIO總線互聯(lián)的問題。交換芯片CPS1848可以實現(xiàn)同時向不同節(jié)點傳輸多路數(shù)據(jù)的目的,極大提升程序的開發(fā)效率和拓寬課題的復雜應用。FPGA選用Xlinx公司的K7 325T,主要用于信號處理等功能。
SRIO總線作為一種串行高速總線,因其傳輸速率高、低功耗、低延遲特性,已經(jīng)在越來越多的方面得到應用[4]。其主要通過嵌入式系統(tǒng)內(nèi)部互聯(lián)和嵌入式設備與背板的連接,實現(xiàn)各芯片間的數(shù)據(jù)傳輸[5]。不同的SRIO總線終端器件以器件 ID 區(qū)分,作為數(shù)據(jù)包的源節(jié)點或目的節(jié)點,器件 ID分為8位和16位2種,最多可容納 256 或 65 536個終端器件[6]。
SRIO總線分為維護包和數(shù)據(jù)包2種,數(shù)據(jù)傳輸速率高達6.25 Gb/s,維護包可以訪問DSP、FPGA、TSI721和CPS1848等具有SRIO總線接口的芯片。通過對芯片的配置,實現(xiàn)所有芯片的互聯(lián),利用維護包還可以實現(xiàn)對指定芯片的SRIO維護,具體包括端口狀態(tài)獲取、端口維護、路由配置、路由修復、ID修改、速率更改等功能。由于維護包和數(shù)據(jù)包可以同時使用,因此可以在數(shù)據(jù)傳輸過程中,通過實時檢測所有芯片路由狀態(tài),及時做出相應處理。
數(shù)據(jù)傳輸?shù)哪J绞峭ㄟ^配置路由方式實現(xiàn)的,路由不僅可以決定任意數(shù)據(jù)是直接傳輸?shù)侥康墓?jié)點還是“繞道”傳輸?shù)侥康墓?jié)點,還能決定數(shù)據(jù)同時發(fā)送給指定的幾個目的節(jié)點。合理有效的路由配置,能夠極大地提升后期數(shù)據(jù)處理能力和數(shù)據(jù)的傳輸帶寬,最終達到提升整個系統(tǒng)處理能力的目的。
SRIO路由配置已經(jīng)成為數(shù)據(jù)高速傳輸?shù)囊粋€必要環(huán)節(jié)。本文通過單片機+麒麟操作系統(tǒng)的方式,同時利用橋芯片TSI721和交換芯片CPS1848,在VPX機箱上開發(fā)出一套高速、靈活的數(shù)據(jù)處理板卡。其中單片機主要負責交換芯片上電初始化功能,麒麟操作系統(tǒng)主要負責后期的路由配置、數(shù)據(jù)傳輸和算法處理等。
TSI721是IDT公司推出的一款橋芯片,支持1路PCIE 2.1 X1/X2/X4及1路SRIO X1/X2/X4接口,實現(xiàn)PCIE與SRIO總線間協(xié)議無縫轉(zhuǎn)換[7],保證數(shù)據(jù)傳輸在轉(zhuǎn)換過程中的高效性和可靠性[8]。本板卡如圖1所示,TSI721一端通過1,利用PCIE總線與麒麟操作系統(tǒng)相連,另一端的2則是SRIO總線連接到CPS1848交換芯片上。這樣麒麟操作系統(tǒng)不僅可以獲取TSI721的VEN、DEV、SRIO ID、端口狀態(tài)、SRIO速率等信息,同時通過路由程序可以訪問交換芯片CPS1848,進而訪問FPGA和其余板卡的SRIO芯片,最終實現(xiàn)數(shù)據(jù)通信的目的[9]。
CPS1848與TIS721一樣,都是由IDT 公司研發(fā)的,具有SRIO 2.1標準。主要實現(xiàn)芯片間多端口數(shù)據(jù)互聯(lián)功能[10]。該芯片有48個雙向數(shù)據(jù)差分對(lane),具有 1x、2x和4x三種端口模式,3種模式下的端口個數(shù)配置方式為48/端口模式,比如4x的端口個數(shù)為12個(48/4),每個lane支持1.25,2.5,3.125,5或6.25 Gb/s四種傳輸速率[11]。
本文使用SRIO為X4模式,一共12個端口,具體連接方式如圖1所示。其中1個SRIO X4通過2與1個TSI721相連,板卡總共使用了2個TSI721,則連接了2個SRIO X4,達到增加SRIO傳輸帶寬的目的。同時與FPGA通過標號4的一個SRIO X4相連,6號則表示CPS1848與背板連接的剩余9對SRIO,實現(xiàn)與其余板卡通信的目的。通過對CPS1848寄存器的訪問,可以實現(xiàn)對整個板卡甚至分機的路由維護和更新,主要寄存器功能如表1所示[12]。
表1 CPS1848寄存器功能介紹Tab.1 Introduction to CPS1848 register function
具體實現(xiàn)過程為:
① 系統(tǒng)上電后,單片機首先設置SRIO速率并通過FPGA對交換芯片CPS1848進行復位操作,當?shù)却粨Q芯片復位后,對所有端口進行讀寫使能操作;
② 麒麟操作系統(tǒng)通過PCIE總線確定橋芯片TSI721端口鏈接狀態(tài),并利用SRIO總線維護包對TSI721進行ID修改和路由配置;
③ 利用SRIO維護包對橋芯片TSI721與交換芯片CPS1848間的路由進行配置;
④ 配置交換芯片CPS1848的ID及路由信息;
⑤ 判斷FPGA的端口連接狀態(tài),配置FPGA與CPS1848間的路由,并通過維護包修改FPGA的節(jié)點ID及更新路由信息;
⑥ 如果分機內(nèi)部插有其余板卡,則CPS1848對外的9個端口中的一個或幾個與其相連,通過背板的連線關系,利用SRIO維護包可以訪問到其余板卡上的交換芯片或者節(jié)點芯片(FPGA/DSP等),并對其進行ID修改和路由配置。
通過以上6步配置,可以實現(xiàn)對板卡SRIO的數(shù)據(jù)操作。
如果需要將一種數(shù)據(jù),同時發(fā)送給多個設備節(jié)點,可以利用廣播路由的方式加以實現(xiàn)。而當整個路由系統(tǒng)中有一個設備節(jié)點,比如FPGA,在不斷電情況下程序進行了更新,SRIO狀態(tài)被還原,可以通過路由維護的方式,將該節(jié)點維護到之前的路由系統(tǒng)中,保證系統(tǒng)運行的完整性。
單片機主要使用I2C總線,該總線是一種“二線”結(jié)構(gòu),分別使用串行數(shù)據(jù)傳輸線SDA和串行時鐘控制線SCL實現(xiàn)數(shù)據(jù)傳輸[13]。該總線具有自動找尋從器件地址,使較高速率設備與較低速率設備間實現(xiàn)同步傳輸和優(yōu)化挑選需要的從器件進行高性能數(shù)據(jù)傳送的特點[14]。因此采用單片機對板卡上SRIO鏈路和交換芯片進行初始化操作,具體流程如下:
① 通過板卡原理圖,查找單片機與CPS1848的連接管腳,如圖2所示。
② C8051與CPS1848管腳連接圖如圖3所示,通過專用軟件Configuration Wizard 2對指定管腳按照原理圖的連接關系進行定義后生成如下代碼:
P3MDOUT = 0x18;
XBR0 = 0x01;
XBR2 = 0x40;
③ 編寫單片機程序,利用單片機的I2C總線配置交換芯片CPS1848的速率,控制FPGA對CPS1848上電復位,使能交換芯片所有數(shù)據(jù)傳輸端口,具體程序如下所示:
CPS1848_REG_Write(96,CPS1848_PORT_X_CTL_1_CSR(nPort),value | 0x00800000);
CPS1848_REG_Write(96,CPS1848_PLL_X_CTL_1(nPortNum),1);
CPS1848_REG_Write(96,CPS1848_LANE_X_CTL(nPortNum*4),0x00001e0a);
CPS1848_REG_Write(96,CPS1848_LANE_X_CTL(nPortNum*4 + 1),0x00001e0a);
CPS1848_REG_Write(96,CPS1848_LANE_X_CTL(nPortNum*4 + 2),0x00001e0a);
CPS1848_REG_Write(96,CPS1848_LANE_X_CTL(nPortNum*4 + 3),0x00001e0a);
CPS1848_REG_Write(96,CPS1848_DEVICE_RESET_CTL,0x80040000 | (1< for(i = 0;i<12;i++) { CPS1848_REG_Write(96,CPS1848_PORT_X_CTL_1_CSR(i),0xD0600001);∥enable input and output*/ } 圖2 C8051與CPS1848管腳連接Fig.2 CPS1848 and CPS1848 pin connector CPS1848_REG_Write的第一個參數(shù)為dev_address,表示CPS1848 I2C的設備地址。通過圖4的連接關系可知,圖中ID0~ID9 十個管腳上ID5和ID6接上拉電阻值為1,其余值為0,則該函數(shù)第一個參數(shù)值為96。 圖3 C8051與CPS1848管腳連接圖Fig.3 C8051 and CPS1848 pin connector 圖4 CPS1848 dev_address連接關系Fig.4 CPS1848 dev_address connection relationship 中標麒麟操作系統(tǒng)為國內(nèi)首款自主、高安全等級的可信操作系統(tǒng)。該系統(tǒng)是我國“核高基”項目的重要研究成果,具有重要意義。麒麟系統(tǒng)兼容主流的軟硬件和自主CPU平臺,能夠完全滿足項目應用開發(fā)和系統(tǒng)定制的需求[15]。 由于麒麟操作系統(tǒng)通過PCIE總線與TSI721相連,并利用TSI721的SRIO連接到CPS1848上。因此,如果想利用麒麟操作系統(tǒng)配置整個板卡甚至整個分機的路由,則需要同時使用PCIE總線和SRIO總線。具體使用方式為: ① 打開板卡。由于本板卡連接2個TSI721,因此需要分別設置打開的板卡號為0和1; ② 利用PCIE總線查詢麒麟操作系統(tǒng)與TSI721的連接狀態(tài)和TSI721的原始ID信息; ③ 利用SRIO總線維護包進行路由配置,數(shù)據(jù)包進行數(shù)據(jù)收發(fā)。 在配置數(shù)據(jù)包的時候需要創(chuàng)建發(fā)送窗和接收窗(發(fā)送窗 8個,接收窗 4個)、SRIO總線的基地址、讀寫傳輸模式(NWRITE、NREAD)、模式使能及訪問的窗口大小等參數(shù)[16]。同時為了適應不同系統(tǒng)規(guī)模的需求,設備ID分為大端模式和小端模式2種,其中小端模式為8 bit,大端模式ID為16 bit[17]。 通過2.6節(jié)單片機操作后,板卡上所有SRIO鏈路狀態(tài)均為正常,同時編寫C++程序,實現(xiàn)板卡路由配置和數(shù)據(jù)通信。具體功能實現(xiàn)代碼如下所示: status = Config_Route_Init(myTsi721,&srio_route,masterSlot); if(status = OK) { Config_Route_Master(myTsi721,&srio_route); Config_Route_Slave(myTsi721,&srio_route,masterSlot); Scan_ConfigRoute_DifSlots(myTsi721,&srio_route); } if(!myTsi721->IbwinFree(0)) { printf("free is wrong
"); } if(!myTsi721->IbwinCreate(0,0,0,1024*1024)) { printf("create is wrong
"); } dmaCtrl.bits.Iof = 0; dmaCtrl.bits.Crf = 0; dmaCtrl.bits.Prio= 0; dmaCtrl.bits.Rtype = LAST_NWRITE_R; dmaCtrl.bits.XAddr = 0; partnDestId = 0x68; dwDataSize = 4; data = 0x01215643; dwErr=TSI721SrioWrite(myTsi721->m_hDev,partnDestId,0,0x01000000,&data,&dwDataSize,dmaCtrl); partnDestId = 0x68; dmaCtrl.bits.Prio = 1; dwDataSize = 4; dwErr=TSI721SrioRead(myTsi721->m_hDev,partnDestId,0,0x01000000,&dataret,&dwDataSize,dmaCtrl) 為了進行數(shù)據(jù)測試,將該板塊插到了一個8槽的VPX分機內(nèi),分機中除了本板卡外還有一塊帶有SRIO總線的DSP設備,利用麒麟操作系統(tǒng)進行SRIO路由配置,并對2個板卡狀態(tài)、分機內(nèi)部各節(jié)點(麒麟操作系統(tǒng)、FPGA、DSP)進行測試,驗證上節(jié)的配置過程、板卡工作狀態(tài)和SRIO數(shù)據(jù)通信的正確性,并測試傳輸速率。其中數(shù)據(jù)傳輸采用DMA方式,數(shù)據(jù)包大小為1 MB,傳輸方式為NWRITE和NREAD雙向傳輸。具體測試過程如下: ① 分別通過PCIE總線設置TSI721的SRIO速率及利用SRIO維護包設置CPS1848的端口速率,如果速率設置的不一致,則訪問不到對方的設置信息。 ② 利用PCIE總線讀取麒麟操作系統(tǒng)與TSI721鏈接狀態(tài),并利用SRIO維護包分別讀取CPS1848與TSI721、FPGA、DSP板卡的鏈接狀態(tài)信息,如果鏈接狀態(tài)為0xc0000002或0xe0000002,則SRIO鏈接狀態(tài)正確;如果為0xc0000001或0xe0000001,則表示沒有鏈接成功,其余值則表示鏈接狀態(tài)信息有誤,通過復位本方或者對方端口的方式,修復鏈接狀態(tài)。對應的寄存器偏移量為0x158+n×0x20(n為端口號),具體信息如圖5所示。 ③ 通過SRIO維護包訪問CPS1848。如果訪問成功,則說明單片機對CPS1848上電復位操作正確。 圖5 端口狀態(tài)寄存器信息Fig.5 Port status register information ④ 通過配置麒麟操作系統(tǒng)與2個TSI721的自環(huán)方式,測試CPS1848與2個TSI72通信是否正確;同樣測試麒麟操作系統(tǒng)與FPGA的數(shù)據(jù)收發(fā)可以測試CPS1848與FPGA的端口通信是否正確;測試CPS1848的對外的端口,則需要DSP板卡分別插到不同的槽位上,測試麒麟操作系統(tǒng)與DSP的通信是否正確來驗證CPS1848的對應端口通信是否正確。 ⑤ 通過④ 的不同配置方式,測試了不同節(jié)點的通信正確性的同時,可以測試不同節(jié)點之間的數(shù)據(jù)傳輸速率,具體測試結(jié)果如表2所示。 表2 板卡功能測試統(tǒng)計Tab.2 Function test statistics of board card 最后在調(diào)試過程中需要注意以下幾點: ① 分機上電后要優(yōu)先進行單片機的所有操作,并確保所有狀態(tài)正常。 ② 利用麒麟操作系統(tǒng)給分機內(nèi)交換芯片及DSP節(jié)點分配ID,要求ID必須唯一。 ③ 麒麟操作數(shù)據(jù)傳輸開始需要創(chuàng)建窗申請資源,最后需要釋放窗資源。 ④ 數(shù)據(jù)傳輸盡量不要在一個通道上進行多種數(shù)據(jù)傳輸,會影響傳輸效率。 ⑤ 麒麟操作系統(tǒng)數(shù)據(jù)傳輸?shù)臅r候最好使用門鈴的方式,這樣傳輸?shù)男矢摺?/p> 通過單片機和X86架構(gòu)下麒麟操作系統(tǒng)配置SRIO路由的設計方法不僅充分發(fā)揮單片機和操作系統(tǒng)易于開發(fā)和維護的優(yōu)點,同時將SRIO高速串行總線與橋芯片TSI721和交換芯片CPS1848配合使用。既實現(xiàn)了數(shù)據(jù)的高速傳輸,保證數(shù)據(jù)的實時性,又達到了數(shù)據(jù)可以任意節(jié)點互聯(lián)傳輸?shù)哪康摹T摷夹g的實現(xiàn)為后續(xù)算法的調(diào)試提供堅實的基礎。1.7 麒麟操作系統(tǒng)工作原理
2 實驗與測試
3 結(jié)束語