一種基于以太網(wǎng)加載FPGA和DSP的實(shí)現(xiàn)方法
摘 要: 介紹了脫離仿真器直接使用外部計(jì)算機(jī)通過網(wǎng)口進(jìn)行程序代碼加載的基本原理, 討論分析了網(wǎng)絡(luò)接口、FPGA接口和HPI接口的訪問控制等關(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)加載都是通過硬件仿真器來完成的。這在產(chǎn)品的初研階段非常適用,然而在實(shí)際工程應(yīng)用中各種產(chǎn)品組裝成一個(gè)龐雜的系統(tǒng)時(shí)(如需對(duì)系統(tǒng)進(jìn)行軟件更新和維護(hù)時(shí)),傳統(tǒng)的加載方式就顯得極其不方便,程序代碼的引導(dǎo)加載就需要一種更加靈活、高效的方法來實(shí)現(xiàn),而基于以太網(wǎng)加載FPGA和DSP的實(shí)現(xiàn)方法能很好地解決這個(gè)難題。
本文介紹了基于以太網(wǎng)加載FPGA和DSP的基本原理, 并通過該技術(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接口的訪問控制等關(guān)鍵技術(shù)。
1 基于以太網(wǎng)加載FPGA和DSP的基本原理
基于以太網(wǎng)加載FPGA和DSP的實(shí)現(xiàn)過程為: 首先,外部計(jì)算機(jī)通過網(wǎng)絡(luò)接口將代碼傳送給微處理器,并存儲(chǔ)到微處理器的Flash存儲(chǔ)器模塊;然后,由微處理器分別通過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)行開發(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常見的配置文件的加載模式有5種:主串加載模式、從串加載模式、主并加載模式、從并加載模式及JTAG加載模式。其中,JTAG加載模式在開發(fā)調(diào)試階段使用。其余4種加載模式可分為串行加載方式和并行加載方式,而串行加載方式和并行加載方式都有主、從兩種模式。由于主模式的加載同步時(shí)鐘(CCLK)由FPGA提供,從模式的加載同步時(shí)鐘(CCLK)由外部時(shí)鐘源或者外部控制信號(hào)提供,為了方便微處理器控制加載過程,一般選擇使用從串模式。
1.2 DSP加載
DSP常見的三種引導(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)地通過EDMA/QDMA將外部ROM中的1 KB程序搬入地址0處。內(nèi)部復(fù)位完成后,DSP開始從地址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ī)就可以通過HPI接口訪問DSP的整個(gè)存儲(chǔ)空間,對(duì)它們進(jìn)行初始化。完成相關(guān)設(shè)置后,向DSPINT位寫入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ò)接口相連接,通過硬件配置模式HWCFG MODE[3:0]來確定88E1111的操作模式,從而確定需要連接的引腳,如圖2所示,該設(shè)計(jì)選擇了RGMII模式,以太網(wǎng)PHY通過網(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管腳來配置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]通過上下拉電阻配置成BEA[19∶18]=01,即選擇DSP為HPI加載方式。HPI接口電路如圖2所示,主控CPU的數(shù)據(jù)總線、地址總線及控制I/O連接到FPGA上,DSP的HPI接口數(shù)據(jù)總線和控制線也連接到FPGA上,通過FPGA的接口邏輯設(shè)計(jì)將CPU和DSP連接起來。
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ò)接口的訪問控制
驅(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ù)速率和訪問控制模式,通過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ǔ)上,移植或編寫特定網(wǎng)絡(luò)硬件的驅(qū)動(dòng)程序工作,也就是完成設(shè)備驅(qū)動(dòng)功能層,主要包括數(shù)據(jù)的接收、發(fā)送等控制。
2.2.2 FPGA接口程序設(shè)計(jì)
FPGA從串模式的配置過程將配置比特流載入到FPGA,有4個(gè)主要階段: (1)清除配置內(nèi)存;(2)初始化;(3)載入配置數(shù)據(jù);(4)設(shè)備啟動(dòng)。其配置時(shí)序流程圖如圖3所示。