国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

基于TMS320C6678的多核程序加載研究與實(shí)現(xiàn)

2015-02-23 10:52李飛平卿粼波滕奇志何小海
電子技術(shù)應(yīng)用 2015年3期
關(guān)鍵詞:啟動(dòng)程序內(nèi)容

李飛平,卿粼波,滕奇志,舒 君,何小海

(四川大學(xué) 電子信息學(xué)院,四川 成都610064)

基于TMS320C6678的多核程序加載研究與實(shí)現(xiàn)

李飛平,卿粼波,滕奇志,舒 君,何小海

(四川大學(xué) 電子信息學(xué)院,四川 成都610064)

針對多核DSP系統(tǒng)程序加載復(fù)雜的問題,基于TMS320C6678對多核程序加載進(jìn)行了研究與設(shè)計(jì)。從一級引導(dǎo)程序出發(fā),設(shè)計(jì)并優(yōu)化了多核程序內(nèi)容存儲(chǔ)格式。設(shè)計(jì)了簡潔的二級引導(dǎo)程序,以修正一級引導(dǎo)程序只識(shí)別主核程序入口地址,而從核入口地址缺失的現(xiàn)象。為了快速生成特定格式的多核程序內(nèi)容,設(shè)計(jì)了多個(gè)工具用于添加SPI啟動(dòng)參數(shù)表、DDR3啟動(dòng)表、從核程序入口地址以及完成程序內(nèi)容格式的轉(zhuǎn)換。實(shí)現(xiàn)了SPI Flash多核程序加載以及基于I2C主模式的Nand Flash多核程序加載。

多核程序加載;多核程序內(nèi)容存儲(chǔ)格式;啟動(dòng)配置表;c_int00地址;二級引導(dǎo)程序

0 引言

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

隨著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)多核程序的自啟動(dòng)加載。本文實(shí)現(xiàn)了 SPI Flash和基于 I2C主模式的 Nand Flash多核程序加載,提高了多核程序加載的效率。

1 C6678程序加載原理

C6678內(nèi)部 ROM中固化了一段一級引導(dǎo)程序,它針對不同的加載方式初始化相應(yīng)外設(shè),并從片外ROM或用戶主機(jī)等不同的存儲(chǔ)位置將用戶程序搬移到指定的高速存儲(chǔ)區(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會(huì)將所有核的程序都搬移到自己的L2中,而導(dǎo)致程序被覆蓋無法執(zhí)行的錯(cuò)誤。圖1是C6678多核程序加載的流程。C6678在每個(gè)核的L2中預(yù)留了一個(gè)被稱為Boot Magic Address的空間,用來存儲(chǔ)該核的c_int00入口地址。C6678完成多核程序的加載后,只有core0能夠自動(dòng)跳轉(zhuǎn)到 c_int00處執(zhí)行程序,core1~core7都處于空閑狀態(tài) (IDLE),需要core0喚醒。L2中的IPC中斷生成寄存器(IPCGRx),用于核間通信,當(dāng) core0要喚醒 core1,只需向 IPCGR1中寫 1即可[2]。

圖1 C6678多核程序加載流程

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

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

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

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

表1 兩種DDR3初始化方式的對比

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

圖 2 SPI Flash多核程序內(nèi)容的存儲(chǔ)方式

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

使用CCS開發(fā)的DSP程序,通常會(huì)生成一種COFF格式的.out文件,它包含重定位、符號表等輔助信息,格式解析復(fù)雜,且比有效數(shù)據(jù)要大數(shù)倍,造成存儲(chǔ)空間的浪費(fèi)[5]。為了正確且快速的生成圖2所示的多核程序文件,本文采用圖3中的工具鏈對.out文件進(jìn)行轉(zhuǎn)換。為了便于描述,圖3只列舉了core0的.out文件轉(zhuǎn)換為.btbl文件的過程。其中 hex6x、mergebtbl、b2i2c和 b2ccs是 TI官方提供的工具,addcfg和addparam是本文為完善工具鏈,在VS2010平臺(tái)上開發(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啟動(dòng)參數(shù)表。

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

圖3 C6678多核程序數(shù)據(jù)塊的組織流程

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

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

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

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

Nand Flash中多核程序內(nèi)容存儲(chǔ)格式由二級引導(dǎo)程序決定,本文設(shè)計(jì)了如圖 4中userapp.dat所示的存儲(chǔ)格式,比圖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ì)

圖5是本文是針對圖4所示的多核程序存儲(chǔ)格式在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é)到指定的存儲(chǔ)區(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 Nand Flash多核程序內(nèi)容存儲(chǔ)格式及其生成流程

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 二級引導(dǎo)程序流程圖

5 結(jié)論

本文總結(jié)了 core0主導(dǎo)下的多核程序加載以及啟動(dòng)的流程,設(shè)計(jì)并改進(jìn)了 SPI Flash多核加載,采用 DDR3啟動(dòng)配置表代替參數(shù)配置模板,并設(shè)計(jì)添加配置表,啟動(dòng)參數(shù)表等相關(guān)工具,降低了 SPI Flash多核程序加載的開發(fā)難度。針對 SPI Flash多核程序加載中存在 SPI Flash存儲(chǔ)容量偏小、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à)值。

[1]Texas Instruments.Multicore programming guide[Z].SPRAB27A,August 2009.

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

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

[4]Texas Instruments.TMS320C6678 multicore fixed and floating-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.

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)

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.

multicore program loading;multicore program data storage format;boot configuration table;c_int00 address;second level bootloader

TP368

:A

:0258-7998(2015)03-0031-04

10.16157/j.issn.0258-7998.2015.03.006

2014-11-24)

李飛平(1990-),男,碩士研究生,主要研究方向:嵌入式圖像處理與通信。

卿粼波(1982-),男,博士,副教授,主要研究方向:嵌入式系統(tǒng)、圖像處理與通信。

滕奇志(1961-),女,博士,博士生導(dǎo)師,主要研究方向:計(jì)算機(jī)應(yīng)用與圖像識(shí)別。

猜你喜歡
啟動(dòng)程序內(nèi)容
內(nèi)容回顧溫故知新
試論我國未決羈押程序的立法完善
霧霾來襲 限產(chǎn)再次啟動(dòng)
“程序猿”的生活什么樣
安發(fā)生物啟動(dòng)2017
英國與歐盟正式啟動(dòng)“離婚”程序程序
主要內(nèi)容
創(chuàng)衛(wèi)暗訪程序有待改進(jìn)
西部最大規(guī)模云計(jì)算中心啟動(dòng)
俄媒:上合組織或9月啟動(dòng)擴(kuò)員