《電子技術(shù)應(yīng)用》
您所在的位置:首頁 > 嵌入式技術(shù) > 設(shè)計(jì)應(yīng)用 > 基于TMS320C6678的多核程序加載研究與實(shí)現(xiàn)
基于TMS320C6678的多核程序加載研究與實(shí)現(xiàn)
2015年電子技術(shù)應(yīng)用第3期
李飛平,卿粼波,滕奇志,舒 君,何小海
四川大學(xué) 電子信息學(xué)院,四川 成都610064
摘要: 針對多核DSP系統(tǒng)程序加載復(fù)雜的問題,基于TMS320C6678對多核程序加載進(jìn)行了研究與設(shè)計(jì)。從一級引導(dǎo)程序出發(fā),設(shè)計(jì)并優(yōu)化了多核程序內(nèi)容存儲格式。設(shè)計(jì)了簡潔的二級引導(dǎo)程序,以修正一級引導(dǎo)程序只識別主核程序入口地址,而從核入口地址缺失的現(xiàn)象。為了快速生成特定格式的多核程序內(nèi)容,設(shè)計(jì)了多個(gè)工具用于添加SPI啟動參數(shù)表、DDR3啟動表、從核程序入口地址以及完成程序內(nèi)容格式的轉(zhuǎn)換。實(shí)現(xiàn)了SPI Flash多核程序加載以及基于I2C主模式的Nand Flash多核程序加載。
中圖分類號: TP368
文獻(xiàn)標(biāo)識碼: A
文章編號: 0258-7998(2015)03-0031-04
Multicore program loading research and improve based on TMS320C6678
Li Feiping,Qing Lingbo,Teng Qizhi,Shu Jun,He Xiaohai
School of Electronics and Information Engineering,Sichuan University,Chengdu 610064,China
Abstract: Program loading for multicore DSP system is very complex, this paper takes a research on that issue based on TMS320C6678. According to the first level bootloader, this paper designs and improves one kind of multicore program data storage format. Since the first level bootloader can only recognize the c_int00 entry address of master core which causes the slave core′s c_int00 entry address missing, one secondary bootloader is designed to solve that problem. In order to generate the specified format multicore program for the Flash fastly, multiple utilities is designed to help adding SPI boot parameter table, DDR3 boot table, slave cores′ program entry address as well as changing program data format. SPI Flash multicore program loading and Nand Flash multicore program loading based on I2C master mode are realized in this paper.
Key words : multicore program loading;multicore program data storage format;boot configuration table;c_int00 address;second level bootloader

  

0 引言

  多核DSP的程序加載是其開發(fā)過程中一個(gè)重要的研究課題。多核協(xié)同工作時(shí),通常需要為每個(gè)核單獨(dú)加載用戶程序,它涉及外設(shè)的初始化、主從核任務(wù)分配以及多核程序內(nèi)容存儲格式等諸多問題,工程應(yīng)用中要求系統(tǒng)能夠脫機(jī)自啟動加載多核程序。

  隨著DSP的主頻越來越高以及外部接口越來越豐富,程序的加載方式也日趨復(fù)雜和多樣化。以德州儀器(TI)開發(fā)的8核keystone架構(gòu)的TMS320C6678(以下簡稱C6678)為例,它支持SPI Flash加載、I2C主從加載、網(wǎng)絡(luò)加載以及PCIe加載等多達(dá)7種方式。由于TI官方對多核DSP程序加載技術(shù)的相關(guān)指導(dǎo)及目前國內(nèi)外對多核程序加載的研究較少,且多核程序加載自身較復(fù)雜,大多數(shù)用戶無法深入理解多核程序加載的思想,難以在工程應(yīng)用中快速實(shí)現(xiàn)多核程序的自啟動加載。本文實(shí)現(xiàn)了SPI Flash和基于I2C主模式的Nand Flash多核程序加載,提高了多核程序加載的效率。

