周文輝,李少華,李敬東
(中國人民解放軍95899部隊,北京100085)
TMS320C6000在軍事通信、電子對抗、雷達系統、精確制導武器等需要高度智能化的領域應用非常廣泛,而這些領域對設備的可靠性和穩定性要求非常高。在這些特殊應用領域,電磁干擾環境較為復雜,單粒子翻轉效應無法避免,會引起一些關鍵參數發生變化,一個比特的錯誤可能會造成嚴重故障。為緩解單粒子翻轉效應,經常采取程序代碼在外部ROM中執行,RAM中關鍵變量采取軟件三模冗余可靠性技術手段來保障。
另一方面,程序在外部ROM中執行的速度較慢,在片內RAM中執行的效率最高,片外RAM其次。為了使充分發揮DSP的效能,應盡量將程序代碼放在片內RAM中運行。
本文以TMS320C6000系列的620X/670XDSP為例,采用一種分兩次生成ROM文件的自舉實現方法,使程序在片內程序RAM中執行的同時,預置關鍵參數和常量從ROM中讀取,從而在發揮DSP最大效能的同時在一定程度上防止單粒子翻轉效應。
TMS320C620X/670X有兩種地址映射模式,即MAP0和MAP1,這兩種映射模式用于確定存儲器的地址訪問空間和啟動工作方式。
MAP0映射模式下,地址0映射在外部空間,DSP啟動時從外部直接執行。MAP1映射模式下,地址0 映射在內部空間,DSP啟動時需要從外部空間裝載執行代碼到內部地址0位置處后再運行。
本文采用MAP1映射模式。在MAP1映射模式下,片外ROM映射空間起始地址為0x01400000。
TMS320C620X/670X的啟動模式根據BOOTMODE[4:0]引腳確定,通過仔細分析,可以總結為以下3種啟動方式。
① 無引導(No Boot),DSP上電復位后直接從存儲器地址0處開始執行;
②ROM 引導(ROM Boot),在DSP上電復位時由DMA/EDMA控制器從外部空間CE1處起始位置裝載64 KB代碼到DSP內部RAM地址0處,從地址0處執行;
③ 主機引導(Host Boot),DSP上電后,保持復位狀態,外部主機將應用程序寫到DSP內部,并修改相應的寄存器內容,使DSP從地址0處執行。
第1種方式運行在MAP0映射模式下,要求用于啟動的外部存儲器必須是32位寬ROM。由于一般ROM均是8位寬,這樣至少需要4片才能組成一個32位寬啟動功能部件,造成外部擴展規模較大。另外,ROM的讀取速度遠遠低于內部程序區的讀取速度,會造成系統處理能力大大降低。
第2種方式運行在MAP1映射模式下,DSP啟動時自動裝載64KB代碼到內部地址0后自動執行。這在程序代碼量小于64KB條件下有很多優勢,如外部擴展存儲器規模小,代碼運行速度快等。但在復雜電磁干擾環境下,該方式需要對所有的關鍵參數和常量考慮三模冗余,增大了程序設計復雜度。
第3種方式一般用于存在主機的設備。
在實際DSP系統中最常用的是第2種方式,一般僅需要一片非易失性存儲器就可方便實現程序配置。
由于篇幅所限,段(section)定義中僅列出必須的段,對可選的段定義可以根據實際工程環境需要添加。
.text:存放C程序的代碼。
.cinit:存放C程序中的變量初值和常量。
.const:存放C程序中的字符常量、浮點常量和用const聲明的常量。
.bss:為C程序中的全局和靜態變量保留存儲空間。
.stack:為C程序系統堆棧保留存儲空間,用于保存返回地址、函數間的參數傳遞、存儲局部變量和保存中間結果。
為了在發揮DSP最大效能的同時有效防止單粒子翻轉效應,在分析前兩種引導方式的基礎上,筆者設計了一種程序在片內程序RAM中執行,初始化參數和常量在ROM中讀取的自舉方法。
為了實現該設計目的,需要分別生成用于燒寫ROM的程序文件和初始常量文件。在初始常量文件生成時,為了能夠直接寫ROM文件,假設起始地址為0x0000c000,而程序實際執行時從起始地址0x0140c000讀取。
在以下實例描述中約定項目工程名為project,對應的鏈接命令文件名為project.cmd,目標代碼文件名為project.out,用于燒寫ROM的二進制程序文件名和初始常量文件名分別為prog.bin和data.bin。其中程序文件所占空間不超過48KB,初始常量文件所占空間不超過16KB。
(1)程序文件生成過程
首先需要借助CCS集成開發環境,生成目標代碼文件project.out。project.out對應的project.cmd文件內容如下:

然后通過執行CCS自帶的工具hex6x.exe對目標代碼文件進行格式轉換,生成程序文件prog.bin。執行命令為“hex6x.exe hex.cmd”,其中hex.cmd格式內容如下:

(2)初始常量文件生成過程
過程參照上述程序文件的生成,其中project.cmd文件內容如下:

初始常量文件data.bin生成過程參照程序文件,其中hex.cmd格式內容如下:

(3)燒寫程序
程序文件prog.bin和初始常量文件data.bin生成完畢后,通過編程器或編寫ROM在線編程程序,將兩個文件寫入ROM。其中程序文件prog.bin在ROM偏移地址0x0處,初始常量文件data.bin在ROM偏移地址0x0000c000處。
①在本實例中,程序代碼、程序初始化參數和常量編譯后總空間不能超過64KB,程序代碼、程序初始化參數和常量所占空間比例可以通過更改鏈接命令文件動態調節。對于超過64KB的情形,也可以借鑒此思路,通過編寫二次引導裝載程序,達到此目的。
②在調試過程中,需要經常通過Load下載方式將project.out文件下載到片內RAM中執行。Load執行時需對鏈接命令文件重新定義,將.cinit和.const段映射到IDRAM。
③采用該方法,可以不用考慮預置初始參數和常量的軟件三模冗余,可以在很大程度上簡化程序設計,縮短項目開發周期。
④對于必須要在內存中保存的關鍵參數和變量,可以采用軟件三模冗余的方法實現。
⑤筆者經過反復嘗試發現,盡管通過該自舉方法,程序在執行過程中從片外ROM區讀取初始參數和常量,但自舉過程中初始化.cinit段的初始化變量由Flash拷貝到數據RAM區的過程不可或缺。
本文分析了TMS320C620X/670X芯片的存儲結構和特點,通過分兩次生成ROM燒寫文件,給出了一種切實可行的自舉方法,該方法可以在發揮DSP最大效能的同時,有效防止單粒子翻轉效應。有關的TMS320C620X/670X自舉實例已完成設計開發并得到實際應用,實踐證明,該方法是行之有效的。
[1]薛雷,張金藝.DSPs原理及應用教程[M].北京:清華大學出版社,2009.
[2]左顥睿.6000系列DSP Flash二次加載技術研究[J].單片機與嵌入式系統應用,2011(11).
[3]劉小匯,武微.軟件錯誤檢測與糾正技術可靠性研究[J].信號處理,2011(8).
[4]張路,賀興華.空間DSP加載系統可靠性設計[J].計算機工程,2010(3).