《電子技術(shù)應(yīng)用》
您所在的位置:首頁 > 可編程邏輯 > 設(shè)計應(yīng)用 > 一種基于以太網(wǎng)加載FPGA和DSP的實現(xiàn)方法
一種基于以太網(wǎng)加載FPGA和DSP的實現(xiàn)方法
來源:微型機與應(yīng)用2011年第18期
吳湘寧,江 瑾,馮俊濤
(廣州海格通信集團股份有限公司,廣東 廣州510663)
摘要: 介紹了脫離仿真器直接使用外部計算機通過網(wǎng)口進行程序代碼加載的基本原理, 討論分析了網(wǎng)絡(luò)接口、FPGA接口和HPI接口的訪問控制等關(guān)鍵技術(shù)。詳述了在包含CPU、FPGA和DSP的復(fù)雜系統(tǒng)設(shè)計方案中基于以太網(wǎng)加載FPGA和DSP的實現(xiàn)。該技術(shù)在系統(tǒng)工程化的應(yīng)用中具有很好的前景。
Abstract:
Key words :

摘  要: 介紹了脫離仿真器直接使用外部計算機通過網(wǎng)口進行程序代碼加載的基本原理, 討論分析了網(wǎng)絡(luò)接口、FPGA接口和HPI接口的訪問控制等關(guān)鍵技術(shù)。詳述了在包含CPU、FPGA和DSP的復(fù)雜系統(tǒng)設(shè)計方案中基于以太網(wǎng)加載FPGA和DSP的實現(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)中,對其中的FPGA和DSP的傳統(tǒng)加載都是通過硬件仿真器來完成的。這在產(chǎn)品的初研階段非常適用,然而在實際工程應(yīng)用中各種產(chǎn)品組裝成一個龐雜的系統(tǒng)時(如需對系統(tǒng)進行軟件更新和維護時),傳統(tǒng)的加載方式就顯得極其不方便,程序代碼的引導(dǎo)加載就需要一種更加靈活、高效的方法來實現(xiàn),而基于以太網(wǎng)加載FPGA和DSP的實現(xiàn)方法能很好地解決這個難題。
    本文介紹了基于以太網(wǎng)加載FPGA和DSP的基本原理, 并通過該技術(shù)在某嵌入式主控設(shè)計中的應(yīng)用詳述了在包含CPU、FPGA和DSP的復(fù)雜系統(tǒng)設(shè)計方案中基于以太網(wǎng)加載FPGA和DSP的實現(xiàn), 討論分析了網(wǎng)絡(luò)接口、FPGA接口和HPI接口的訪問控制等關(guān)鍵技術(shù)。
1 基于以太網(wǎng)加載FPGA和DSP的基本原理
    基于以太網(wǎng)加載FPGA和DSP的實現(xiàn)過程為: 首先,外部計算機通過網(wǎng)絡(luò)接口將代碼傳送給微處理器,并存儲到微處理器的Flash存儲器模塊;然后,由微處理器分別通過FPGA的從串加載模式和DSP的主機引導(dǎo)加載(HPI接口)實現(xiàn)對FPGA和DSP程序代碼的引導(dǎo)加載。
    基于TCP/IP協(xié)議的以太網(wǎng)是目前使用最廣泛的網(wǎng)絡(luò)。網(wǎng)絡(luò)協(xié)議通常分不同層次進行開發(fā),每一層負責(zé)不同的通信功能。嵌入式設(shè)備通常根據(jù)微處理器的結(jié)構(gòu)特點和系統(tǒng)需要實現(xiàn)的功能,將TCP/IP協(xié)議嵌入到微處理器中,從而實現(xiàn)嵌入式系統(tǒng)的網(wǎng)絡(luò)接口功能[1-2]。