1 C6678程序加載原理

  C6678內(nèi)部ROM中固化了一段一級引導(dǎo)程序,它針對不同的加載方式初始化相應(yīng)外設(shè),并從片外ROM或用戶主機(jī)等不同的存儲位置將用戶程序搬移到指定的高速存儲區(qū)中,如二級緩存(L2)或DDR3。C6678通過核索引編號(DNUM)將8個(gè)核標(biāo)稱為core0~core7。只有core0有執(zhí)行一級引導(dǎo)程序的權(quán)限。C6678各核訪問自己的L2時(shí),可以采用本地地址或全局地址,但訪問其他核的L2時(shí),只能使用全局地址[1]。因此若要將多核程序存放到各核的L2中,在程序設(shè)計(jì)初期,程序各段內(nèi)容都必須使用全局地址進(jìn)行映射,否則core0會將所有核的程序都搬移到自己的L2中,而導(dǎo)致程序被覆蓋無法執(zhí)行的錯誤。圖1是C6678多核程序加載的流程。C6678在每個(gè)核的L2中預(yù)留了一個(gè)被稱為Boot Magic Address的空間,用來存儲該核的c_int00入口地址。C6678完成多核程序的加載后,只有core0能夠自動跳轉(zhuǎn)到c_int00處執(zhí)行程序,core1~core7都處于空閑狀態(tài)(IDLE),需要core0喚醒。L2中的IPC中斷生成寄存器(IPCGRx),用于核間通信,當(dāng)core0要喚醒core1,只需向IPCGR1中寫1即可[2]。

001.jpg

2 SPI Flash多核程序加載設(shè)計(jì)

  2.1 多核程序內(nèi)容存儲格式的設(shè)計(jì)與改進(jìn)

  C6678的一級引導(dǎo)程序能識別的SPI Flash中的數(shù)據(jù)存儲格式分為兩類:(1)第一類,只含SPI啟動參數(shù)表和啟動表兩部分,其中啟動參數(shù)表含CPU時(shí)鐘、待加載表類型及偏移地址等信息;啟動表是待加載表的一種,含程序段的大小、目的地址等信息;(2)第二類,增加了啟動配置表,常用于初始化DDR3[3]。前者用于程序內(nèi)容小于512 KB,可全部搬移到L2中執(zhí)行的情況;當(dāng)程序大于512 KB時(shí),需搬移到DDR3中執(zhí)行,因此要先初始化DDR3。為增加適用性,本文采用第二類存儲格式。

  文獻(xiàn)[3]中,TI使用參數(shù)配置模板來初始化DDR3,即每一個(gè)寄存器都需要選擇置位、清除、保持原值中的一種模板狀態(tài)來設(shè)定每個(gè)bit位的值,用戶非常容易混淆不同模板的功能;且每個(gè)寄存器需要占用3個(gè)字的空間,造成了一定程度上的空間浪費(fèi)。本文提出了將文獻(xiàn)[4]中提供的DDR3配置表轉(zhuǎn)換為特殊的DDR3啟動表對DDR3進(jìn)行初始化的改進(jìn)方式。表1以對DDR3的SDRFC寄存器進(jìn)行配置為例,對兩種方式進(jìn)行對比。

007.jpg

  采用參數(shù)配置模板時(shí),當(dāng)遇到連續(xù)的3個(gè)32 bit值為0的模板代表配置結(jié)束。而本文提出的方式指定了配置表的大小,不需要判定結(jié)束信息。圖2右半部分是本文最終生成的多核程序數(shù)據(jù)存儲格式,粗線框表示兩種DDR3初始化方式的差異,其中DDR3配置表存放的目的地址由一級引導(dǎo)程序固定為:0x00873500,SPI啟動參數(shù)表占8個(gè)字空間,DDR3配置表內(nèi)容為28個(gè)字,c_int00、各段目的地址以及大小均為1個(gè)字,其他各段內(nèi)容視程序而定。本文改進(jìn)方式中,對DDR3的配置相當(dāng)于core0的一段程序內(nèi)容,因此SPI啟動參數(shù)表對二者的判定亦不同,前者為啟動配置表,而后者為啟動表。

