薛志遠(yuǎn), 王春雷
(中國空空導(dǎo)彈研究院, 河南 洛陽 471009)
基于TMS320C6678的多核Bootloader設(shè)計與實現(xiàn)
薛志遠(yuǎn), 王春雷
(中國空空導(dǎo)彈研究院, 河南 洛陽 471009)
針對TMS320C6678多核處理器的特性, 提出一種基于多核Bootloader的設(shè)計方法。 闡述了TMS320C6678 Bootloader的原理和工作機制, 并給出一種多核用戶程序鏡像文件的生成方法, 實現(xiàn)了TMS320C6678的多核程序加載以及上電自啟動。 經(jīng)驗證, TMS320C6678在該設(shè)計方法下能夠穩(wěn)定運行。
彈載計算機; TMS320C6678; Bootloader; 多核程序加載; EMIF16
導(dǎo)彈武器具有打擊精度高、 毀傷威力大等特點, 是決定未來戰(zhàn)爭勝負(fù)的重要因素之一。 隨著武器裝備軟硬件集成設(shè)計技術(shù)的快速發(fā)展, 小型化、 低成本、 低功耗正成為彈上電子系統(tǒng)的發(fā)展趨勢。
TMS320C6678是TI公司推出的一款八核嵌入式處理器, 強大的性能以及優(yōu)秀的能耗比使其在導(dǎo)彈武器的集成化、 小型化等方面扮演了重要的角色。
Bootloader是TMS320C6678處理器上電后運行的第一段代碼, 其是否正確及健壯對于處理器能否正常運行至關(guān)重要。 本文設(shè)計的Bootloader完成了TMS320C6678八核處理器的基本初始化配置, 保證了處理器上電后的穩(wěn)定運行。
1.1 Bootloader基本原理
TMS320C6678的Bootloader分為兩級。 第一級為Rom Bootloader(RBL), 是處理器上電復(fù)位后首先運行的一段代碼, 用來完成處理器上電后的系統(tǒng)初始化配置以及根據(jù)BOOTMODE引腳狀態(tài)確定以何種方式運行二級Bootloader。 RBL的代碼在處理器出廠時已經(jīng)固化在處理器中以0x20B00000為起始的一段地址空間中, 用戶不可更改, 本文不再贅述。
二級Bootloader為一般意義的Bootloader。 根據(jù)用戶需求, 二級Bootloader可以完成如下功能:
(1) 系統(tǒng)初始配置, 如處理器工作時鐘PLL的配置等;
(2) 處理器外設(shè)接口的初始化, 如EMIF16接口、 DDR3存儲器等;
(3) 應(yīng)用程序從片外向片內(nèi)的加載;
(4) 應(yīng)用程序的跳轉(zhuǎn)執(zhí)行。
1.2 Bootloader工作機制
由于TMS320C6678外部接口的豐富多樣性, 其Bootloader也存在多種實現(xiàn)方式, 如EMIF16, SRIO, Enthernet, PCIe, I2C, SPI和HyperLink七種Boot方式。 各種方式的區(qū)別僅在于接口類型以及基本配置的不同, 對于Bootloader來說, 這七種方式的工作機制是相同的。 本文以EMIF16接口為例, 完成了基于TMS320C6678的Bootloader設(shè)計。
Bootloader主要完成系統(tǒng)初始配置、 外設(shè)接口初始化、 應(yīng)用程序加載與跳轉(zhuǎn)執(zhí)行等功能, 其中系統(tǒng)初始配置與外設(shè)接口初始化可以根據(jù)用戶需求靈活添加, 并不是Bootloader的必備。 Bootloader最核心的功能是應(yīng)用程序的加載與跳轉(zhuǎn)執(zhí)行, 該功能的正確與否直接關(guān)系到處理器能否完成上電自啟動。
為了實現(xiàn)處理器的上電自啟動, 需要事先將編譯好的用戶程序燒寫到片外的非易失性存儲器(如Flash)中。 由于工藝水平的限制, 程序在片外Flash存儲器中的執(zhí)行速度遠(yuǎn)小于片內(nèi)存儲器中的執(zhí)行速度。 因此, 程序的加載與跳轉(zhuǎn)執(zhí)行基本原理就是通過Bootloader將用戶程序從片外Flash加載到片內(nèi)高速緩存中, 并跳轉(zhuǎn)至片內(nèi)高速緩存中執(zhí)行。 程序加載與跳轉(zhuǎn)執(zhí)行的工作過程如圖1所示。
圖1 程序加載與跳轉(zhuǎn)執(zhí)行工作過程
Fig.1 Process of program loading and jumping to execute
處理器上電后, 通過初始化引腳配置, 跳轉(zhuǎn)至片外Flash的起始地址0x70000000執(zhí)行Bootloader程序。 Bootloader將存儲在0x701000000地址中的用戶程序加載至TMS320C6678以0x10800000為起始地址的高速緩存空間中。 加載完畢后, Bootloader識別用戶程序的入口地址, 并跳轉(zhuǎn)至入口地址開始執(zhí)行。 其中, 0x70000000與0x70100000可以根據(jù)用戶的需求進(jìn)行更改, 加載地址在程序編譯完成后可根據(jù)實際的地址進(jìn)行指定。
Bootloader的部分核心代碼如圖2所示。
圖2 Bootloader代碼示意
Fig.2 An example of Bootloader codes
TMS320C6678提供了13個BOOTMODE引腳, 通過在硬件電路中對BOOTMODE進(jìn)行配置來確定處理器以何種模式進(jìn)行Boot、 Boot的子模式配置以及規(guī)定處理器的輸入時鐘頻率, 如表1所示。
表1 BOOTMODE引腳配置
通過對電路中BOOTMODE引腳進(jìn)行上下拉處理完成對處理器Bootloader工作模式的基本配置, 處理器上電后讀取BOOTMODE引腳狀態(tài)后開始Bootloader過程。
在完成Bootloader設(shè)計并將其代碼和用戶程序燒寫至片外Flash中后, 便可實現(xiàn)上電自啟動。 但這僅對于單核運行而言, 想實現(xiàn)多核程序的啟動, 還需要對多核用戶程序做進(jìn)一步處理。
3.1 多核程序啟動過程
TMS320C6678中共有八個處理器核, 分別命名為core0~core7。 其中, core0為主核, 只有主核具有執(zhí)行一級引導(dǎo)程序的權(quán)限, 即處理器上電后, 首先跳轉(zhuǎn)至core0的入口地址執(zhí)行。 其他7個核在處理器上電后進(jìn)入IDLE狀態(tài), 等待core0向其發(fā)送IPC中斷, 即其他7個核是在core0的控制下來啟動執(zhí)行的。
TMS320C6678在每個核中預(yù)留了一塊固定的內(nèi)存, 稱為BOOT_MAGIC_ADDRESS, 用來存放每個核開始執(zhí)行后需要跳轉(zhuǎn)到的入口地址_c_int00。 Bootloader執(zhí)行完畢后, 便自動跳轉(zhuǎn)至core0的入口地址執(zhí)行, 而其他7個核在接收到core0的IPC中斷后, 便向各個核對應(yīng)的BOOT_MAGIC_ADDRESS讀取相應(yīng)的入口地址, 然后跳轉(zhuǎn)執(zhí)行。
根據(jù)TMS320C6678的內(nèi)存規(guī)劃設(shè)計, 每個核的BOOT_MAGIC_ADDRESS位于各自L2 SRAM的最后4個字節(jié)中, 分別為0x1087FFFC~0x1787FFFC。
3.2 單核程序的生成
用戶程序通過TI處理器編譯軟件CCS的編譯后, 生成.out可執(zhí)行文件。 .out文件可以通過CCS軟件加載的方式將用戶程序加載到處理器中執(zhí)行, 但這種方式并不能實現(xiàn)上電自啟動。 上電自啟動需要將用戶程序燒寫至片外Flash中, 而.out可執(zhí)行文件中包含大量冗余信息, 將.out燒寫至片外Flash中會造成資源浪費, 且.out文件的格式也決定了不能實現(xiàn)上電自啟動。
TI公司提供了一整套的工具鏈, 如hex6x, b2i2c, b2ccs, i2crom等工具, 來完成.out可執(zhí)行文件向可燒寫鏡像文件的轉(zhuǎn)化。 圖3所示為生成的單核鏡像文件的格式。
圖3 單核鏡像文件格式
Fig.3 Format of single core image file
其中.text段, .cint段, .switch段等均為用戶程序經(jīng)過CCS編譯后生成的各個數(shù)據(jù)段, 每個數(shù)據(jù)段都將對自己的數(shù)據(jù)段長度和在內(nèi)存中存放的地址在鏡像文件中進(jìn)行標(biāo)記。 在完成用戶鏡像文件燒寫至片外Flash中后, Bootloader通過對每個數(shù)據(jù)段的長度及存放的地址進(jìn)行識別, 實現(xiàn)對用戶程序的準(zhǔn)確加載。
3.3 多核程序的生成
對于多核程序來說, 由于每個核中執(zhí)行的用戶程序不同, 經(jīng)過CCS分別編譯后生成的.out可執(zhí)行文件也是不同的。 經(jīng)過工具鏈生成用戶鏡像文件后, 八個核便會對應(yīng)八個不同的鏡像文件。 因此, 要想生成多核用戶鏡像文件, 需要對八個核的鏡像文件進(jìn)行合并處理, 如圖4所示。
多核鏡像文件合并的意義在于舍棄核的概念, 將每個核的鏡像文件視作由多個數(shù)據(jù)段組成。 多核鏡像文件的合并從根本上說是將多個核的數(shù)據(jù)段按照長度、 地址、 數(shù)據(jù)的固定格式合并在一起。
多核鏡像文件的最后是對core1~core7入口地址_c_int00的處理。 core1~core7的程序入口地址應(yīng)當(dāng)寫入每個核對應(yīng)的BOOT_MAGIC_ADDRESS中, 而本文正是將core1~core7的程序入口地址當(dāng)做數(shù)據(jù)段(長度為4字節(jié), 地址為相應(yīng)BOOT_MAGIC_ADDRESS, 數(shù)據(jù)為相應(yīng)入口地址_c_int00)進(jìn)行了合并。
圖4 多核鏡像文件格式
Fig.4 Format of multicore image file
3.4 多核Bootloader執(zhí)行
TMS320C6678多核Bootloader的執(zhí)行過程如圖5所示。
圖5 多核Bootloader執(zhí)行過程
Fig.5 Process of multicore Bootloader
本文設(shè)計如下程序來驗證多核上電自啟動的正確性: 八個核循環(huán)執(zhí)行1 024點FFT, 每個核執(zhí)行完一次FFT后向共享緩存寫標(biāo)志字, 然后core0不間斷監(jiān)測共享緩存的八個標(biāo)志字, 監(jiān)測到標(biāo)志字為1后, 對GPIO置0; 重復(fù)以上過程, 完成第二次FFT監(jiān)測后, core0將GPIO翻轉(zhuǎn), 以此類推。 如果八核完成啟動, 且程序運行正確, 示波器將顯示觀測到的GPIO方波。
經(jīng)驗證, 本文的設(shè)計完成了TMS320C6678的八核上電自啟動, 仿真結(jié)果見圖6。
圖6 仿真結(jié)果
針對TMS320C6678多核處理器提供了一種多核Bootloader的設(shè)計方法, 試驗驗證表明, 所設(shè)計的多核Bootloader程序工作穩(wěn)定, 可靠性高。 同時, 該設(shè)計具備良好的通用性, 可以移植到其他基于TMS320C66xx系列芯片的平臺中。
[1] TI. TMS320C6678: Multicore Fixed and Floating Point Digital Signal Processor[Z]. 2012.
[2] TI. KeyStone Architecture DSP Bootloader[Z]. 2012.
[3] 李飛平, 卿粼波, 滕奇志, 等. 基于TMS320C6678的多核程序加載研究與實現(xiàn)[J]. 電子技術(shù)應(yīng)用, 2015,41(3): 31-34. Li Feiping, Qing Linbo, Teng Qizhi, et al. Multicore Program Loading Research and Improve Based on TMS320C6678[J]. Application of Electronic Technique, 2015, 41(3): 31-34. (in Chinese)
[4] 齊恩勇. 基于多核處理器的彈載嵌入式系統(tǒng)設(shè)計研究[J]. 電子設(shè)計工程, 2013, 21(6): 105-107. Qi Enyong. Research about Designing of Missile-Borne Embedded System Based on Multicore Processor[J]. Electronic Design Engineering, 2013, 21(6): 105-107.(in Chinese)
[5] 黃震, 劉亞斌. TMS320C6000系列DSP程序固化的研究[J]. 電子設(shè)計工程, 2016, 24(12): 26-28. Huang Zhen, Liu Yabin. Study on the Program Download of TMS320C6000 DSP[J]. Electronic Design Engineering, 2016, 24(12): 26-28.(in Chinese)
[6] 孔石, 王春雷. 基于EMIF16模塊的TMS320C6678與FPGA接口設(shè)計與實現(xiàn)[J]. 航空兵器, 2015(1): 35-38. Kong Shi, Wang Chunlei. Design and Implementation of Interface between TMS320C6678 and FPGA Based on EMIF16 Module[J]. Aero Weaponry, 2015(1): 35-38. (in Chinese)
[7] 郝朋朋, 周煦林, 唐藝菁, 等. 基于TMS320C6678多核處理器體系結(jié)構(gòu)的研究[J]. 微電子學(xué)與計算機, 2012, 29(12): 171-175. Hao Pengpeng, Zhou Xulin, Tang Yijing, et al. Research on Multicore Processor’s Architecture Based on TMS320C6678[J]. Microelectronics & Computer, 2012, 29(12): 171-175.(in Chinese)
DesignandImplementationofMulticoreBootloaderBasedonTMS320C6678Processor
XueZhiyuan,WangChunlei
(ChinaAirborneMissileAcademy,Luoyang471009,China)
According to the characteristics of multicore processors TMS320C6678, a design method based on multicore Bootloader is proposed. The principle and working mechanism of TMS320C6678Bootloader are described, a method to produce the image file of multicore user program is given. As a result, the multicore program loading and auto-running of TMS320C6678are implemented. Experiments show that TMS320C6678processor performs stably under the proposed design method.
missile-borne computer; TMS320C6678; Bootloader; multicore program loading; EMIT16
10.19297/j.cnki.41-1228/tj.2017.04.014
2017-02-14
薛志遠(yuǎn)(1986-), 男, 山東淄博人, 博士, 主要從事數(shù)字信號處理工作。
薛志遠(yuǎn), 王春雷. 基于 TMS320C6678的多核Bootloader設(shè)計與實現(xiàn)[ J]. 航空兵器, 2017( 4): 80-83. Xue Zhiyuan, Wang Chunlei. Design and Implementation of Multicore Bootloader Based on TMS320C6678 Processor[ J]. Aero Weaponry, 2017( 4): 80-83.( in Chinese)
TJ760; TN911.7
: A
: 1673-5048(2017)04-0080-04