摘 要:介紹了以ARM+DSP" title="DSP">DSP體系結(jié)構(gòu)為基礎(chǔ)的FPGA" title="FPGA">FPGA實(shí)現(xiàn)。在其上驗(yàn)證應(yīng)用算法,實(shí)現(xiàn)了由ARM負(fù)責(zé)對(duì)整個(gè)程序的控制,由DSP負(fù)責(zé)對(duì)整個(gè)程序的計(jì)算,最大程度地同時(shí)發(fā)揮了ARM和DSP的各自優(yōu)勢(shì)。
關(guān)鍵詞:ARM DSP FPGA
ARM通用CPU及其開發(fā)平臺(tái),是近年來(lái)較為流行的開發(fā)平臺(tái)之一,而由ARM+DSP的雙核體系結(jié)構(gòu),更有其獨(dú)特的功能特點(diǎn):由ARM完成整個(gè)體系的控制和流程操作,由DSP完成具體的算法和計(jì)算處理。這樣,不但可以充分地發(fā)揮ARM方便的控制優(yōu)勢(shì),同時(shí)又能最大限度地發(fā)揮DSP的計(jì)算功能。這在業(yè)界已逐漸成為一種趨勢(shì)。
本文的FPGA的Demo驗(yàn)證,是在基于一款DSP內(nèi)核處理器的研發(fā)基礎(chǔ)上,對(duì)其功能進(jìn)行驗(yàn)證的一個(gè)小目標(biāo)識(shí)別算法的實(shí)現(xiàn)??紤]到軟件環(huán)境仿真的速度以及仿真模型的局限性,用FPGA進(jìn)行硬件協(xié)同驗(yàn)證。這樣,既能夠保證仿真的真實(shí)性,又能夠快速發(fā)現(xiàn)實(shí)際問(wèn)題,減少不必要的流片次數(shù),加快開發(fā)的進(jìn)程,這對(duì)于一個(gè)大規(guī)模的SoC設(shè)計(jì),已經(jīng)成為不可或缺的手段之一,而且對(duì)節(jié)約成本也有很大好處。
1 系統(tǒng)體系結(jié)構(gòu)
雙核系統(tǒng)的體系結(jié)構(gòu)如圖1所示。
1.1 內(nèi)嵌ARM內(nèi)核的EPXA1芯片及其特點(diǎn)
圖1中,包含ARM922T內(nèi)核的開發(fā)平臺(tái)選用的是Altera公司的excalibar系列,本驗(yàn)證實(shí)現(xiàn)選用的型號(hào)是EPXA1。EPXA1是一款帶有100萬(wàn)門可重配置PLD的ARM Core+PLD體系結(jié)構(gòu),可以通過(guò)quartus II軟件工具來(lái)靈活配置ARM Core同外部的端口連接,最大時(shí)鐘頻率能夠達(dá)到200MHz。EPXA1的高度集成化,不僅大大加快了ARM與片內(nèi)各種資源的通訊速度,而且減小了硬件電路的復(fù)雜性、體積和功耗,真正實(shí)現(xiàn)了SOPC[1]。
1.2 FPGA硬件平臺(tái)及其特點(diǎn)
對(duì)于一個(gè)具體項(xiàng)目,F(xiàn)PGA芯片的選取要根據(jù)實(shí)際需求和特點(diǎn)來(lái)具體考慮。一般應(yīng)從邏輯資源需求、易擴(kuò)展能力、信號(hào)質(zhì)量以及成本等因素來(lái)考慮。如圖1所示,本次設(shè)計(jì)采用的兩片F(xiàn)PGA分別為Xilinx" title="Xilinx">Xilinx公司的FPGA X3S5000和X2V6000,其容量分別為500萬(wàn)門和600萬(wàn)門。選用這兩塊芯片正是基于邏輯資源需求的考慮。FPGA X2V6000面向高端應(yīng)用,存儲(chǔ)資源更多,功能更強(qiáng)大,適用于性能要求較高的DSP內(nèi)核,但其成本相對(duì)也較高;而FPGA X3S5000成本較低,適用于一般性能要求的模塊。兩片F(xiàn)PGA都具備三個(gè)擴(kuò)展槽,可做接口擴(kuò)展,同時(shí)也能作為調(diào)試測(cè)試點(diǎn)用。
1.3 雙核體系結(jié)構(gòu)設(shè)計(jì)特點(diǎn)
具體來(lái)講,整個(gè)體系結(jié)構(gòu)是指通過(guò)人為設(shè)計(jì)電路圖,外部選用不同的FPGA器件來(lái)下載生成特定功能的外部硬件電路,在電路圖上對(duì)應(yīng)相應(yīng)的端口標(biāo)號(hào);同時(shí),ARM Core可以通過(guò)quartus II工具方便地連接不同的端口標(biāo)號(hào),編譯運(yùn)行生成相應(yīng)的配置文件;ARM的啟動(dòng)代碼中用以上的的配置文件信息來(lái)配置PLD,從而實(shí)現(xiàn)ARM同外部硬件電路即兩片F(xiàn)PGA的連接[3]。FPGA X3S5000中下載固化AHBC硬件電路以及外部SRAM Memory,而FPGA X2V6000中下載固化DSP Core以及支持AMBA協(xié)議的Wrapper。
這種體系結(jié)構(gòu)能夠充分利用硬件資源,合理的版圖位置方便了ARM和DSP對(duì)外部SRAM的訪問(wèn),同時(shí)可快捷地實(shí)現(xiàn)ARM的控制功能,而且預(yù)留的擴(kuò)展槽能夠較為方便地進(jìn)行功能擴(kuò)展和調(diào)試。DSP Core的Wrapper能夠快速響應(yīng)ARM的控制請(qǐng)求,調(diào)動(dòng)DSP Core進(jìn)入不同的工作狀態(tài)。
2 系統(tǒng)工作流程及特點(diǎn)
系統(tǒng)工作流程圖如圖2所示,介紹如下。
2.1 ARM負(fù)責(zé)準(zhǔn)備階段
ARM從Flash中運(yùn)行啟動(dòng)代碼,通過(guò)配置PLD來(lái)連接FPGA X3S5000中的AHBC,目的在于ARM通過(guò)AHBC同F(xiàn)PGA X2V6000中的DSP Core進(jìn)行交互。
代碼喚醒外部DMA通過(guò)以太網(wǎng)口從PC機(jī)端搬運(yùn)第一幀待處理的圖像數(shù)據(jù),放到雙核公用的外部SRAM memory既定的地址段中。然后,ARM Core通過(guò)AHBC控制FPGA X2V6000中的DSP Core。
這里需要說(shuō)明兩點(diǎn):
(1) FPGA開發(fā)板的的圖像傳輸是通過(guò)專門配置的帶有LXT972芯片的以太網(wǎng)口與PC機(jī)的以太網(wǎng)口進(jìn)行交互, 如圖3所示。圖3左邊的以太網(wǎng)子板即圖1中的Ethernet模塊。
(2) DSP Core頂層的wrapper是支持AMBA協(xié)議的TOP Module,其中包括一個(gè)Debug Sub-Module。ARM就是通過(guò)讀寫Debug Sub-Module的控制寄存器來(lái)控制DSP Core的啟動(dòng)、停止等工作狀態(tài)的。所以說(shuō),Debug Sub-Module是整個(gè)FPGA工程最為關(guān)鍵的部件之一,它直接關(guān)系到ARM和DSP之間的交互。本項(xiàng)目中,利用Debug Sub-Module實(shí)現(xiàn)對(duì)DSP Core的復(fù)位、啟動(dòng)、暫停、斷點(diǎn)設(shè)置、單步運(yùn)行、讀寫內(nèi)部SRAM、讀DSP Core寄存器等一系列功能,大大方便了調(diào)試工作,同時(shí)也非常便捷地實(shí)現(xiàn)了ARM和DSP的交互運(yùn)行。
2.2 DSP運(yùn)行階段
ARM寫控制寄存器使DSP Core復(fù)位,并把小目標(biāo)識(shí)別的程序代碼寫入DSP內(nèi)部的SRAM0中等待DSP啟動(dòng)運(yùn)行,由ARM控制DSP Core運(yùn)行起來(lái)。DSP Core運(yùn)行完程序之后,會(huì)在外部SRAM的一個(gè)地址上返回一個(gè)標(biāo)志數(shù)(0x00ff00ff),同時(shí)進(jìn)入idle狀態(tài),完全釋放對(duì)AHBC的操作。每隔一段時(shí)間,ARM檢查一下相應(yīng)地址上的這個(gè)標(biāo)志數(shù),如果沒(méi)有,則表示程序還未運(yùn)行完,ARM繼續(xù)檢查;如果有,則表示程序已經(jīng)運(yùn)行完畢,ARM將進(jìn)入下一步操作。
選用這種流程有兩個(gè)特點(diǎn):(1)ARM完全實(shí)現(xiàn)了控制和輔助的作用,而運(yùn)行部分則完全由DSP負(fù)責(zé),各自分工明確。(2)ARM和DSP實(shí)現(xiàn)了很好的交互,嚴(yán)謹(jǐn)?shù)乜刂屏肆鞒痰倪\(yùn)行步驟。
2.3 ARM控制停止返回
ARM通過(guò)寫控制寄存器把DSP Core停下來(lái),從外部SRAM的既定地址段中取出DSP Core運(yùn)行完所返回的小目標(biāo)的坐標(biāo)信息,并通過(guò)以太網(wǎng)口返回到PC機(jī)端,在顯示界面的此幀圖像上顯示出小目標(biāo)。圖4為其中一幀圖像的處理結(jié)果顯示。
ARM擦除DSP Core運(yùn)行完畢的標(biāo)志數(shù),同時(shí)判斷當(dāng)前處理完的圖像是否為最后一幀,如果不是,則流程跳回DMA搬運(yùn)步驟去執(zhí)行下一幀圖像,同時(shí)加上必要的控制,避免寫程序的重復(fù)執(zhí)行;如果是,則結(jié)束整個(gè)程序運(yùn)行。這樣循環(huán)下去,直到所有圖像序列處理完畢。
這個(gè)過(guò)程充分顯示了ARM在控制流程的判斷跳轉(zhuǎn)方面所起到的主要作用。由ARM的平臺(tái)來(lái)實(shí)現(xiàn)對(duì)整個(gè)視頻序列的最終處理控制過(guò)程,顯得非常清晰便捷。
3 體系架構(gòu)的調(diào)試
3.1 FPGA的選取
FPGA的選取一定要合適(這里主要針對(duì)容量而言)。以本開發(fā)過(guò)程為例, Xilinx的兩片F(xiàn)PGA(X2V6000和X3S5000)的容量分別為600萬(wàn)門和500萬(wàn)門左右,而項(xiàng)目的硬件代碼容量卻稍微超出了這個(gè)范圍,所以不得不對(duì)一些模塊作精簡(jiǎn)和舍棄。即便如此,兩片F(xiàn)PGA的利用率都已大于90%。
一般來(lái)說(shuō),F(xiàn)PGA的利用率達(dá)到70%或多一些是比較好的,太高的利用率反而容易造成板子的不穩(wěn)定。本開發(fā)過(guò)程就有一些不穩(wěn)定因素,例如,因一些數(shù)據(jù)線、地址線的個(gè)別位傳輸值不正確,需要花大量的精力才能追查出這些存在問(wèn)題的線路,然后更換Bonding連接,選用其他的通路。同時(shí),所造成的不穩(wěn)定因素也會(huì)影響下載代碼的運(yùn)行速度。目前經(jīng)過(guò)Xilinx的軟件工具ISE綜合出來(lái)的FPGA可下載代碼受時(shí)序約束,所能達(dá)到的速度上限為25MHz時(shí)鐘頻率。
容量大的FPGA的成本同樣也會(huì)比較高,所以在研發(fā)需要和成本之間必須找到一個(gè)比較好的平衡點(diǎn),這在整個(gè)電路設(shè)計(jì)階段就要預(yù)測(cè)得比較好,但這不太容易做到,需要經(jīng)驗(yàn)的積累。
3.2 觀測(cè)點(diǎn)的預(yù)留
開發(fā)板在設(shè)計(jì)電路圖階段,一定要預(yù)留出足夠的觀測(cè)點(diǎn)。這一點(diǎn)非常重要。因?yàn)椋涸诤髞?lái)的調(diào)試過(guò)程中,當(dāng)出現(xiàn)問(wèn)題時(shí)需要追查線路,而目前的FPGA調(diào)試軟件還不成熟,并不像RTL代碼前端仿真那樣方便,能夠把所有的信號(hào)都輸出到屏幕上觀看,而且FPGA調(diào)試時(shí)使用的邏輯分析儀只能夠測(cè)量觀測(cè)點(diǎn)的信號(hào)波形,如果觀測(cè)點(diǎn)不夠的話,當(dāng)出現(xiàn)邏輯錯(cuò)誤時(shí),根本沒(méi)辦法追查下去,找不到問(wèn)題的所在,或者需要做相當(dāng)繁瑣的重復(fù)工作,才能把估計(jì)存在問(wèn)題的線路節(jié)點(diǎn)信號(hào)連(Bonding)到僅有的觀測(cè)點(diǎn)上。如果經(jīng)排查,估計(jì)得不正確或者需要進(jìn)一步拉出更多的其他信號(hào)時(shí),又需要重新花時(shí)間將節(jié)點(diǎn)新信號(hào)連到觀測(cè)點(diǎn)。這樣,會(huì)耗費(fèi)非常多的時(shí)間和精力。因?yàn)閷?duì)每一次新的節(jié)點(diǎn)生成一版新的FPGA下載代碼都很煩瑣。
所以,從電路的設(shè)計(jì)之初,預(yù)留出足夠的觀測(cè)點(diǎn),盡量將更多的節(jié)點(diǎn)信號(hào)連到觀測(cè)點(diǎn)上。這樣將會(huì)極大地方便調(diào)試工作,加快整個(gè)研發(fā)進(jìn)程。
3.3 FPGA調(diào)試的原則
FPGA的調(diào)試應(yīng)該按照由簡(jiǎn)入繁的步驟進(jìn)行。這樣可以方便研發(fā)人員快速地熟悉板子,并且容易定位問(wèn)題的所在。
由于整個(gè)ARM+DSP體系結(jié)構(gòu)是由ARM加上兩塊FPGA共同工作,相對(duì)比較復(fù)雜,相互之間交互性比較多。所以,在調(diào)試整個(gè)程序之前,可以先通過(guò)另外的小程序和硬件結(jié)構(gòu)分別調(diào)通ARM對(duì)兩片F(xiàn)PGA的交互;然后,再用較為簡(jiǎn)單的功能模塊調(diào)試好三塊片子的簡(jiǎn)單交互功能;最后,把整個(gè)大程序應(yīng)用在上面進(jìn)行嘗試。這樣一步步下來(lái),出現(xiàn)問(wèn)題時(shí),就比較容易發(fā)現(xiàn)問(wèn)題所在,方便調(diào)試。
例如,可以先不考慮FPGA X2V6000,單獨(dú)調(diào)試ARM通過(guò)FPGA X3S5000中的AHBC對(duì)外部SRAM讀寫的控制,成功之后,再將FPGA X2V6000考慮進(jìn)去,但先不考慮Debug模塊對(duì)DSP的控制,單獨(dú)將Debug模塊提取出來(lái),下載到FPGA X2V6000當(dāng)中;然后再調(diào)試ARM通過(guò)FPGA X3S5000中的AHBC對(duì)于FPGA X2V6000當(dāng)中的Debug模塊的控制寄存器的讀寫情況等。
3.4 軟硬件協(xié)同驗(yàn)證
軟硬件協(xié)同驗(yàn)證是較好的驗(yàn)證方式(或調(diào)試方式),二者都是為了保證系統(tǒng)功能和結(jié)構(gòu)正確的有效手段。在整個(gè)FPGA系統(tǒng)實(shí)現(xiàn)過(guò)程中,非常有必要結(jié)合前端軟件仿真波形來(lái)參照調(diào)試系統(tǒng)各個(gè)環(huán)節(jié)的功能運(yùn)行情況,這樣可以大大簡(jiǎn)化研發(fā)進(jìn)程,有效地縮短調(diào)試周期??梢哉f(shuō),如果不結(jié)合前端軟件仿真波形來(lái)協(xié)同驗(yàn)證的話,要想實(shí)現(xiàn)一個(gè)較為復(fù)雜的體系結(jié)構(gòu)是非常困難的。
一般而言,對(duì)于這樣一個(gè)較為復(fù)雜的體系結(jié)構(gòu)需要先進(jìn)行前端RTL代碼的軟件仿真,因?yàn)榍岸朔抡鎸?duì)于糾正RTL級(jí)代碼以及功能方面的錯(cuò)誤是非常方便的,而且它所需要的驗(yàn)證周期和糾錯(cuò)難度比硬件的FPGA驗(yàn)證要有利得多。但是FPGA硬件驗(yàn)證,其真實(shí)性又是非??煽康?。所以驗(yàn)證波形完全調(diào)試通過(guò)之后,可以非常有效地指導(dǎo)FPGA的實(shí)現(xiàn)。當(dāng)FPGA在調(diào)試某項(xiàng)功能時(shí)出現(xiàn)了問(wèn)題,可以通過(guò)邏輯分析儀將可疑端口節(jié)點(diǎn)出來(lái)的觀測(cè)點(diǎn)波形導(dǎo)出來(lái)對(duì)照軟件仿真波形來(lái)查找問(wèn)題,這是一種非常有效的手段。
3.5 Demo演示速度的調(diào)整
目前,開發(fā)板選用的晶振頻率為24MHz,穩(wěn)定的演示版本速度能夠達(dá)到28幀/秒,為人眼所能接受的連續(xù)視頻速度,效果已經(jīng)相當(dāng)好。這是經(jīng)過(guò)了各種調(diào)試才達(dá)到的效果。主要原因在于考慮比較周全:DMA在傳輸圖像序列的時(shí)候,所用到的FIFO在設(shè)計(jì)之初就考慮到了FPGA的容量和利用率,認(rèn)識(shí)到其容量有限,在現(xiàn)有的FIFO容量下,要想調(diào)整到一個(gè)DMA與PC機(jī)雙方網(wǎng)口傳輸速度的精確狀態(tài)不太容易,如果運(yùn)行速度太快,交互同步不準(zhǔn)確,就會(huì)有丟包的現(xiàn)象發(fā)生;如果為了更方便的調(diào)試和達(dá)到更好的速度性能,可以選用更大容量的FPGA,設(shè)計(jì)更大容量的FIFO,這樣每一次圖像傳輸就可以傳送更多的圖像數(shù)據(jù),減少DMA搬運(yùn)的次數(shù),傳輸雙方的交互過(guò)程較為容易控制。表1給出了從開始演示速度不理想到較為理想所做的調(diào)整過(guò)程。從表1中可以看出,單獨(dú)調(diào)整晶振頻率,速度提升并不明顯。這說(shuō)明了速度瓶頸不在硬件代碼性能上,關(guān)鍵在于演示界面的軟件代碼、ARM的Cache打開與否以及圖像搬運(yùn)的速度三方面。同時(shí)還可以看出Cache的打開對(duì)于速度影響很大,說(shuō)明ARM的取指速度受到影響。目前ARM的運(yùn)行指令是放在Flash中,如果改成從SRAM中取指,估計(jì)效果會(huì)更加理想。
從以上分析可見,ARM在整個(gè)設(shè)計(jì)中所起的主要作用是控制圖像的輸入輸出,以及循環(huán)控制DSP Core的運(yùn)行停止等狀態(tài);DSP Core的主要作用是處理運(yùn)算應(yīng)用程序,計(jì)算小目標(biāo)識(shí)別程序。這樣既分工又合作,能夠充分發(fā)揮ARM的控制功能以及DSP Core的數(shù)字運(yùn)算處理功能。
與此同時(shí),由于ARM在整個(gè)設(shè)計(jì)當(dāng)中主要起到一些輔助的控制作用,ARM922T的一些擴(kuò)展DSP運(yùn)算功能沒(méi)有用到,如果綜合考慮到成本和性價(jià)比等因素,可以考慮采用ARM7硬核、NIOS 或其他形式的軟核替代。
參考文獻(xiàn)
[1] FURBER S,田澤,于敦山.ARM SOC體系結(jié)構(gòu).盛世敏,譯.北京:北京航空航天大學(xué)出版社,2002.
[2] CSCHWIND M. FPGA prototyping of a RISC processor core for embedded applications. IEEE Transactions on
Very Large Scale Integration(VLSI)Systems,2001,9(2).
[3] Hardware Reference Manual Version 3.1. www.altera.com. 2002-11.