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