基于TMS320C6678 的多核DSP 上電加載技術(shù)
出處:電子愛好者博客 發(fā)布于:2013-12-05 10:54:12
摘要:對于多核DSP 應(yīng)用技術(shù)來說,BootLoad 技術(shù)是一個關(guān)鍵點,也是應(yīng)用難點之一。針對8 核高性能DSP--TMS320C6678的根配置問題進行了研究,包括上電加載過程,單核和多核的emif NOR-FLASH存儲器的映像文件的產(chǎn)生,二級加載器的編寫和FLASH編程器的構(gòu)成等。其中,關(guān)鍵是在多核映像文件中,將輔助核的入口地址作為特殊數(shù)據(jù)來處理,使其他核觸發(fā)更容易,這也是其他文獻未涉及的。該項技術(shù)已經(jīng)用在某圖像處理系統(tǒng)中。
0 引言
在視頻檢測、醫(yī)療影像及紅外圖像快速跟瞄系統(tǒng)應(yīng)用中,越來越復(fù)雜的二維、三維甚至四維的圖像處理,需要并行化的處理系統(tǒng),并能夠運行復(fù)雜的算法。要實現(xiàn)這些復(fù)雜的系統(tǒng),高端FPGA+高性能DSP是目前普遍采用的方案,而單個DSP的性能已發(fā)展至極限,所以解決復(fù)雜的并行算法,多核DSP是現(xiàn)在發(fā)展的全新方向,其中多核DSP的根加載技術(shù)是其難點之一。
TI公司推出的DSP芯片TMS320C6678(C6678)具有8個內(nèi)核的高性能DSP,每個內(nèi)核工作頻率均達1 GHz.
其支持的Boot 模式有SPI、I2C、EMAC、SRIO 和并口Emif16 NOR-FLASH.其中Emif16 NOR-FLASH模式是不用上位機參與、比較簡單、獨立成系統(tǒng)的一種,大多獨立DSP系統(tǒng)采用該方式。
網(wǎng)上能搜索到關(guān)于C6472和C6678零星一些加載資料,都是借助于第三方轉(zhuǎn)換工具,太過于籠統(tǒng)。下面是針對C6678 的并口Emif16NOR-FLASH的上電加載作詳細的探討。
1 C6678 的上電加載過程
所謂上電加載(上電自舉),即是當(dāng)DSP復(fù)位后,正常運行用戶程序之前運行的一段小程序,就像PC機的BIOS 一樣。多核加載同單核加載區(qū)別很大,不但要負責(zé)主核的加載而且還有其他核的加載與激活。C6678的Emif16 NOR-FLASH 可以直接執(zhí)行程序(XIP)(這與C641x系列DSP不同),其上電加載過程示于圖1.
上電復(fù)位后,DSP 首先運行固化在片上ROM 位于地址0x20b00000 的程序,稱為片上Loader,片上Loader根據(jù)DSP硬件管腳狀態(tài),判斷用戶采用的Boot模式以跳轉(zhuǎn)到相應(yīng)模式的二級加載程序。如圖1的Emif16 NOR-FLASH 模式中,運行片上Loader 后,PC 指針直接指向NOR-FLASH 首地址0×70000000 并開始執(zhí)行FLASH 上的二級Loader 程序,二級Loader 存儲在FLASH 開始地址0×70000000~0×70000400 的范圍內(nèi)。從0×70000400開始保存應(yīng)用程序的根表數(shù)據(jù)(即被燒燒寫到FLASH中的應(yīng)用程序的數(shù)據(jù))。二級Loader的功能是將保存在FLASH中的Core0~Core7的根表數(shù)據(jù)搬移到DSP相應(yīng)的地址段內(nèi),搬移完后,二級Loader 程序PC 指針跳到Core0的主程序入口地址_c_int00處,開始執(zhí)行Core0的應(yīng)用程序。在Core0 的應(yīng)用程序開始加有使其他核激活運行的代碼(這也是有別于單核的特殊之處),至此整個多核加載就此完成。事實上,如果你的應(yīng)用程序很小,且運行速度要求不高,圖1中的2、3和4過程都可以不要,只要把應(yīng)用程序的原始代碼數(shù)據(jù)燒寫到FLASH從0×70000000 開始的位置,上電正常運行即可(這在C641x 上是不行的),如此DSP 的許多高性能就體現(xiàn)不出來,且多核工程大多采用嵌入式sysbios工程,占用存儲器比較大,所以正常的Boot過程必須采用圖1所示的二級加載過程。