1.1 FPGA加載
    FPGA常見的配置文件的加載模式有5種:主串加載模式、從串加載模式、主并加載模式、從并加載模式及JTAG加載模式。其中,JTAG加載模式在開發(fā)調(diào)試階段使用。其余4種加載模式可分為串行加載方式和并行加載方式,而串行加載方式和并行加載方式都有主、從兩種模式。由于主模式的加載同步時鐘(CCLK)由FPGA提供,從模式的加載同步時鐘(CCLK)由外部時鐘源或者外部控制信號提供,為了方便微處理器控制加載過程,一般選擇使用從串模式。
1.2 DSP加載
    DSP常見的三種引導(dǎo)加載方式為仿真器引導(dǎo)加載、ROM引導(dǎo)加載、主機引導(dǎo)加載。
    (1)仿真器引導(dǎo)主要用于調(diào)試階段,是一種特殊的主機引導(dǎo)加載方式。
    (2)ROM引導(dǎo)加載:在DSP外部復(fù)位信號被釋放后,芯片處于內(nèi)部復(fù)位保持狀態(tài), DSP芯片自動地通過EDMA/QDMA將外部ROM中的1 KB程序搬入地址0處。內(nèi)部復(fù)位完成后,DSP開始從地址0處執(zhí)行指令。
    (3)主機引導(dǎo)加載:DSP上電復(fù)位后, I/O部分將處于激活狀態(tài),可以進行正常的通信,但DSP的內(nèi)核仍處于復(fù)位狀態(tài),一直等待主機向HPI控制寄存器中的DSPINT位置1。這樣,主機就可以通過HPI接口訪問DSP的整個存儲空間,對它們進行初始化。完成相關(guān)設(shè)置后,向DSPINT位寫入1, DSP內(nèi)核結(jié)束復(fù)位狀態(tài),執(zhí)行地址0處的指令。
2 嵌入式數(shù)字處理系統(tǒng)設(shè)計與實現(xiàn)
2.1 硬件設(shè)計

    嵌入式數(shù)字處理系統(tǒng)采用微處理器PowerPC作為主控CPU,主要執(zhí)行網(wǎng)絡(luò)控制等各種控制任務(wù),其程序代碼相對固定,存儲在Flash中。如圖1所示,選用Xilinx公司的XC3S1000和XC4VSX35這兩種FPGA分別做邏輯和變頻[3-4],選用兩片TI公司的DSP TMS320C6416芯片完成數(shù)據(jù)處理與算法實現(xiàn),這些FPGA和DSP的程序代碼需實時更新[5]。

    (1)網(wǎng)絡(luò)接口設(shè)計
    以太網(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ò)接口相連接,通過硬件配置模式HWCFG MODE[3:0]來確定88E1111的操作模式,從而確定需要連接的引腳,如圖2所示,該設(shè)計選擇了RGMII模式,以太網(wǎng)PHY通過網(wǎng)絡(luò)隔離濾波器HX5008與外部以太網(wǎng)接口相連。

    (2)FPGA接口設(shè)計
    在從串模式下進行FPGA程序加載僅需要使用CCLK、PROG_B、INIT_B、DONE、DIN這5個信號引腳,微處理器使用通用IO管腳來配置FPGA。此外還需要設(shè)置M[2:0]信號以選擇配置模式,根據(jù)芯片XC3S1000和XC4VSX35的模式設(shè)置其從串模式的配置均為M[2:0]=111。
    (3)HPI 接口設(shè)計
    引導(dǎo)配置引腳BEA[19∶18]決定了TMS320C6416的引導(dǎo)加載模式,將DSP的EMIFB接口引腳BEA[19∶18]通過上下拉電阻配置成BEA[19∶18]=01,即選擇DSP為HPI加載方式。HPI接口電路如圖2所示,主控CPU的數(shù)據(jù)總線、地址總線及控制I/O連接到FPGA上,DSP的HPI接口數(shù)據(jù)總線和控制線也連接到FPGA上,通過FPGA的接口邏輯設(shè)計將CPU和DSP連接起來。
