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