摘 要: 介紹了脫離仿真器直接使用外部計(jì)算機(jī)通過(guò)網(wǎng)口進(jìn)行程序代碼加載的基本原理, 討論分析了網(wǎng)絡(luò)接口,、FPGA接口和HPI接口的訪問(wèn)控制等關(guān)鍵技術(shù)。詳述了在包含CPU,、FPGA和DSP的復(fù)雜系統(tǒng)設(shè)計(jì)方案中基于以太網(wǎng)加載FPGA和DSP的實(shí)現(xiàn),。該技術(shù)在系統(tǒng)工程化的應(yīng)用中具有很好的前景。
關(guān)鍵詞: CPU,;以太網(wǎng),;FPGA;DSP,;HPI,;引導(dǎo)加載
隨著嵌入式技術(shù)的發(fā)展,嵌入式系統(tǒng)逐漸演變?yōu)橛晌⑻幚砥?、大?guī)模集成電路,、軟件技術(shù)和各種具體的行業(yè)應(yīng)用技術(shù)相結(jié)合的結(jié)果。嵌入式設(shè)備已經(jīng)在航空航天,、通信,、電子等行業(yè)得到廣泛應(yīng)用。在以微處理器為核心的嵌入式應(yīng)用系統(tǒng)中,對(duì)其中的FPGA和DSP的傳統(tǒng)加載都是通過(guò)硬件仿真器來(lái)完成的,。這在產(chǎn)品的初研階段非常適用,,然而在實(shí)際工程應(yīng)用中各種產(chǎn)品組裝成一個(gè)龐雜的系統(tǒng)時(shí)(如需對(duì)系統(tǒng)進(jìn)行軟件更新和維護(hù)時(shí)),傳統(tǒng)的加載方式就顯得極其不方便,程序代碼的引導(dǎo)加載就需要一種更加靈活,、高效的方法來(lái)實(shí)現(xiàn),而基于以太網(wǎng)加載FPGA和DSP的實(shí)現(xiàn)方法能很好地解決這個(gè)難題。
本文介紹了基于以太網(wǎng)加載FPGA和DSP的基本原理, 并通過(guò)該技術(shù)在某嵌入式主控設(shè)計(jì)中的應(yīng)用詳述了在包含CPU,、FPGA和DSP的復(fù)雜系統(tǒng)設(shè)計(jì)方案中基于以太網(wǎng)加載FPGA和DSP的實(shí)現(xiàn), 討論分析了網(wǎng)絡(luò)接口,、FPGA接口和HPI接口的訪問(wèn)控制等關(guān)鍵技術(shù)。
1 基于以太網(wǎng)加載FPGA和DSP的基本原理
基于以太網(wǎng)加載FPGA和DSP的實(shí)現(xiàn)過(guò)程為: 首先,外部計(jì)算機(jī)通過(guò)網(wǎng)絡(luò)接口將代碼傳送給微處理器,,并存儲(chǔ)到微處理器的Flash存儲(chǔ)器模塊,;然后,由微處理器分別通過(guò)FPGA的從串加載模式和DSP的主機(jī)引導(dǎo)加載(HPI接口)實(shí)現(xiàn)對(duì)FPGA和DSP程序代碼的引導(dǎo)加載。
基于TCP/IP協(xié)議的以太網(wǎng)是目前使用最廣泛的網(wǎng)絡(luò),。網(wǎng)絡(luò)協(xié)議通常分不同層次進(jìn)行開(kāi)發(fā),每一層負(fù)責(zé)不同的通信功能,。嵌入式設(shè)備通常根據(jù)微處理器的結(jié)構(gòu)特點(diǎn)和系統(tǒng)需要實(shí)現(xiàn)的功能,將TCP/IP協(xié)議嵌入到微處理器中,從而實(shí)現(xiàn)嵌入式系統(tǒng)的網(wǎng)絡(luò)接口功能[1-2]。
1.1 FPGA加載
FPGA常見(jiàn)的配置文件的加載模式有5種:主串加載模式,、從串加載模式,、主并加載模式、從并加載模式及JTAG加載模式,。其中,,JTAG加載模式在開(kāi)發(fā)調(diào)試階段使用。其余4種加載模式可分為串行加載方式和并行加載方式,,而串行加載方式和并行加載方式都有主,、從兩種模式。由于主模式的加載同步時(shí)鐘(CCLK)由FPGA提供,,從模式的加載同步時(shí)鐘(CCLK)由外部時(shí)鐘源或者外部控制信號(hào)提供,,為了方便微處理器控制加載過(guò)程,一般選擇使用從串模式,。
1.2 DSP加載
DSP常見(jiàn)的三種引導(dǎo)加載方式為仿真器引導(dǎo)加載、ROM引導(dǎo)加載,、主機(jī)引導(dǎo)加載,。
(1)仿真器引導(dǎo)主要用于調(diào)試階段,是一種特殊的主機(jī)引導(dǎo)加載方式,。
(2)ROM引導(dǎo)加載:在DSP外部復(fù)位信號(hào)被釋放后,芯片處于內(nèi)部復(fù)位保持狀態(tài), DSP芯片自動(dòng)地通過(guò)EDMA/QDMA將外部ROM中的1 KB程序搬入地址0處,。內(nèi)部復(fù)位完成后,DSP開(kāi)始從地址0處執(zhí)行指令。
(3)主機(jī)引導(dǎo)加載:DSP上電復(fù)位后, I/O部分將處于激活狀態(tài),可以進(jìn)行正常的通信,但DSP的內(nèi)核仍處于復(fù)位狀態(tài),一直等待主機(jī)向HPI控制寄存器中的DSPINT位置1,。這樣,主機(jī)就可以通過(guò)HPI接口訪問(wèn)DSP的整個(gè)存儲(chǔ)空間,對(duì)它們進(jìn)行初始化,。完成相關(guān)設(shè)置后,向DSPINT位寫(xiě)入1, DSP內(nèi)核結(jié)束復(fù)位狀態(tài),執(zhí)行地址0處的指令。
2 嵌入式數(shù)字處理系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)
2.1 硬件設(shè)計(jì)
嵌入式數(shù)字處理系統(tǒng)采用微處理器PowerPC作為主控CPU,主要執(zhí)行網(wǎng)絡(luò)控制等各種控制任務(wù),,其程序代碼相對(duì)固定,,存儲(chǔ)在Flash中。如圖1所示,選用Xilinx公司的XC3S1000和XC4VSX35這兩種FPGA分別做邏輯和變頻[3-4],,選用兩片TI公司的DSP TMS320C6416芯片完成數(shù)據(jù)處理與算法實(shí)現(xiàn),這些FPGA和DSP的程序代碼需實(shí)時(shí)更新[5],。
(1)網(wǎng)絡(luò)接口設(shè)計(jì)
以太網(wǎng)PHY采用Marvell公司PHY協(xié)議層千兆網(wǎng)卡88E1111[6],。88E1111是高性能千兆以太網(wǎng)收發(fā)芯片,可以完成所有PHY(物理層)功能,支持全雙工或半雙工的10/100/1 000 Mb/s三速以太網(wǎng),,支持8 bit數(shù)據(jù)總線,。CPU和以太網(wǎng)PHY、FPGA及DSP的接口基本電路如圖2所示,。CPU的網(wǎng)絡(luò)接口引腳和以太網(wǎng)PHY的網(wǎng)絡(luò)接口相連接,通過(guò)硬件配置模式HWCFG MODE[3:0]來(lái)確定88E1111的操作模式,,從而確定需要連接的引腳,如圖2所示,該設(shè)計(jì)選擇了RGMII模式,,以太網(wǎng)PHY通過(guò)網(wǎng)絡(luò)隔離濾波器HX5008與外部以太網(wǎng)接口相連,。
(2)FPGA接口設(shè)計(jì)
在從串模式下進(jìn)行FPGA程序加載僅需要使用CCLK、PROG_B,、INIT_B,、DONE、DIN這5個(gè)信號(hào)引腳,,微處理器使用通用IO管腳來(lái)配置FPGA,。此外還需要設(shè)置M[2:0]信號(hào)以選擇配置模式,根據(jù)芯片XC3S1000和XC4VSX35的模式設(shè)置其從串模式的配置均為M[2:0]=111,。
(3)HPI 接口設(shè)計(jì)
引導(dǎo)配置引腳BEA[19∶18]決定了TMS320C6416的引導(dǎo)加載模式,將DSP的EMIFB接口引腳BEA[19∶18]通過(guò)上下拉電阻配置成BEA[19∶18]=01,即選擇DSP為HPI加載方式,。HPI接口電路如圖2所示,主控CPU的數(shù)據(jù)總線、地址總線及控制I/O連接到FPGA上,,DSP的HPI接口數(shù)據(jù)總線和控制線也連接到FPGA上,,通過(guò)FPGA的接口邏輯設(shè)計(jì)將CPU和DSP連接起來(lái)。
2.2 軟件設(shè)計(jì)
2.2.1 網(wǎng)絡(luò)接口程序設(shè)計(jì)
(1)網(wǎng)絡(luò)通信協(xié)議設(shè)計(jì)
網(wǎng)絡(luò)通信協(xié)議設(shè)計(jì)主要是實(shí)現(xiàn)TCP/IP 協(xié)議,。根據(jù)嵌入式系統(tǒng)結(jié)構(gòu)特點(diǎn)和系統(tǒng)設(shè)計(jì)實(shí)現(xiàn)的功能需求,在TCP/IP 協(xié)議的基礎(chǔ)上實(shí)現(xiàn)系統(tǒng)所需功能,。
(2)網(wǎng)絡(luò)接口的訪問(wèn)控制
驅(qū)動(dòng)程序設(shè)計(jì)包括以太網(wǎng)PHY芯片的初始化、數(shù)據(jù)包的發(fā)送和接收,。Freescale的MPC8377自帶了三速以太網(wǎng)控制器ETSEC,,作為以太網(wǎng)接口與外部的PHY芯片相連接[7]。本設(shè)計(jì)中主控CPU與PHY之間是RGMII模式接口,。88E1111可以實(shí)現(xiàn)多種數(shù)據(jù)速率和訪問(wèn)控制模式,通過(guò)HWCFG MODE[3:0]確定其操作模式,,設(shè)定DIS_FC為0,可以自適應(yīng)地選擇FIBER,、COPPER接口,。
Linux網(wǎng)絡(luò)驅(qū)動(dòng)程序的實(shí)現(xiàn)主要是在Linux內(nèi)核中提供的網(wǎng)絡(luò)設(shè)備接口及以上層次的代碼基礎(chǔ)上,移植或編寫(xiě)特定網(wǎng)絡(luò)硬件的驅(qū)動(dòng)程序工作,,也就是完成設(shè)備驅(qū)動(dòng)功能層,,主要包括數(shù)據(jù)的接收、發(fā)送等控制,。
2.2.2 FPGA接口程序設(shè)計(jì)
FPGA從串模式的配置過(guò)程將配置比特流載入到FPGA,,有4個(gè)主要階段: (1)清除配置內(nèi)存,;(2)初始化;(3)載入配置數(shù)據(jù),;(4)設(shè)備啟動(dòng),。其配置時(shí)序流程圖如圖3所示。
系統(tǒng)上電后,,將PROG_B拉低以復(fù)位FPGA內(nèi)部邏輯重新配置FPGA,,充分復(fù)位內(nèi)部邏輯后,將PROG_B置高,。
INIT_B為低電平,,在PROG_B拉高保持一定時(shí)間后,F(xiàn)PGA將INIT_B置高,。在INIT_B由低向高跳變的瞬間,,采樣配置模式M[2:0]。此系統(tǒng)采用從串配置模式,。在FPGA采樣配置模式后,微處理器就可以向FPGA配置時(shí)鐘CCLK和數(shù)據(jù),在CCLK的上升沿,傳輸數(shù)據(jù)至DIN,,數(shù)據(jù)字節(jié)先發(fā)送低位,再發(fā)送高位,。配置過(guò)程中若發(fā)生錯(cuò)誤,,則INIT_B為低電平。
當(dāng)DONE為高電平時(shí),,F(xiàn)PGA釋放全局三態(tài)(GTS),,激活I(lǐng)/O引腳,釋放全部置位復(fù)位(GSR)和全局寫(xiě)使能(GWE)有效,,開(kāi)始執(zhí)行配置區(qū)的邏輯,。因此在所有的配置數(shù)據(jù)傳送完成,CRC校驗(yàn)無(wú)誤時(shí),,DONE為高電平,,否則為低電平[6]。
微處理器從串配置FPGA的時(shí)序圖如圖4所示,。
2.2.3 HPI 接口程序設(shè)計(jì)
本文的嵌入式數(shù)字處理系統(tǒng)設(shè)計(jì)中, 主控CPU通過(guò)FPGA訪問(wèn)HPI接口的HPIC、HPIA ,、HPIDA 和HPIDF這4個(gè)寄存器,,實(shí)現(xiàn)與TMS320C6416的通信,從而完成引導(dǎo)加載DSP程序代碼,。圖5為DSP的HPI加載流程圖,。
本設(shè)計(jì)中采用HPI16模式,16根數(shù)據(jù)線通過(guò)FPGA邏輯與主控CPU數(shù)據(jù)總線的低16位相連,,將HPI的控制信號(hào)通過(guò)FPGA連接到主控CPU上,。
對(duì)DSP進(jìn)行HPI接口加載首先要對(duì)DSP進(jìn)行復(fù)位,,主控CPU對(duì)DSP的全部存儲(chǔ)空間進(jìn)行訪問(wèn),先對(duì)HPIC寄存器初始化,,主要針對(duì)HPI16模式最低位HHWIL位設(shè)置,,決定數(shù)據(jù)傳輸格式是按高半字在前(設(shè)置為0),還是低半字在前(設(shè)置為1),,該位對(duì)于HPI32模式無(wú)效,,可不設(shè)置;然后,,對(duì)HPIA寄存器初始化,,設(shè)置訪問(wèn)單元的地址;最后通過(guò)讀寫(xiě)數(shù)據(jù)寄存器(HPIDA,、HPIDF)實(shí)現(xiàn)數(shù)據(jù)讀寫(xiě)操作,,其中讀寫(xiě)HPIDA寄存器是完成連續(xù)地址單元讀寫(xiě)操作,讀寫(xiě)HPIDF寄存器是完成固定地址單元讀寫(xiě)操作,。數(shù)據(jù)線,、地址線定義如圖6所示。
LD,、LA分別表示主控CPU的數(shù)據(jù)和地址,,addr表示FPGA內(nèi)部地址,HPIX表示DSP的HPI控制器數(shù)據(jù),。
CSEL:0表示選擇FPGA,,1表示選擇主DSP,2表示選擇從DSP,,3作為備用選擇,。
BSEL:0表示HPIX的低16位,1表示HPIX的高16位,。
HCNTL:0表示HPIC,,1表示HPIA,2表示HPID(HPIA自動(dòng)遞增),,3表示HPID(HPIA保持不變),。
在軟件編程時(shí), HPI 接口寄存器的定義如下所示:
/* HPI FPGA registers */
#define HPI_HCNTL_HPIC (0x0<<11)
#define HPI_HCNTL_HPIA (0x1<<11)
#define HPI_HCNTL_HPIDINC (0x2<<11)
#define HPI_HCNTL_HPIDFIX (0x3<<11)
#define HPI_BSEL_LOW (0x0<<13)
#define HPI_BSEL_HIGH (0x1<<13)
#define HPI_CSEL_FPGA (0x0<<14)
#define HPI_CSEL_HPI1 (0x1<<14)
#define HPI_CSEL_HPI2 (0x2<<14)
#define HPI_FPGA_MEM_SIZE (2<<16) /* bytes */
2.3 HPI 程序加載代碼的生成
在CCS開(kāi)發(fā)環(huán)境下生成的目標(biāo)文件是“.out”,即通用目標(biāo)文件格式(COFF),。該代碼文件不是DSP中實(shí)際運(yùn)行的程序代碼,需用Hex工具進(jìn)行轉(zhuǎn)換,然后使用自編程序?qū)⒖蓤?zhí)行的程序代碼提取出來(lái),,封裝成幀,通過(guò)以太網(wǎng)加載到DSP中,。HPI引導(dǎo)完成后, DSP從地址0開(kāi)始執(zhí)行,,而DSP 程序的入口是_c_int00,所以要在地址0處添加一條跳轉(zhuǎn)指令到程序入口[7],。
3 工程應(yīng)用
以前研制的數(shù)字處理系統(tǒng)采用CPU+DSP或CPU+FPGA,,在研制階段和應(yīng)用過(guò)程中需采用仿真器進(jìn)行程序加載,,無(wú)法實(shí)現(xiàn)遠(yuǎn)程加載。然而在產(chǎn)品組裝成品進(jìn)行系統(tǒng)聯(lián)調(diào)時(shí)需要多次對(duì)FPGA,、DSP程序進(jìn)行優(yōu)化和完善,,在對(duì)FPGA、DSP程序進(jìn)行更新時(shí)極其不方便,,每次更新程序都需要先解除系統(tǒng)連接,,然后拆卸產(chǎn)品再用仿真器對(duì)該主控單元進(jìn)行FPGA、DSP程序進(jìn)行升級(jí)更新,,整個(gè)過(guò)程繁瑣并且費(fèi)時(shí)費(fèi)力,,嚴(yán)重制約研制進(jìn)程,而且后續(xù)工程應(yīng)用的維護(hù)工作難度也較大,。
本文所述嵌入式數(shù)字處理系統(tǒng)基于以太網(wǎng)加載FPGA和DSP,,只要將需要進(jìn)行更新程序的產(chǎn)品通過(guò)網(wǎng)絡(luò)接口和外部計(jì)算機(jī)連接起來(lái)進(jìn)行數(shù)據(jù)交換,FPGA和DSP程序的加載與啟動(dòng)直接由外部計(jì)算機(jī)控制,無(wú)需拆卸系統(tǒng)和產(chǎn)品,擺脫了仿真器,。這種方式使得整個(gè)加載簡(jiǎn)單方便,易于操作,,而且可以實(shí)現(xiàn)對(duì)復(fù)雜系統(tǒng)的多個(gè)FPGA和多個(gè)DSP進(jìn)行基于以太網(wǎng)接口的加載。
隨著現(xiàn)在數(shù)字技術(shù)的高速發(fā)展,,數(shù)字系統(tǒng)設(shè)計(jì)的功能越來(lái)越強(qiáng)大,,設(shè)計(jì)中綜合微處理器、FPGA,、DSP也越來(lái)越常見(jiàn),,本文提出了一種基于以太網(wǎng)加載FPGA和DSP的實(shí)現(xiàn)方法, 文中嵌入式數(shù)字處理系統(tǒng)實(shí)現(xiàn)了多個(gè)FPGA、DSP的程序加載進(jìn)行軟件更新,,證實(shí)了該技術(shù)簡(jiǎn)單方便,、可實(shí)現(xiàn)遠(yuǎn)距離加載,且具有良好的可靠性,。該技術(shù)在工程應(yīng)用領(lǐng)域具有獨(dú)特的優(yōu)越性和良好的應(yīng)用前景,。
參考文獻(xiàn)
[1] 朱偉,王廣君.基于ARM的嵌入式系統(tǒng)中從串配置FPGA的實(shí)現(xiàn)[J].儀表技術(shù),,2007(5):13-15.
[2] 李文祿,蔣宇中.一種基于以太網(wǎng)的 TMS320C6713B程序加載技術(shù)[J].海軍工程大學(xué)學(xué)報(bào),2008,20(6):35-39.
[3] Spartan-3 FPGA Family Data Sheet[S].Xilinx.2009.
[4] Virtex-4 User Guide v2.3[S].Xilinx.2008.
[5] TMS320C6416 fixed-point digital signal processor[S].Texas Instruments.2005.
[6] 88E1111 Datasheet INTEGRATED 10/100/1000 ULTRA[S]. Marvell.2009.
[7] MPC8379E PowerQUICCTM II Pro integrated host processor family Reference manual[S].Freescale Semiconductor.2009.