?

基于TMS320C6678的多核程序加載研究與實現

2015-02-23 10:52李飛平卿粼波滕奇志何小海
電子技術應用 2015年3期
關鍵詞:啟動程序內容

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

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

基于TMS320C6678的多核程序加載研究與實現

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

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

針對多核DSP系統程序加載復雜的問題,基于TMS320C6678對多核程序加載進行了研究與設計。從一級引導程序出發,設計并優化了多核程序內容存儲格式。設計了簡潔的二級引導程序,以修正一級引導程序只識別主核程序入口地址,而從核入口地址缺失的現象。為了快速生成特定格式的多核程序內容,設計了多個工具用于添加SPI啟動參數表、DDR3啟動表、從核程序入口地址以及完成程序內容格式的轉換。實現了SPI Flash多核程序加載以及基于I2C主模式的Nand Flash多核程序加載。

多核程序加載;多核程序內容存儲格式;啟動配置表;c_int00地址;二級引導程序

0 引言

多核DSP的程序加載是其開發過程中一個重要的研究課題。多核協同工作時,通常需要為每個核單獨加載用戶程序,它涉及外設的初始化、主從核任務分配以及多核程序內容存儲格式等諸多問題,工程應用中要求系統能夠脫機自啟動加載多核程序。

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

1 C6678程序加載原理

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

圖1 C6678多核程序加載流程

2 SPI Flash多核程序加載設計

2.1 多核程序內容存儲格式的設計與改進

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

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

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

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

圖 2 SPI Flash多核程序內容的存儲方式

2.2 多核程序內容存儲格式的實現

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

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

圖3 C6678多核程序數據塊的組織流程

3 基于I2C主模式的Nand Flash多核程序加載設計

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

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

3.1 Nand Flash中多核程序內容存儲格式的設計

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

3.2 EEPROM中二級引導程序的設計

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

圖 4 Nand Flash多核程序內容存儲格式及其生成流程

4 設計驗證

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

圖5 二級引導程序流程圖

5 結論

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

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

[2]陶永燕.基于 TI C66多核DSP技術的研究與應用[D].北京:北京郵電大學,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]吳家鑄,田希,趙傳軍,等.面向軟基站高密集度計算的創新DSP的反匯編器研究[J].計算機工程與科學,2013,35(7):1-5.

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

[7]何正軍,朱善安.TMS320DM642 DSP二級引導程序的設計與實現[J].電子器件,2006,29(1):260.

[8]文燚,謝凱年.超大容量NAND FLASH壞區管理方法的設計與實現[J].現代電子技術,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-),男,博士,副教授,主要研究方向:嵌入式系統、圖像處理與通信。

滕奇志(1961-),女,博士,博士生導師,主要研究方向:計算機應用與圖像識別。

猜你喜歡
啟動程序內容
內容回顧溫故知新
試論我國未決羈押程序的立法完善
霧霾來襲 限產再次啟動
“程序猿”的生活什么樣
安發生物啟動2017
英國與歐盟正式啟動“離婚”程序程序
主要內容
創衛暗訪程序有待改進
西部最大規模云計算中心啟動
俄媒:上合組織或9月啟動擴員
91香蕉高清国产线观看免费-97夜夜澡人人爽人人喊a-99久久久无码国产精品9-国产亚洲日韩欧美综合