薛志遠(yuǎn), 王春雷
(中國(guó)空空導(dǎo)彈研究院, 河南 洛陽(yáng) 471009)
基于TMS320C6678的多核Bootloader設(shè)計(jì)與實(shí)現(xiàn)
薛志遠(yuǎn), 王春雷
(中國(guó)空空導(dǎo)彈研究院, 河南 洛陽(yáng) 471009)
針對(duì)TMS320C6678多核處理器的特性, 提出一種基于多核Bootloader的設(shè)計(jì)方法。 闡述了TMS320C6678 Bootloader的原理和工作機(jī)制, 并給出一種多核用戶程序鏡像文件的生成方法, 實(shí)現(xiàn)了TMS320C6678的多核程序加載以及上電自啟動(dòng)。 經(jīng)驗(yàn)證, TMS320C6678在該設(shè)計(jì)方法下能夠穩(wěn)定運(yùn)行。
彈載計(jì)算機(jī); TMS320C6678; Bootloader; 多核程序加載; EMIF16
導(dǎo)彈武器具有打擊精度高、 毀傷威力大等特點(diǎn), 是決定未來(lái)戰(zhàn)爭(zhēng)勝負(fù)的重要因素之一。 隨著武器裝備軟硬件集成設(shè)計(jì)技術(shù)的快速發(fā)展, 小型化、 低成本、 低功耗正成為彈上電子系統(tǒng)的發(fā)展趨勢(shì)。
TMS320C6678是TI公司推出的一款八核嵌入式處理器, 強(qiáng)大的性能以及優(yōu)秀的能耗比使其在導(dǎo)彈武器的集成化、 小型化等方面扮演了重要的角色。
Bootloader是TMS320C6678處理器上電后運(yùn)行的第一段代碼, 其是否正確及健壯對(duì)于處理器能否正常運(yùn)行至關(guān)重要。 本文設(shè)計(jì)的Bootloader完成了TMS320C6678八核處理器的基本初始化配置, 保證了處理器上電后的穩(wěn)定運(yùn)行。
1.1 Bootloader基本原理
TMS320C6678的Bootloader分為兩級(jí)。 第一級(jí)為Rom Bootloader(RBL), 是處理器上電復(fù)位后首先運(yùn)行的一段代碼, 用來(lái)完成處理器上電后的系統(tǒng)初始化配置以及根據(jù)BOOTMODE引腳狀態(tài)確定以何種方式運(yùn)行二級(jí)Bootloader。 RBL的代碼在處理器出廠時(shí)已經(jīng)固化在處理器中以0x20B00000為起始的一段地址空間中, 用戶不可更改, 本文不再贅述。
二級(jí)Bootloader為一般意義的Bootloader。 根據(jù)用戶需求, 二級(jí)Bootloader可以完成如下功能:
(1) 系統(tǒng)初始配置, 如處理器工作時(shí)鐘PLL的配置等;
(2) 處理器外設(shè)接口的初始化, 如EMIF16接口、 DDR3存儲(chǔ)器等;
(3) 應(yīng)用程序從片外向片內(nèi)的加載;
(4) 應(yīng)用程序的跳轉(zhuǎn)執(zhí)行。
1.2 Bootloader工作機(jī)制
由于TMS320C6678外部接口的豐富多樣性, 其Bootloader也存在多種實(shí)現(xiàn)方式, 如EMIF16, SRIO, Enthernet, PCIe, I2C, SPI和HyperLink七種Boot方式。 各種方式的區(qū)別僅在于接口類型以及基本配置的不同, 對(duì)于Bootloader來(lái)說, 這七種方式的工作機(jī)制是相同的。 本文以EMIF16接口為例, 完成了基于TMS320C6678的Bootloader設(shè)計(jì)。
Bootloader主要完成系統(tǒng)初始配置、 外設(shè)接口初始化、 應(yīng)用程序加載與跳轉(zhuǎn)執(zhí)行等功能, 其中系統(tǒng)初始配置與外設(shè)接口初始化可以根據(jù)用戶需求靈活添加, 并不是Bootloader的必備。 Bootloader最核心的功能是應(yīng)用程序的加載與跳轉(zhuǎn)執(zhí)行, 該功能的正確與否直接關(guān)系到處理器能否完成上電自啟動(dòng)。
為了實(shí)現(xiàn)處理器的上電自啟動(dòng), 需要事先將編譯好的用戶程序燒寫到片外的非易失性存儲(chǔ)器(如Flash)中。 由于工藝水平的限制, 程序在片外Flash存儲(chǔ)器中的執(zhí)行速度遠(yuǎn)小于片內(nèi)存儲(chǔ)器中的執(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將存儲(chǔ)在0x701000000地址中的用戶程序加載至TMS320C6678以0x10800000為起始地址的高速緩存空間中。 加載完畢后, Bootloader識(shí)別用戶程序的入口地址, 并跳轉(zhuǎn)至入口地址開始執(zhí)行。 其中, 0x70000000與0x70100000可以根據(jù)用戶的需求進(jìn)行更改, 加載地址在程序編譯完成后可根據(jù)實(shí)際的地址進(jìn)行指定。
Bootloader的部分核心代碼如圖2所示。
圖2 Bootloader代碼示意
Fig.2 An example of Bootloader codes
TMS320C6678提供了13個(gè)BOOTMODE引腳, 通過在硬件電路中對(duì)BOOTMODE進(jìn)行配置來(lái)確定處理器以何種模式進(jìn)行Boot、 Boot的子模式配置以及規(guī)定處理器的輸入時(shí)鐘頻率, 如表1所示。
表1 BOOTMODE引腳配置
通過對(duì)電路中BOOTMODE引腳進(jìn)行上下拉處理完成對(duì)處理器Bootloader工作模式的基本配置, 處理器上電后讀取BOOTMODE引腳狀態(tài)后開始Bootloader過程。
在完成Bootloader設(shè)計(jì)并將其代碼和用戶程序燒寫至片外Flash中后, 便可實(shí)現(xiàn)上電自啟動(dòng)。 但這僅對(duì)于單核運(yùn)行而言, 想實(shí)現(xiàn)多核程序的啟動(dòng), 還需要對(duì)多核用戶程序做進(jìn)一步處理。
3.1 多核程序啟動(dòng)過程
TMS320C6678中共有八個(gè)處理器核, 分別命名為core0~core7。 其中, core0為主核, 只有主核具有執(zhí)行一級(jí)引導(dǎo)程序的權(quán)限, 即處理器上電后, 首先跳轉(zhuǎn)至core0的入口地址執(zhí)行。 其他7個(gè)核在處理器上電后進(jìn)入IDLE狀態(tài), 等待core0向其發(fā)送IPC中斷, 即其他7個(gè)核是在core0的控制下來(lái)啟動(dòng)執(zhí)行的。
TMS320C6678在每個(gè)核中預(yù)留了一塊固定的內(nèi)存, 稱為BOOT_MAGIC_ADDRESS, 用來(lái)存放每個(gè)核開始執(zhí)行后需要跳轉(zhuǎn)到的入口地址_c_int00。 Bootloader執(zhí)行完畢后, 便自動(dòng)跳轉(zhuǎn)至core0的入口地址執(zhí)行, 而其他7個(gè)核在接收到core0的IPC中斷后, 便向各個(gè)核對(duì)應(yīng)的BOOT_MAGIC_ADDRESS讀取相應(yīng)的入口地址, 然后跳轉(zhuǎn)執(zhí)行。
根據(jù)TMS320C6678的內(nèi)存規(guī)劃設(shè)計(jì), 每個(gè)核的BOOT_MAGIC_ADDRESS位于各自L2 SRAM的最后4個(gè)字節(jié)中, 分別為0x1087FFFC~0x1787FFFC。
3.2 單核程序的生成
用戶程序通過TI處理器編譯軟件CCS的編譯后, 生成.out可執(zhí)行文件。 .out文件可以通過CCS軟件加載的方式將用戶程序加載到處理器中執(zhí)行, 但這種方式并不能實(shí)現(xiàn)上電自啟動(dòng)。 上電自啟動(dòng)需要將用戶程序燒寫至片外Flash中, 而.out可執(zhí)行文件中包含大量冗余信息, 將.out燒寫至片外Flash中會(huì)造成資源浪費(fèi), 且.out文件的格式也決定了不能實(shí)現(xiàn)上電自啟動(dòng)。
TI公司提供了一整套的工具鏈, 如hex6x, b2i2c, b2ccs, i2crom等工具, 來(lái)完成.out可執(zhí)行文件向可燒寫鏡像文件的轉(zhuǎn)化。 圖3所示為生成的單核鏡像文件的格式。
圖3 單核鏡像文件格式
Fig.3 Format of single core image file
其中.text段, .cint段, .switch段等均為用戶程序經(jīng)過CCS編譯后生成的各個(gè)數(shù)據(jù)段, 每個(gè)數(shù)據(jù)段都將對(duì)自己的數(shù)據(jù)段長(zhǎng)度和在內(nèi)存中存放的地址在鏡像文件中進(jìn)行標(biāo)記。 在完成用戶鏡像文件燒寫至片外Flash中后, Bootloader通過對(duì)每個(gè)數(shù)據(jù)段的長(zhǎng)度及存放的地址進(jìn)行識(shí)別, 實(shí)現(xiàn)對(duì)用戶程序的準(zhǔn)確加載。
3.3 多核程序的生成
對(duì)于多核程序來(lái)說, 由于每個(gè)核中執(zhí)行的用戶程序不同, 經(jīng)過CCS分別編譯后生成的.out可執(zhí)行文件也是不同的。 經(jīng)過工具鏈生成用戶鏡像文件后, 八個(gè)核便會(huì)對(duì)應(yīng)八個(gè)不同的鏡像文件。 因此, 要想生成多核用戶鏡像文件, 需要對(duì)八個(gè)核的鏡像文件進(jìn)行合并處理, 如圖4所示。
多核鏡像文件合并的意義在于舍棄核的概念, 將每個(gè)核的鏡像文件視作由多個(gè)數(shù)據(jù)段組成。 多核鏡像文件的合并從根本上說是將多個(gè)核的數(shù)據(jù)段按照長(zhǎng)度、 地址、 數(shù)據(jù)的固定格式合并在一起。
多核鏡像文件的最后是對(duì)core1~core7入口地址_c_int00的處理。 core1~core7的程序入口地址應(yīng)當(dāng)寫入每個(gè)核對(duì)應(yīng)的BOOT_MAGIC_ADDRESS中, 而本文正是將core1~core7的程序入口地址當(dāng)做數(shù)據(jù)段(長(zhǎng)度為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è)計(jì)如下程序來(lái)驗(yàn)證多核上電自啟動(dòng)的正確性: 八個(gè)核循環(huán)執(zhí)行1 024點(diǎn)FFT, 每個(gè)核執(zhí)行完一次FFT后向共享緩存寫標(biāo)志字, 然后core0不間斷監(jiān)測(cè)共享緩存的八個(gè)標(biāo)志字, 監(jiān)測(cè)到標(biāo)志字為1后, 對(duì)GPIO置0; 重復(fù)以上過程, 完成第二次FFT監(jiān)測(cè)后, core0將GPIO翻轉(zhuǎn), 以此類推。 如果八核完成啟動(dòng), 且程序運(yùn)行正確, 示波器將顯示觀測(cè)到的GPIO方波。
經(jīng)驗(yàn)證, 本文的設(shè)計(jì)完成了TMS320C6678的八核上電自啟動(dòng), 仿真結(jié)果見圖6。
圖6 仿真結(jié)果
針對(duì)TMS320C6678多核處理器提供了一種多核Bootloader的設(shè)計(jì)方法, 試驗(yàn)驗(yàn)證表明, 所設(shè)計(jì)的多核Bootloader程序工作穩(wěn)定, 可靠性高。 同時(shí), 該設(shè)計(jì)具備良好的通用性, 可以移植到其他基于TMS320C66xx系列芯片的平臺(tái)中。
[1] TI. TMS320C6678: Multicore Fixed and Floating Point Digital Signal Processor[Z]. 2012.
[2] TI. KeyStone Architecture DSP Bootloader[Z]. 2012.
[3] 李飛平, 卿粼波, 滕奇志, 等. 基于TMS320C6678的多核程序加載研究與實(shí)現(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ì)研究[J]. 電子設(shè)計(jì)工程, 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è)計(jì)工程, 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è)計(jì)與實(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é)與計(jì)算機(jī), 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ù)字信號(hào)處理工作。
薛志遠(yuǎn), 王春雷. 基于 TMS320C6678的多核Bootloader設(shè)計(jì)與實(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