2.2 軟件設(shè)計
2.2.1 網(wǎng)絡(luò)接口程序設(shè)計

      (1)網(wǎng)絡(luò)通信協(xié)議設(shè)計
      網(wǎng)絡(luò)通信協(xié)議設(shè)計主要是實現(xiàn)TCP/IP 協(xié)議。根據(jù)嵌入式系統(tǒng)結(jié)構(gòu)特點和系統(tǒng)設(shè)計實現(xiàn)的功能需求,在TCP/IP 協(xié)議的基礎(chǔ)上實現(xiàn)系統(tǒng)所需功能。
      (2)網(wǎng)絡(luò)接口的訪問控制
      驅(qū)動程序設(shè)計包括以太網(wǎng)PHY芯片的初始化、數(shù)據(jù)包的發(fā)送和接收。Freescale的MPC8377自帶了三速以太網(wǎng)控制器ETSEC,作為以太網(wǎng)接口與外部的PHY芯片相連接[7]。本設(shè)計中主控CPU與PHY之間是RGMII模式接口。88E1111可以實現(xiàn)多種數(shù)據(jù)速率和訪問控制模式,通過HWCFG MODE[3:0]確定其操作模式,設(shè)定DIS_FC為0,可以自適應(yīng)地選擇FIBER、COPPER接口。
    Linux網(wǎng)絡(luò)驅(qū)動程序的實現(xiàn)主要是在Linux內(nèi)核中提供的網(wǎng)絡(luò)設(shè)備接口及以上層次的代碼基礎(chǔ)上,移植或編寫特定網(wǎng)絡(luò)硬件的驅(qū)動程序工作,也就是完成設(shè)備驅(qū)動功能層,主要包括數(shù)據(jù)的接收、發(fā)送等控制。
2.2.2 FPGA接口程序設(shè)計
    FPGA從串模式的配置過程將配置比特流載入到FPGA,有4個主要階段: (1)清除配置內(nèi)存;(2)初始化;(3)載入配置數(shù)據(jù);(4)設(shè)備啟動。其配置時序流程圖如圖3所示。

 

 

    系統(tǒng)上電后,將PROG_B拉低以復(fù)位FPGA內(nèi)部邏輯重新配置FPGA,充分復(fù)位內(nèi)部邏輯后,將PROG_B置高。
    INIT_B為低電平,在PROG_B拉高保持一定時間后,F(xiàn)PGA將INIT_B置高。在INIT_B由低向高跳變的瞬間,采樣配置模式M[2:0]。此系統(tǒng)采用從串配置模式。在FPGA采樣配置模式后,微處理器就可以向FPGA配置時鐘CCLK和數(shù)據(jù),在CCLK的上升沿,傳輸數(shù)據(jù)至DIN,數(shù)據(jù)字節(jié)先發(fā)送低位,再發(fā)送高位。配置過程中若發(fā)生錯誤,則INIT_B為低電平。
    當(dāng)DONE為高電平時,F(xiàn)PGA釋放全局三態(tài)(GTS),激活I(lǐng)/O引腳,釋放全部置位復(fù)位(GSR)和全局寫使能(GWE)有效,開始執(zhí)行配置區(qū)的邏輯。因此在所有的配置數(shù)據(jù)傳送完成,CRC校驗無誤時,DONE為高電平,否則為低電平[6]。
    微處理器從串配置FPGA的時序圖如圖4所示。