002.jpg

  2.2 多核程序內(nèi)容存儲格式的實(shí)現(xiàn)

  使用CCS開發(fā)的DSP程序,通常會生成一種COFF格式的.out文件,它包含重定位、符號表等輔助信息,格式解析復(fù)雜,且比有效數(shù)據(jù)要大數(shù)倍,造成存儲空間的浪費(fèi)[5]。為了正確且快速的生成圖2所示的多核程序文件,本文采用圖3中的工具鏈對.out文件進(jìn)行轉(zhuǎn)換。為了便于描述,圖3只列舉了core0的.out文件轉(zhuǎn)換為.btbl文件的過程。其中hex6x、mergebtbl、b2i2c和b2ccs是TI官方提供的工具, addcfg和addparam是本文為完善工具鏈,在VS2010平臺上開發(fā)的工具。hex6x去掉了.out文件中的所有輔助信息,并根據(jù)鏈接文件,生成特定的文件[6],.btbl文件末4個(gè)連續(xù)的值為0的字節(jié)表示文件內(nèi)容的結(jié)束;mergebtbl將多個(gè).btbl文件進(jìn)行合并[1];b2i2c將.btbl文件按124 B大小分塊,并生成相應(yīng)的校驗(yàn)碼字[3];b2ccs將十六進(jìn)制字符合并為32 bit的十六進(jìn)制數(shù)據(jù)[3];addcfg用于添加DDR3配置表到指定位置處;addparam則用于添加SPI啟動參數(shù)表。

003.jpg

  待添加的DDR啟動表的數(shù)據(jù)與.btbl格式一致,如SDRFC寄存器的內(nèi)容保存為00 00 14 50,而addparam添加的SPI啟動參數(shù)表內(nèi)的數(shù)據(jù)則與.dat格式一致,如0x00300000。由于工具鏈較長,本文采用批處理的方式將所有命令按順序?qū)懭胍粋€(gè).bat文件中,并將多核.out文件、DDR3啟動表、SPI啟動參數(shù)表和hex6x的鏈接文件放在同一目錄下,即可一次性完成所有的轉(zhuǎn)換工作,極大地提升了轉(zhuǎn)換效率。本文所使用的hex6x工具鏈接文件如下:

  corex.out//輸入待轉(zhuǎn)換的COFF文件

  -a//生成支持32bit地址的 ASCII-Hex格式的目標(biāo)文件

  -boot//轉(zhuǎn)換成啟動表格式

  -e  _c_int00//指明程序的c_int00入口地址

  -order  M//生成大端格式的數(shù)據(jù)(一級引導(dǎo)程序默認(rèn)

  SPI中存儲的數(shù)據(jù)是按大端格式)

  ROMS

  {

  ROM1: org=0x0400,length=0x800000,memwidth=32,

  romwidth = 32,files = { corex.btbl }

  } //轉(zhuǎn)換生成corex.btbl文件(x為核號);指定存儲區(qū)

  起始地址、位寬等信息,本文對存儲區(qū)信息無要求

3 基于I2C主模式的Nand Flash多核程序加載設(shè)計(jì)


