周文輝,李少華,李敬東
(中國人民解放軍95899部隊,北京100085)
TMS320C6000在軍事通信、電子對抗、雷達系統(tǒng)、精確制導(dǎo)武器等需要高度智能化的領(lǐng)域應(yīng)用非常廣泛,而這些領(lǐng)域?qū)υO(shè)備的可靠性和穩(wěn)定性要求非常高。在這些特殊應(yīng)用領(lǐng)域,電磁干擾環(huán)境較為復(fù)雜,單粒子翻轉(zhuǎn)效應(yīng)無法避免,會引起一些關(guān)鍵參數(shù)發(fā)生變化,一個比特的錯誤可能會造成嚴重故障。為緩解單粒子翻轉(zhuǎn)效應(yīng),經(jīng)常采取程序代碼在外部ROM中執(zhí)行,RAM中關(guān)鍵變量采取軟件三模冗余可靠性技術(shù)手段來保障。
另一方面,程序在外部ROM中執(zhí)行的速度較慢,在片內(nèi)RAM中執(zhí)行的效率最高,片外RAM其次。為了使充分發(fā)揮DSP的效能,應(yīng)盡量將程序代碼放在片內(nèi)RAM中運行。
本文以TMS320C6000系列的620X/670XDSP為例,采用一種分兩次生成ROM文件的自舉實現(xiàn)方法,使程序在片內(nèi)程序RAM中執(zhí)行的同時,預(yù)置關(guān)鍵參數(shù)和常量從ROM中讀取,從而在發(fā)揮DSP最大效能的同時在一定程度上防止單粒子翻轉(zhuǎn)效應(yīng)。
TMS320C620X/670X有兩種地址映射模式,即MAP0和MAP1,這兩種映射模式用于確定存儲器的地址訪問空間和啟動工作方式。
MAP0映射模式下,地址0映射在外部空間,DSP啟動時從外部直接執(zhí)行。MAP1映射模式下,地址0 映射在內(nèi)部空間,DSP啟動時需要從外部空間裝載執(zhí)行代碼到內(nèi)部地址0位置處后再運行。
本文采用MAP1映射模式。在MAP1映射模式下,片外ROM映射空間起始地址為0x01400000。
TMS320C620X/670X的啟動模式根據(jù)BOOTMODE[4:0]引腳確定,通過仔細分析,可以總結(jié)為以下3種啟動方式。
① 無引導(dǎo)(No Boot),DSP上電復(fù)位后直接從存儲器地址0處開始執(zhí)行;
②ROM 引導(dǎo)(ROM Boot),在DSP上電復(fù)位時由DMA/EDMA控制器從外部空間CE1處起始位置裝載64 KB代碼到DSP內(nèi)部RAM地址0處,從地址0處執(zhí)行;
③ 主機引導(dǎo)(Host Boot),DSP上電后,保持復(fù)位狀態(tài),外部主機將應(yīng)用程序?qū)懙紻SP內(nèi)部,并修改相應(yīng)的寄存器內(nèi)容,使DSP從地址0處執(zhí)行。
第1種方式運行在MAP0映射模式下,要求用于啟動的外部存儲器必須是32位寬ROM。由于一般ROM均是8位寬,這樣至少需要4片才能組成一個32位寬啟動功能部件,造成外部擴展規(guī)模較大。另外,ROM的讀取速度遠遠低于內(nèi)部程序區(qū)的讀取速度,會造成系統(tǒng)處理能力大大降低。
第2種方式運行在MAP1映射模式下,DSP啟動時自動裝載64KB代碼到內(nèi)部地址0后自動執(zhí)行。這在程序代碼量小于64KB條件下有很多優(yōu)勢,如外部擴展存儲器規(guī)模小,代碼運行速度快等。但在復(fù)雜電磁干擾環(huán)境下,該方式需要對所有的關(guān)鍵參數(shù)和常量考慮三模冗余,增大了程序設(shè)計復(fù)雜度。
第3種方式一般用于存在主機的設(shè)備。
在實際DSP系統(tǒng)中最常用的是第2種方式,一般僅需要一片非易失性存儲器就可方便實現(xiàn)程序配置。
由于篇幅所限,段(section)定義中僅列出必須的段,對可選的段定義可以根據(jù)實際工程環(huán)境需要添加。
.text:存放C程序的代碼。
.cinit:存放C程序中的變量初值和常量。
.const:存放C程序中的字符常量、浮點常量和用const聲明的常量。
.bss:為C程序中的全局和靜態(tài)變量保留存儲空間。
.stack:為C程序系統(tǒng)堆棧保留存儲空間,用于保存返回地址、函數(shù)間的參數(shù)傳遞、存儲局部變量和保存中間結(jié)果。
為了在發(fā)揮DSP最大效能的同時有效防止單粒子翻轉(zhuǎn)效應(yīng),在分析前兩種引導(dǎo)方式的基礎(chǔ)上,筆者設(shè)計了一種程序在片內(nèi)程序RAM中執(zhí)行,初始化參數(shù)和常量在ROM中讀取的自舉方法。
為了實現(xiàn)該設(shè)計目的,需要分別生成用于燒寫ROM的程序文件和初始常量文件。在初始常量文件生成時,為了能夠直接寫ROM文件,假設(shè)起始地址為0x0000c000,而程序?qū)嶋H執(zhí)行時從起始地址0x0140c000讀取。
在以下實例描述中約定項目工程名為project,對應(yīng)的鏈接命令文件名為project.cmd,目標代碼文件名為project.out,用于燒寫ROM的二進制程序文件名和初始常量文件名分別為prog.bin和data.bin。其中程序文件所占空間不超過48KB,初始常量文件所占空間不超過16KB。
(1)程序文件生成過程
首先需要借助CCS集成開發(fā)環(huán)境,生成目標代碼文件project.out。project.out對應(yīng)的project.cmd文件內(nèi)容如下:
然后通過執(zhí)行CCS自帶的工具hex6x.exe對目標代碼文件進行格式轉(zhuǎn)換,生成程序文件prog.bin。執(zhí)行命令為“hex6x.exe hex.cmd”,其中hex.cmd格式內(nèi)容如下:
(2)初始常量文件生成過程
過程參照上述程序文件的生成,其中project.cmd文件內(nèi)容如下:
初始常量文件data.bin生成過程參照程序文件,其中hex.cmd格式內(nèi)容如下:
(3)燒寫程序
程序文件prog.bin和初始常量文件data.bin生成完畢后,通過編程器或編寫ROM在線編程程序,將兩個文件寫入ROM。其中程序文件prog.bin在ROM偏移地址0x0處,初始常量文件data.bin在ROM偏移地址0x0000c000處。
①在本實例中,程序代碼、程序初始化參數(shù)和常量編譯后總空間不能超過64KB,程序代碼、程序初始化參數(shù)和常量所占空間比例可以通過更改鏈接命令文件動態(tài)調(diào)節(jié)。對于超過64KB的情形,也可以借鑒此思路,通過編寫二次引導(dǎo)裝載程序,達到此目的。
②在調(diào)試過程中,需要經(jīng)常通過Load下載方式將project.out文件下載到片內(nèi)RAM中執(zhí)行。Load執(zhí)行時需對鏈接命令文件重新定義,將.cinit和.const段映射到IDRAM。
③采用該方法,可以不用考慮預(yù)置初始參數(shù)和常量的軟件三模冗余,可以在很大程度上簡化程序設(shè)計,縮短項目開發(fā)周期。
④對于必須要在內(nèi)存中保存的關(guān)鍵參數(shù)和變量,可以采用軟件三模冗余的方法實現(xiàn)。
⑤筆者經(jīng)過反復(fù)嘗試發(fā)現(xiàn),盡管通過該自舉方法,程序在執(zhí)行過程中從片外ROM區(qū)讀取初始參數(shù)和常量,但自舉過程中初始化.cinit段的初始化變量由Flash拷貝到數(shù)據(jù)RAM區(qū)的過程不可或缺。
本文分析了TMS320C620X/670X芯片的存儲結(jié)構(gòu)和特點,通過分兩次生成ROM燒寫文件,給出了一種切實可行的自舉方法,該方法可以在發(fā)揮DSP最大效能的同時,有效防止單粒子翻轉(zhuǎn)效應(yīng)。有關(guān)的TMS320C620X/670X自舉實例已完成設(shè)計開發(fā)并得到實際應(yīng)用,實踐證明,該方法是行之有效的。
[1]薛雷,張金藝.DSPs原理及應(yīng)用教程[M].北京:清華大學出版社,2009.
[2]左顥睿.6000系列DSP Flash二次加載技術(shù)研究[J].單片機與嵌入式系統(tǒng)應(yīng)用,2011(11).
[3]劉小匯,武微.軟件錯誤檢測與糾正技術(shù)可靠性研究[J].信號處理,2011(8).
[4]張路,賀興華.空間DSP加載系統(tǒng)可靠性設(shè)計[J].計算機工程,2010(3).