2.2.3 HPI 接口程序設(shè)計
    本文的嵌入式數(shù)字處理系統(tǒng)設(shè)計中, 主控CPU通過FPGA訪問HPI接口的HPIC、HPIA 、HPIDA 和HPIDF這4個寄存器,實現(xiàn)與TMS320C6416的通信,從而完成引導(dǎo)加載DSP程序代碼。圖5為DSP的HPI加載流程圖。
    本設(shè)計中采用HPI16模式,16根數(shù)據(jù)線通過FPGA邏輯與主控CPU數(shù)據(jù)總線的低16位相連,將HPI的控制信號通過FPGA連接到主控CPU上。

    對DSP進行HPI接口加載首先要對DSP進行復(fù)位,主控CPU對DSP的全部存儲空間進行訪問,先對HPIC寄存器初始化,主要針對HPI16模式最低位HHWIL位設(shè)置,決定數(shù)據(jù)傳輸格式是按高半字在前(設(shè)置為0),還是低半字在前(設(shè)置為1),該位對于HPI32模式無效,可不設(shè)置;然后,對HPIA寄存器初始化,設(shè)置訪問單元的地址;最后通過讀寫數(shù)據(jù)寄存器(HPIDA、HPIDF)實現(xiàn)數(shù)據(jù)讀寫操作,其中讀寫HPIDA寄存器是完成連續(xù)地址單元讀寫操作,讀寫HPIDF寄存器是完成固定地址單元讀寫操作。數(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自動遞增),3表示HPID(HPIA保持不變)。
    在軟件編程時, 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開發(fā)環(huán)境下生成的目標(biāo)文件是“.out”,即通用目標(biāo)文件格式(COFF)。該代碼文件不是DSP中實際運行的程序代碼,需用Hex工具進行轉(zhuǎn)換,然后使用自編程序?qū)⒖蓤?zhí)行的程序代碼提取出來,封裝成幀,通過以太網(wǎng)加載到DSP中。HPI引導(dǎo)完成后, DSP從地址0開始執(zhí)行,而DSP 程序的入口是_c_int00,所以要在地址0處添加一條跳轉(zhuǎn)指令到程序入口[7]。
3 工程應(yīng)用
    以前研制的數(shù)字處理系統(tǒng)采用CPU+DSP或CPU+FPGA,在研制階段和應(yīng)用過程中需采用仿真器進行程序加載,無法實現(xiàn)遠程加載。然而在產(chǎn)品組裝成品進行系統(tǒng)聯(lián)調(diào)時需要多次對FPGA、DSP程序進行優(yōu)化和完善,在對FPGA、DSP程序進行更新時極其不方便,每次更新程序都需要先解除系統(tǒng)連接,然后拆卸產(chǎn)品再用仿真器對該主控單元進行FPGA、DSP程序進行升級更新,整個過程繁瑣并且費時費力,嚴重制約研制進程,而且后續(xù)工程應(yīng)用的維護工作難度也較大。
    本文所述嵌入式數(shù)字處理系統(tǒng)基于以太網(wǎng)加載FPGA和DSP,只要將需要進行更新程序的產(chǎn)品通過網(wǎng)絡(luò)接口和外部計算機連接起來進行數(shù)據(jù)交換,FPGA和DSP程序的加載與啟動直接由外部計算機控制,無需拆卸系統(tǒng)和產(chǎn)品,擺脫了仿真器。這種方式使得整個加載簡單方便,易于操作,而且可以實現(xiàn)對復(fù)雜系統(tǒng)的多個FPGA和多個DSP進行基于以太網(wǎng)接口的加載。
    隨著現(xiàn)在數(shù)字技術(shù)的高速發(fā)展,數(shù)字系統(tǒng)設(shè)計的功能越來越強大,設(shè)計中綜合微處理器、FPGA、DSP也越來越常見,本文提出了一種基于以太網(wǎng)加載FPGA和DSP的實現(xiàn)方法, 文中嵌入式數(shù)字處理系統(tǒng)實現(xiàn)了多個FPGA、DSP的程序加載進行軟件更新,證實了該技術(shù)簡單方便、可實現(xiàn)遠距離加載,且具有良好的可靠性。該技術(shù)在工程應(yīng)用領(lǐng)域具有獨特的優(yōu)越性和良好的應(yīng)用前景。
參考文獻
[1] 朱偉,王廣君.基于ARM的嵌入式系統(tǒng)中從串配置FPGA的實現(xiàn)[J].儀表技術(shù),2007(5):13-15.
[2] 李文祿,蔣宇中.一種基于以太網(wǎng)的 TMS320C6713B程序加載技術(shù)[J].海軍工程大學(xué)學(xué)報,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.

此內(nèi)容為AET網(wǎng)站原創(chuàng),未經(jīng)授權(quán)禁止轉(zhuǎn)載。