005.jpg


  NOR Flash的存儲容量通常小于16 MB,而Nand Flash則要大得多,常見的有128 MB、256 MB等。目前針對DSP系統(tǒng)的圖像處理算法越來越復(fù)雜,代碼體積急劇增加,本文設(shè)計(jì)了基于I2C主模式的Nand Flash多核程序加載方案,以供大型程序的自啟動加載。由圖2可知,SPI Flash加載多核程序時(shí)只包含了core0的c_int00地址,因此core0的程序中必須包含寫core1~7的c_int00地址到各自Boot Magic Address中的操作。若core1~7任一核的程序有改動導(dǎo)致其c_int00地址發(fā)生改變 ,就必須修改core0程序,重新找到并指定相應(yīng)核的c_int00地址,并重新編譯core0工程,影響開發(fā)進(jìn)度。本文通過基于I2C主模式的Nand Flash加載方式來解決這一缺陷。

  本加載方式中C6678作為I2C主機(jī), EEPROM作為I2C從機(jī)用于存儲一段較小的可執(zhí)行的搬移程序,被稱為二級引導(dǎo)程序[7]。因?yàn)镋EPROM存儲容量通常只有幾百KB,無法滿足一般用戶程序的存儲需求,真正的用戶程序則存儲在容量更大的Nand Flash中。

  3.1 Nand Flash中多核程序內(nèi)容存儲格式的設(shè)計(jì)

  Nand Flash中多核程序內(nèi)容存儲格式由二級引導(dǎo)程序決定,本文設(shè)計(jì)了如圖4中userapp.dat所示的存儲格式,比圖3更為簡潔,它一方面降低了二級引導(dǎo)程序的設(shè)計(jì)難度;一方面修正了SPI Flash加載中core1~core7的c_int00地址缺失問題。圖4中,merge_cint是本文對mergebtbl改進(jìn)后的工具名,它增加了將core1~core7的c_int00地址保存在cint.map的文本文件中而不是直接丟棄處理的功能,若某核的.out文件缺失,則該核的c_int00地址為0x00000000;新設(shè)計(jì)的addentry工具的作用則是將多核合并時(shí)產(chǎn)生的cint.map文件中的c_int00地址添加到userapp.dat文件的相應(yīng)位置處。

  3.2 EEPROM中二級引導(dǎo)程序的設(shè)計(jì)


006.jpg


  圖5是本文是針對圖4所示的多核程序存儲格式在CCS中開發(fā)的二級引導(dǎo)程序,它是一個(gè)與多核程序無關(guān)的獨(dú)立工程,編譯完成后,通過CCS可以直接下載到C6678系統(tǒng)的EEPROM中。加載不同的多核程序,每次只需修改Nand Flash中的內(nèi)容即可。二級引導(dǎo)程序循環(huán)主體部分:對Nand Flash采用隨機(jī)讀的方式,每次搬移4個(gè)字節(jié)到指定的存儲區(qū)中;core0~7的c_int00地址解析部分實(shí)現(xiàn)從Nand Flash多核程序內(nèi)容中提取8個(gè)核的c_int00地址,并依次寫入到相應(yīng)核的Boot Magic Address中。為了保證多核程序的可靠加載,在c_int00地址解析以及循環(huán)主體部分,每當(dāng)開始讀取新的塊時(shí),都要檢查壞塊標(biāo)志信息,以確定該塊數(shù)據(jù)是否可用[8]。

4 設(shè)計(jì)驗(yàn)證

  本文采用同一個(gè)多核工程對SPI Flash和基于I2C主模式的Nand Flash兩種加載方式進(jìn)行測試。該工程包含8個(gè)核的.out文件,分別命名為core0.out~core7.out,其中core0.out的大小為10 618 KB,core1.out~core7.out大小均為5 468 KB,core0開始執(zhí)行程序便向core1~core7發(fā)送IPC中斷,core1~core7成功收到中斷后分別點(diǎn)亮系統(tǒng)中的一盞LED燈標(biāo)示程序成功執(zhí)行。本文對兩種操作方式分別進(jìn)行了5次實(shí)驗(yàn),程序均成功執(zhí)行。其中SPI Flash耗時(shí)21.87 s,基于I2C主模式的Nand Flash加載耗時(shí)34.63 s。二者的時(shí)間差異來源于:Nand Flash的數(shù)據(jù)讀速率低于NOR型SPI Flash;基于I2C主模式的Nand Flash需經(jīng)歷二級加載,但如文中所述,二者各有優(yōu)劣。實(shí)際工程中應(yīng)根據(jù)情況靈活選用加載方式。

