(中國西南電子技術(shù)研究所,成都 610036)
在傳統(tǒng)的嵌入式系統(tǒng)中,受處理器速度和性能的限制,系統(tǒng)對數(shù)據(jù)傳輸?shù)乃俾室蟛桓?。然而,隨著CPU、DSP、FPGA和ADC技術(shù)的迅速發(fā)展,傳統(tǒng)的分層共享總線已經(jīng)無法滿足現(xiàn)在高性能嵌入式系統(tǒng)的IO性能需求和信號(hào)處理高速數(shù)據(jù)傳輸需求。系統(tǒng)互聯(lián),即板間各種信號(hào)高速實(shí)時(shí)交互,成了制約嵌入式系統(tǒng)性能提升的一個(gè)主要瓶頸。
RapidIO作為解決各系統(tǒng)板間數(shù)據(jù)高速互連的國際通用協(xié)議,得到了越來越多主流芯片廠商的支持,有廣闊的應(yīng)用發(fā)展空間。串行RapidIO的互連架構(gòu)是一種高性能、低引腳數(shù)、基于包交換的交叉開關(guān)互連技術(shù)。本文提出了基于PowerPC的RapidIO高速通信協(xié)議來解決這一瓶頸的軟硬件實(shí)現(xiàn)方式。
PowerPC作為高端的嵌入式系統(tǒng)處理器,在航空、航天、雷達(dá)終端等電子設(shè)備領(lǐng)域有著廣泛的應(yīng)用。RapidIO協(xié)議有多種實(shí)現(xiàn)方式:可以通過FPGA加入IPCORE的方式,但這種方式受限于IPCORE對器件的限制和對協(xié)議實(shí)現(xiàn)的不完全,很難運(yùn)用于嵌入式系統(tǒng)實(shí)時(shí)的主控操作;還可以通過一些DSP提供的RapidIO硬件接口實(shí)現(xiàn),通過操作DSP提供的RapidIO專用寄存器能輕松進(jìn)行RapidIO設(shè)備間的讀寫,但是DSP是單線程操作,很難加入實(shí)時(shí)操作系統(tǒng)對任務(wù)進(jìn)行管理和調(diào)度。因此,本次設(shè)計(jì)最終選擇了通過PowerPC提供的RapidIO硬核實(shí)現(xiàn)。本次方案設(shè)計(jì)選用Freescale公司針對Serial RapidIO推出的最新PowerPC——MPC8548E。
由于串行RapidIO采用的是點(diǎn)對點(diǎn)技術(shù), 在需要2個(gè)以上RapidIO接口處理或橋接部分的系統(tǒng)中都需要采用一臺(tái)交換機(jī)。因此,本次設(shè)計(jì)選用了Tundar公司針對串行RapidIO推出的專用交換機(jī)Tsi745。Tsi745交換機(jī)可實(shí)現(xiàn)與串行RapidIO 兼容的微處理器、DSP、FPGA 及其它外圍設(shè)備互聯(lián), 支持40 Gbit/s的整合帶寬。
作為終端顯控的嵌入式系統(tǒng),本次設(shè)計(jì)還加入了2個(gè)千兆以太網(wǎng)口以及4個(gè)串口控制器,作為與外部板卡連接的必要工具,RapidIO信號(hào)通過VPX插座傳輸。整個(gè)硬件框圖如圖1所示。
圖1 MPC8548E硬件連接框圖Fig.1 Block diagram of MPC8548E hardware
在硬件設(shè)計(jì)方面,首先要注意電源。在上電時(shí),采用單5 V供電,MPC8548E的瞬時(shí)電流最高能到8 A,穩(wěn)定時(shí)為2.5 A左右,因此 MPC8548E對于電源負(fù)載能力要求很高。MPC8548E核心電壓為1.1 V,為了能在1.5 GHz的頻率下正常運(yùn)行,需要一個(gè)獨(dú)立無干擾的電源層,本文采用TI公司的直流開關(guān)電源轉(zhuǎn)換芯片TPS54010,最高能提供10 A穩(wěn)定電流。DDR2芯片和MPC8548E自帶的控制器的參考電壓為1.8 V,兩者也需要獨(dú)立回路的電源層。其它大多數(shù)器件都只需要3.3 V的單電源供電,其回路需要的電流也很大,采用的也是TI公司的開關(guān)電源轉(zhuǎn)換芯片TPS 54810 PWP,也能提供最大10 A的穩(wěn)定電流。由于整個(gè)系統(tǒng)對電源的穩(wěn)定性要求極高,本文采用了MAXSIM公司的MAX16006電源監(jiān)控芯片,對各個(gè)電源實(shí)時(shí)監(jiān)控,如果超出輸入?yún)⒖贾档?%,它會(huì)自動(dòng)產(chǎn)生全局復(fù)位信號(hào),從而保護(hù)整個(gè)電路。其次是時(shí)鐘信號(hào),本次設(shè)計(jì)需要多個(gè)不同時(shí)鐘源滿足各個(gè)器件的工作需求,MPC8548E需要一個(gè)范圍為20~80 MHz的系統(tǒng)時(shí)鐘,作為內(nèi)核PLL以及外圍DDR控制器等的時(shí)鐘參考。Tsi745交換機(jī)需要兩個(gè)獨(dú)立的時(shí)鐘,其中一路156.25 MHz差分時(shí)鐘輸入用來控制RapidIO信號(hào)的傳輸速率,一路100 MHz共模時(shí)鐘信號(hào)用以控制Tsi745內(nèi)部寄存器的訪問,千兆以太網(wǎng)也需要一個(gè)25 MHz的時(shí)鐘信號(hào),PCB布線時(shí),要注意它們不要相互干擾,以致傳輸數(shù)據(jù)錯(cuò)誤。然后在印制板繪制時(shí),需要注意一些差分等長線設(shè)計(jì)。由于DDR2運(yùn)行的頻率在533 MHz以上,其信號(hào)線、地址線和差分時(shí)鐘線都要按照自身手冊要求嚴(yán)格等長,RapidIO接收端需要端接一個(gè)0.1 μF的電容,在高速傳輸中隔離直流信號(hào)。4x的RapidIO信號(hào)接收和發(fā)送端也必須分別等長,并滿足50 Ω的阻抗匹配。
在進(jìn)行RapidIO讀寫前,先要在上電時(shí)對MPC8548和Tsi574進(jìn)行必要的硬件配置。本文設(shè)置為RapidIO Host模式,通信速率為1.25 Gbit/s。Tsi574端需要通過SP{n}-MODESEL、SP-IO-SPEED[1:0]、SP{n}-PWRDN引腳配置各個(gè)端口的模式、速率以及是否使能,本文設(shè)置為1x模式,速率是1.25 Gbit/s,每個(gè)端口都使能。硬件配置完成后,需要對RapidIO內(nèi)部寄存器進(jìn)行初始化配置,并完成對內(nèi)部Rapid IO和外部 Agent地址空間映射,最終就能像訪問外部存儲(chǔ)器一樣直接對這些地址空間操作,實(shí)現(xiàn)各個(gè)RapidIO器件的讀寫。由此可見,軟件上的關(guān)鍵就是對RapidIO寄存器的初始化配置和地址映射,簡單的流程如圖2所示。
圖2 RapidIO初始化軟件流程Fig.2 RapidIO software initialization flow
在啟動(dòng)RapidIO操作之前,首先要配置一些MPC8548E內(nèi)部寄存器。上電后,第一個(gè)要配置的就是TLB(Translation Lookaside Buffers)入口寄存器,為RapidIO讀寫操作設(shè)置內(nèi)存空間。TLB入口設(shè)置通過配置MAS0(MMU Assist Register0)、MAS1、MAS2、MAS7來實(shí)現(xiàn)。由于MAS寄存器是內(nèi)部特殊寄存器,只能通過匯編指令來訪問。
然后設(shè)置內(nèi)部區(qū)域寄存器(Local Area Window)來重新映射可以訪問的RapidIO讀寫內(nèi)存空間,需要設(shè)置兩個(gè)寄存器:LAWBAR(Local Access Window Base Address Register)設(shè)置RapidIO內(nèi)存空間的基地址,如0xC0000000; LAWAR (Local Access Window Attribute Register)設(shè)置本窗口的類型和大小,必須設(shè)置成RapidIO類型,大小根據(jù)實(shí)際需要確定,如0x80C0001B,C表示RapidIO,1B表示256M。
第三步檢查和同步RapidIO外圍鏈路。在任何RapidIO操作前,都要查看有沒有正確鏈接其它RapidIO器件。通過讀寄存器ESCSR(Error and Status Command and Status Register)來獲得鏈路的各種信息,ESCSR[PO]表示輸入輸出口已經(jīng)初始化完成,可以進(jìn)行下一步操作,如果有錯(cuò),就檢查ESCSR其它位,找出錯(cuò)誤地方,以便進(jìn)行下一步修改。
第四步就是設(shè)置Maintenance窗口,為配置外部交換機(jī)和其它RapidIO從設(shè)備作準(zhǔn)備。需要配置RapidIO Outbound窗口的3個(gè)寄存器為:ROWBAR(RapidIO Outbound Window Base Address Register)設(shè)置Outbound窗口的32位基地址,如0x000C0000;ROWAR(RapidIO Outbound Window Attributes Register)設(shè)置Outbound窗口使能、讀寫和大小等屬性,設(shè)置為Maintenance read和write,如0x8007070013;ROWTAR(RapidIO Outbound Window Translation Address Register)設(shè)置Outbound窗口外部器件ID、跳數(shù)和Maintenance操作高位地址,如0x3FC00000。
執(zhí)行的第一條RapidIO操作指令就是通過Maintenance read獲取外部第一個(gè)RapidIO設(shè)備的設(shè)備ID,對外部RapidIO從設(shè)備的寄存器空間讀寫都需要通過Maintenance read 或 write指令操作。本次設(shè)計(jì)使用的是交換機(jī)Tsi574,讀出的ID為0x05740002。然后對交換機(jī)進(jìn)行配置,需要讀出端口個(gè)數(shù)(RIO-SW-PORT Register),鎖定ID(HBDIDLCSR Register),然后更新路由查找表,通過設(shè)置RIO-ROUTE-CFG-DESTID 和 RIO-ROUTE-CFG-PORT確定發(fā)給主機(jī)的數(shù)據(jù)都在交換機(jī)內(nèi),且都通過正確的端口發(fā)送。
交換機(jī)配置好后,需要通過交換機(jī)查找下一級的RapidIO從設(shè)備,檢查到正確的鏈路后,也需要讀出其設(shè)備ID,從而判斷是哪一類器件。一般從器件的Device ID都是0xFF,需要把它修改為不同的ID,可以依次設(shè)置為1、2、3、4。最后還要更新路由查找表,使每個(gè)端口能正確收發(fā)數(shù)據(jù)。
為了正確讀寫外部RapidIO器件的配置空間,首先要配置各個(gè)從器件的LCSBA1CSR(Local Configuration Space Base Address 1 Command and Status Register),設(shè)置RapidIO在這個(gè)從器件內(nèi)的起始地址。然后配置主機(jī)Outbound窗口3個(gè)寄存器:ROWBAR、ROWAR、ROWTAR,這個(gè)在設(shè)置Maintenance窗口步驟中已經(jīng)配置過,但是要進(jìn)行一些修改,ROWBAR 起始空間應(yīng)從0x000C1100開始,ROWAR窗口屬性要設(shè)置為NREAD和NWRITE, ROWBAR需要設(shè)置Target ID和Outbound傳輸?shù)刂?,?x00401000。使能外部Rapid配置空間,還能在上電時(shí)通過主機(jī)啟動(dòng)RapidIO從設(shè)備。
為了使能內(nèi)存讀寫,在主機(jī)端配置好ROWBAR、ROWAR、ROWTAR寄存器后,還需要對各個(gè)從設(shè)備的Inbound窗口寄存器進(jìn)行設(shè)置:RIWBAR(RapidIO Inbound Window Base Address Register),設(shè)置好從設(shè)備端的RapidIO Inbound Window基地址;RIWAR(RapidIO Inbound Window Attributes Register)設(shè)置Inbound窗口屬性,包括窗口大小、讀寫模式和內(nèi)存映射等;RIWTAR(RapidIO Inbound Window Translation Address Register),設(shè)置從設(shè)備數(shù)據(jù)輸出起始地址。正常配置好這些寄存器后,就能像訪問內(nèi)存空間一樣對RapidIO設(shè)備進(jìn)行讀寫了。
本次設(shè)計(jì)用于某項(xiàng)目中信號(hào)處理板與顯控板實(shí)時(shí)數(shù)據(jù)傳輸通信中,要求每隔十幾微秒就傳輸3~4 kbyte數(shù)據(jù)。在Linux操作系統(tǒng)中,采用RapidIO 1x模式,在1.25 Gbit/s速率下進(jìn)行數(shù)據(jù)傳遞檢驗(yàn),實(shí)驗(yàn)框圖如圖3所示。
圖3 RapidIO 實(shí)驗(yàn)連接圖Fig.3 RapidIO experimental connection block diagram
首先在上電后,PowerPC先配置好交換機(jī)Tsi574,通過交換機(jī)找到3個(gè)RapidIO從設(shè)備,然后對這3個(gè)設(shè)備進(jìn)行初始化,包括修改Device ID、RapidIO Inbound、Outbound寄存器和配置讀寫的映射空間,根據(jù)通過串口打印在控制臺(tái)上的信息,一步步判斷初始化程度。RapidIO正確配置后,待Linux系統(tǒng)正常啟動(dòng)后,通過上位機(jī)電腦網(wǎng)絡(luò)發(fā)送數(shù)據(jù)到PowerPC,然后PowePC把收到的數(shù)據(jù)直接通過內(nèi)存讀寫分發(fā)給3個(gè)RapidIO從設(shè)備,從設(shè)備收到數(shù)據(jù)后,發(fā)送接收完成中斷,PowerPC再分別讀出3個(gè)從設(shè)備接收到的數(shù)據(jù)進(jìn)行比較。實(shí)驗(yàn)結(jié)果表明,在1.25 Gbit/s速率下使用Serial RapidIO協(xié)議通信,4 kbyte數(shù)據(jù)能在1 μs內(nèi)正確實(shí)時(shí)地傳送。
參考文獻(xiàn):
[1] Freescale Semiconductor. MPC8548E PowerQUICCTMIII Integrated Processor Family Reference Manual[M]//MPC8548ERM Datasheet.East Kilbride,USA:Freescale Semiconductor Inc,2007: 1035-1222.
[2] Lorraine McLuckie, Colin Cureton. Serial RapidIO Bring-Up Procedure on PowerQUICCTMIII[M].East Kilbride,USA:Freescale Semiconductor Inc,2005:3-38.
[3] 韋東山.嵌入式Linux 應(yīng)用開發(fā)完全手冊[M].北京:人民郵電出版社,2009:384-389.
WEI Dong-shan. Application of embedded Linux system[M].Beijing: People′s Posts and Telecommunications Press,2009:384-389.(in Chinese)
[4] 朱堅(jiān),徐光輝,朱利利.基于Serial RapidIO 的高速實(shí)時(shí)數(shù)據(jù)采集處理系統(tǒng)[J].電子質(zhì)量,2008(10):6-7.
ZHU Jian,XU Guang-hui,ZHU Li-li. High Speed Data Acquisition and Processing System Based on Serial RapidIO[J]. Electronics Quality, 2008(10):6-7.(in Chinese)
[5] 鄧豹,趙小冬.基于串行RapidIO的嵌入式互連研究[J]. 航空計(jì)算技術(shù), 2008,38(3):123-126.
DENG Bao,ZHAO Xiao-dong. Research of the Embedded Interconnection Frame Based on Serial RapidIO Technology[J]. Aeronautical Computing Technique,2008,38(3):123-126.(in Chinese)
[6] 王學(xué)寶,鄭波祥,朱勇.基于TSI568的RapidIO交換模塊設(shè)計(jì)[J].微計(jì)算機(jī)信息,2009, 25(6):104-106.
WANG Xue-bao, ZHENG Bo-xiang ,ZHU Yong. Design of RapidIO Switch Board Base on TSI568[J]. Micro Computer Information,2009,25(6):104-106. (in Chinese)