從圖1 中看出,一個完整多核加載過程,開發(fā)者需要做的是二級加載器Loader 的編寫、FLASH 中映像文件的產(chǎn)生、FLASH燒寫器的編寫,主核對各輔助核的觸發(fā)代碼的編寫(被加載的應(yīng)用程序不在本范圍內(nèi))。
2 多核映像文件的組成與產(chǎn)生
映像文件就是用戶要燒寫到外部FLASH上的全部數(shù)據(jù)文件,它是由二級加載器Loader的代碼數(shù)據(jù)(在文件前部)和應(yīng)用程序的根表(Boot Table)數(shù)據(jù)(文件后部)的合成數(shù)據(jù)文件。單核和多核的二級Loader 都一樣,區(qū)別就是后部的根表數(shù)據(jù)。根表是應(yīng)用程序的所有代碼和數(shù)據(jù)以在片上占用的地址來分段存儲的數(shù)據(jù)包,包的個4 B 是main()函數(shù)的入口地址_C_int00,后面由若干數(shù)據(jù)段組成,每個段前4 B為該段數(shù)據(jù)的字節(jié)長度Byte_count_x(x 為段序號),接著4 B Address_x 為該段在片上的存儲地址,后面是Byte_count_x個字節(jié)的具體數(shù)據(jù)Data_x.所有數(shù)據(jù)段結(jié)束后是4個字節(jié)0作為根表的結(jié)束標(biāo)記。該根表格式如表1所示。每一個段的數(shù)據(jù)字節(jié)數(shù)可能不是4的整數(shù)倍,根表中數(shù)據(jù)區(qū)就在后面添0按4 B的整數(shù)倍向上取整,故整個根表文件字節(jié)數(shù)必是4的整數(shù)倍。
根表數(shù)據(jù)產(chǎn)生很簡單,由應(yīng)用程序終生成的Out文件,通過ccs自帶工具hex6x.exe選擇不同的參數(shù)而產(chǎn)生,產(chǎn)生的文件即是根表文件,可以選擇生成二進制文件或文本文件,本研究采用二進制。其產(chǎn)生命令為(app為應(yīng)用程序名,app.out為ccs產(chǎn)生的連接文件):
hex6x -boot -b -e _c_int00 -order L -memwidth=32 -romwidth=32 -o app.bin app.out
app.bin為產(chǎn)生的二進制根表文件,將二級Loader程序的二進制代碼加到根表文件的頭部即是app 應(yīng)用程序的映像文件。

多核的映像文件是由二級加載器Loader和多個核應(yīng)用的根表合并而成的文件。多個核對應(yīng)多個獨立的工程,并由CCS 產(chǎn)生多個out 文件,再由hex6x.exe 產(chǎn)生各核的根表文件。后對Core0 的根表文件先去掉末尾4 個0字節(jié),再將各輔助核的根表文件的開始的入口地址_C_int00和末尾4個0字節(jié)去掉,加到Core0被去掉了末尾字節(jié)的根表文件后,然后再將每個核的_C_int00當(dāng)成一個4字節(jié)的數(shù)據(jù)段來保存到上面的合成文件的后面,而各_C_int00在片上的存放地址即為各核的專門固定地址Boot Magic Address,如Core1 的Boot Magic Ad-dress 為0x1187fffc,Core2 為0x1287fffc,…,Core7 為0x1787fffc.所有根表數(shù)據(jù)段構(gòu)成后,再將4個0字節(jié)作為結(jié)尾標(biāo)志加到文件的,這樣合并后的根表文件如表2所示。同樣,將二級Loader的代碼數(shù)據(jù)加到該文件頭部即形成多核的映像文件。由hex6x 生成的單核根表文件到合成映像文件的產(chǎn)生,全是文件操作,可以用一般的C語言工具,甚至Matlab等工具都可以完成。

同表1相比,表2僅僅只是增加了所有輔助核數(shù)據(jù)段和各核的_C_int00特殊數(shù)據(jù)段而已,表頭和結(jié)束字節(jié)都相同,因此完全適用于二級Loader按統(tǒng)一Boot Table格式搬移數(shù)據(jù)。需特別注意,各輔助核的out文件通過hex6x.exe 產(chǎn)生的根表數(shù)據(jù)段中,當(dāng)映射到L2(0×00800000~0x0087FFFF)的范圍時,與Core0 的地址是相互覆蓋的,產(chǎn)生合成根表時必須加上各核的L2基地址0×10000000 + n*0×1000000(n 為輔助核號),如Core1 的地址0×00825000,映射為0×11825000,同樣地址Core2映射為0×12825000,Core7映射為0×17825000.
3 二級Loader 程序和FLASH燒寫程序
二級Loader 是一段小代碼程序,其功能就是將FLASH 的根表數(shù)據(jù)如圖1 中從0×70000400 開始按表2的格式保存的數(shù)據(jù)搬移到DSP的RAM中。該Loader比較簡單,一般是一小段匯編代碼,代碼如下:

需要注意的是,由于DDR 沒有初始化,所以二級Loader不能加載DDR數(shù)據(jù),DDR只作數(shù)據(jù)存儲器用,確實要加載到DDR中,只能將DDR數(shù)據(jù)存在FLASH一指定段中,待Core0運行開始初始化DDR 后,將該數(shù)據(jù)讀到RAM中。
對于FLASH 的燒寫程序,主要任務(wù)就是把多核的合成文件燒寫到外部Emif16 NOR-FLASH 存儲器中。
由于TI大部分的Emif并口加載都是開放式的,開發(fā)者完全可以根據(jù)自己的思路和格式來產(chǎn)生和燒寫映像文件,故燒寫器TI公司是不提供的。其實,一旦合成根表文件產(chǎn)生后,燒寫器也顯得容易了。燒寫器一般使用輸出legacy COFF格式的CCS工程即可。從圖1的加載過程看,要燒寫的映像文件內(nèi)容包括二級加載器Loader的代碼和表2 的根表文件兩部分。二級Loader可以放到燒寫器的開頭main()函數(shù)之前,也可以放到Core0的應(yīng)用程序同樣位置,本研究采用前者,將二級Loader代碼映射到燒寫工程中指定的存儲器。boot_load段。燒寫器的編程流程如圖2所示。

4 輔助核的觸發(fā)
多核的加載,如果圖1 中僅僅只是進入Core0 的_C_int00地址運行而其他核還未激活,加載仍然是失敗的。輔助核的觸發(fā),必須兩個條件,一是將各核工程的入口地址_C_int00 寫到各核的Boot Magic Address 處;二是向各核的核間中斷觸發(fā)寄存器IPCx(1<x<7)寫1.入口地址_C_int00已經(jīng)在表2的根表文件中由二級加載器Loader寫到了各核的Boot Magic Address了。這里只需要在Core0 應(yīng)用程序開始向相應(yīng)的IPCx 寫1 即可。由于IPCx是配置寄存器,不能隨便改動的,其改寫要通過向兩個解鎖寄存器KICK0,KICK1寫特殊數(shù)據(jù)來解鎖,即KICK0=0x83e70b13,KICK1=0x95a4f1e0.解鎖后負值IPCx=1 即對x 核激活。激活后必須將IPCx 加鎖,即通過寫數(shù)據(jù)KICK0=0,KICK1=0,IPCx 就被鎖住。
一旦輔助核被觸發(fā),在輔助核應(yīng)用程序中,須向各自核的Boot Magic Address 寫入數(shù)據(jù)0xbabeface 替換各自的_C_int00.
5 結(jié)語
多核DSP 加載是一項比較復(fù)雜但又很重要的過程,也是多核技術(shù)的應(yīng)用難點之一,一個多核DSP開發(fā)人員,如果要成功走向應(yīng)用,上電加載這一關(guān)是必須要過的。各核的應(yīng)用工程可以是輸出elf格式sysbios工程,也可以不是sysbios 工程。上面的多核Emif16NOR-FLASH 加載方法,在自研的C6678 圖像信號處理系統(tǒng)中已成功加載。(作者:劉章文,劉七華,謝川林,袁學(xué)文)
版權(quán)與免責(zé)聲明
凡本網(wǎng)注明“出處:維庫電子市場網(wǎng)”的所有作品,版權(quán)均屬于維庫電子市場網(wǎng),轉(zhuǎn)載請必須注明維庫電子市場網(wǎng),http://www.hbjingang.com,違反者本網(wǎng)將追究相關(guān)法律責(zé)任。
本網(wǎng)轉(zhuǎn)載并注明自其它出處的作品,目的在于傳遞更多信息,并不代表本網(wǎng)贊同其觀點或證實其內(nèi)容的真實性,不承擔(dān)此類作品侵權(quán)行為的直接責(zé)任及連帶責(zé)任。其他媒體、網(wǎng)站或個人從本網(wǎng)轉(zhuǎn)載時,必須保留本網(wǎng)注明的作品出處,并自負版權(quán)等法律責(zé)任。
如涉及作品內(nèi)容、版權(quán)等問題,請在作品發(fā)表之日起一周內(nèi)與本網(wǎng)聯(lián)系,否則視為放棄相關(guān)權(quán)利。
- 掌握 DSP:原理剖析與應(yīng)用實踐2025/5/8 14:03:24
- 模糊邏輯在 DSP 上實時執(zhí)行2023/7/25 17:13:30
- 多速率DSP及其在數(shù)模轉(zhuǎn)換中的應(yīng)用2023/6/12 15:28:52
- 使用 DSP 加速 CORDIC 算法2023/3/29 15:46:30
- 高速DSP系統(tǒng)的信號完整性2022/9/26 16:45:38
- 高速PCB信號完整性(SI)設(shè)計核心實操規(guī)范
- 鎖相環(huán)(PLL)中的環(huán)路濾波器:參數(shù)計算與穩(wěn)定性分析
- MOSFET反向恢復(fù)特性對系統(tǒng)的影響
- 電源IC在惡劣環(huán)境中的防護設(shè)計
- 連接器耐腐蝕性能測試方法
- PCB電磁兼容(EMC)設(shè)計與干擾抑制核心實操規(guī)范
- 用于相位噪聲測量的低通濾波器設(shè)計與本振凈化技術(shù)
- MOSFET在高頻開關(guān)中的EMI問題
- 電源IC在便攜式設(shè)備中的設(shè)計要點
- 連接器結(jié)構(gòu)設(shè)計常見問題分析