5 結(jié)論

  本文總結(jié)了core0主導(dǎo)下的多核程序加載以及啟動的流程,設(shè)計(jì)并改進(jìn)了SPI Flash多核加載,采用DDR3啟動配置表代替參數(shù)配置模板,并設(shè)計(jì)添加配置表,啟動參數(shù)表等相關(guān)工具,降低了SPI Flash多核程序加載的開發(fā)難度。針對SPI Flash多核程序加載中存在SPI Flash存儲容量偏小、core1~core7的c_int00地址缺失的問題,作為互補(bǔ)方案,本文設(shè)計(jì)了基于I2C主模式的Nand Flash多核程序加載,包括二級引導(dǎo)程序和相關(guān)工具的設(shè)計(jì)。最后通過實(shí)際的工程驗(yàn)證了方案的可行性。本文也可為TI推出的C66x等系列多核DSP程序的加載提供參考,具有一定的工程應(yīng)用價(jià)值。

  參考文獻(xiàn)

  [1] Texas Instruments. Multicore programming guide[Z].SPRA-B27A,August 2009.

  [2] 陶永燕.基于TI C66多核DSP技術(shù)的研究與應(yīng)用[D].北京:北京郵電大學(xué),2012.

  [3] Texas Instruments.DSP bootloader for keystone architectureuser′s guide[Z].SPRUGY9C,July 2013.

  [4] Texas Instruments. TMS320C6678 multicore fixed and float-ing-point digital signal processor[Z].SPRS691D,April 2013.

  [5] 吳家鑄,田希,趙傳軍,等.面向軟基站高密集度計(jì)算的創(chuàng)新DSP 的反匯編器研究[J].計(jì)算機(jī)工程與科學(xué),2013,35(7):1-5.

  [6] Texas Instruments.TMS320C6000 assembly language tools v7.4 user′s guide[Z].SPRU186W,July 2012.

  [7] 何正軍,朱善安.TMS320DM642 DSP二級引導(dǎo)程序的設(shè)計(jì)與實(shí)現(xiàn)[J].電子器件,2006,29(1):260.

  [8] 文燚,謝凱年.超大容量NAND FLASH壞區(qū)管理方法的設(shè)計(jì)與實(shí)現(xiàn)[J].現(xiàn)代電子技術(shù),2007,30(16):55-57.





此內(nèi)容為AET網(wǎng)站原創(chuàng),未經(jīng)授權(quán)禁止轉(zhuǎn)載。
主站蜘蛛池模板: 成人妇女免费播放久久久| 深夜a级毛片免费无码| 国产精品冒白浆免费视频| 中国speakingathome宾馆学生 | 永久在线免费观看| 国产ts人妖合集magnet| www.日本在线视频| 女m羞辱调教视频网站| 久久久久国色av免费看| 欧美人与物videos另类xxxxx| 免费看黄色网页| 试看120秒做受小视频免费| 国产精品密蕾丝视频| jizz中国免费| 扒开粉嫩的小缝开始亲吻男女| 亚洲av无码一区二区三区鸳鸯影院| 男生和女生一起差差差很痛视频 | 亚洲av无码一区二区三区鸳鸯影院| 用我的手指来扰乱吧全集在线翻译| 国产乱弄免费视频| 亚洲国产成人99精品激情在线| 壮汉紫黑粗大好深用力| 中国精品一级毛片免费播放| 日韩a级片在线观看| 亚洲免费观看网站| 深夜放纵内射少妇| 午夜视频1000| 野花日本免费观看高清电影8 | 四虎亚洲国产成人久久精品| 黑人巨大sv张丽在线播放| 国产精彩对白综合视频| japanesehd奶水哺乳期| 成人无码Av片在线观看| 久久人人爽人人爽人人av东京热| 欧美xxxxx性喷潮| 亚洲日韩第一页| 热re99久久国产精品| 免费网站看av片| 美女扒开尿口让男人桶进| 国产免费av一区二区三区| 国产小视频91|