摘 要: 闡述了TMS320C62x的系統(tǒng)結(jié)構(gòu)和軟件設(shè)計(jì)方法,,介紹了在title="TMS320C6201">TMS320C6201 EVM板上實(shí)現(xiàn)寬帶毫米波雷達(dá)目標(biāo)時(shí)延神經(jīng)網(wǎng)絡(luò)識(shí)別算法。通過(guò)程序驗(yàn)證,,取得了比較好的處理效果,。
關(guān)鍵詞: TMS320C6201 DSP 軟件設(shè)計(jì) 實(shí)時(shí)處理 目標(biāo)識(shí)別
數(shù)字信號(hào)處理(DSP)技術(shù)近年來(lái)取得了高速發(fā)展,目前DSP芯片已經(jīng)廣泛地應(yīng)用于通信,、圖像處理、語(yǔ)音處理,、雷達(dá)等領(lǐng)域,。TI公司是當(dāng)今世界DSP芯片的主要供應(yīng)商之一,其TMS320C6000是TMS320系列產(chǎn)品中的新一代高性能DSP芯片,,其中定點(diǎn)系列為T(mén)MS320C62x,,浮點(diǎn)系列為T(mén)MS320C67x。TMS320C6201芯片是定點(diǎn)系列的代表產(chǎn)品,,其處理能力高達(dá)1600MIP,。本文著重介紹TMS320C62x的軟件設(shè)計(jì)方法,并對(duì)TMS320C62x的系統(tǒng)結(jié)構(gòu)以及基于TMS320C62x的軟件設(shè)計(jì)方法,,在TMS320C6201上實(shí)現(xiàn)寬帶毫米波雷達(dá)目標(biāo)時(shí)延神經(jīng)網(wǎng)絡(luò)識(shí)別算法進(jìn)行闡述,。
1 TMS320C62x的系統(tǒng)結(jié)構(gòu)
TMS320C62x的系統(tǒng)結(jié)構(gòu)如圖1所示,TMS320C62x處理器由三個(gè)主要部分組成:CPU內(nèi)核、外設(shè)和存儲(chǔ)器,。CPU內(nèi)核中的8個(gè)功能單元可以完全并行運(yùn)行,,功能單元執(zhí)行邏輯、位移,、乘法,、加法和數(shù)據(jù)尋址等操作。TMS320C6000系列芯片的體系結(jié)構(gòu)采用甚長(zhǎng)指令字(VLIW)方式,,單指令字長(zhǎng)為32位,,每條32位指令占用一個(gè)功能單元。取指令,、指令分配和指令譯碼單元每周期可以從程序存儲(chǔ)器到功能單元傳遞8條指令,,這8條指令組成一個(gè)指令包,總字長(zhǎng)為8×32=256位,。芯片內(nèi)部設(shè)置了專(zhuān)門(mén)的指令分配模塊,,可以將每個(gè)256位的指令包分配到8個(gè)功能單元中,并由8個(gè)功能單元并行運(yùn)行,。TMS320C62x芯片的最高時(shí)鐘頻率可以達(dá)到200MHz,,8個(gè)功能單元同時(shí)運(yùn)行時(shí),該芯片的處理能力高達(dá)1600MIP,。
TMS320C62x芯片的片內(nèi)存儲(chǔ)器總?cè)萘繛?M位,,其中2K×256位用于程序內(nèi)存和程序cache,寬度為256位;64K字節(jié)用于數(shù)據(jù)內(nèi)存和數(shù)據(jù)cache,,用戶(hù)可以訪(fǎng)問(wèn)8位,、16位和32位的數(shù)據(jù)。TMS320C62x芯片的外設(shè)模塊包括多通道緩沖串口,、時(shí)鐘,、外部存儲(chǔ)器接口EMIF、DMA控制器,、主機(jī)口和Power-down邏輯等,,DMA控制器可以在存儲(chǔ)器空間的不同區(qū)域間控制轉(zhuǎn)移數(shù)據(jù);外部存儲(chǔ)器接口EMIF可以訪(fǎng)問(wèn)的片外存儲(chǔ)器最大容量為64MB,數(shù)據(jù)總線(xiàn)寬度為32位,,同時(shí)也提供對(duì)8位和16位存儲(chǔ)器的讀寫(xiě)支持;16位寬的主機(jī)口HPI可以訪(fǎng)問(wèn)TMS320C62x的所有存儲(chǔ)空間和設(shè)備;多種外設(shè)模塊使得TMS320C62x芯片的功能十分強(qiáng)大,。
2 TMS320C62x的軟件設(shè)計(jì)方法
用戶(hù)在開(kāi)發(fā)應(yīng)用軟件時(shí),首先應(yīng)當(dāng)明確應(yīng)用軟件的功能和性能要求,,然后按照代碼開(kāi)發(fā)流程的三個(gè)階段進(jìn)行軟件設(shè)計(jì):第一階段是開(kāi)發(fā)C代碼;第二階段是優(yōu)化C代碼;第三階段是編寫(xiě)線(xiàn)性匯編代碼,。以上的三個(gè)階段不是必須經(jīng)過(guò)的,如果在某一階段已經(jīng)實(shí)現(xiàn)了應(yīng)用軟件的功能和性能要求,,那么就不必進(jìn)入下一個(gè)階段,。代碼開(kāi)發(fā)流程圖如圖2所示,。
2.1 開(kāi)發(fā)C代碼
開(kāi)發(fā)C語(yǔ)言代碼需要考慮的要點(diǎn)包括:①數(shù)據(jù)結(jié)構(gòu);②分析C代碼性能;③使用查找表;④用整形數(shù)(int)表示浮點(diǎn)數(shù)。
2.1.1 數(shù)據(jù)結(jié)構(gòu)
TMS320C62x編譯器對(duì)每種數(shù)據(jù)結(jié)構(gòu)定義一個(gè)尺寸,,字符型(char)為8位,,短整型(short)為16位,整型(int)為32位,,長(zhǎng)整型(long)為40位,,浮點(diǎn)型(float)為32位,雙精度浮點(diǎn)型(double)為64位,。在編寫(xiě)C代碼時(shí)應(yīng)當(dāng)遵循的規(guī)則是:避免在代碼中將int型和long型作為同樣尺寸處理,,因?yàn)榫幾g器對(duì)long型數(shù)據(jù)使用40位操作;對(duì)于定點(diǎn)乘法,應(yīng)當(dāng)盡可能使用short型數(shù)據(jù),,這種數(shù)據(jù)類(lèi)型可以更有效地使用TMS320C62x的乘法器;對(duì)循環(huán)計(jì)數(shù)器應(yīng)當(dāng)使用int或者無(wú)符號(hào)int類(lèi)型,,而不使用short或者無(wú)符號(hào)short類(lèi)型,以避免不必要的符號(hào)擴(kuò)展,。
2.1.2 分析C代碼性能
應(yīng)用調(diào)試器的Profile工具可以得到一個(gè)關(guān)于C代碼中各特定代碼段執(zhí)行情況的統(tǒng)計(jì)表,,也可以得到特定代碼段執(zhí)行所用的CPU時(shí)鐘周期數(shù),因此可以找出影響軟件程序總體性能的C語(yǔ)言代碼段來(lái)加以改進(jìn)(通常是循環(huán)代碼段影響軟件程序總體性能),。
2.1.3 使用查找表
在C語(yǔ)言代碼中通過(guò)直接計(jì)算得到結(jié)果的語(yǔ)句或函數(shù)可以用查找表或常數(shù)數(shù)值代替,,所以可以提高指令執(zhí)行速度。
2.1.4 用整型數(shù)(int)表示浮點(diǎn)數(shù)
由于TMS320C62x是定點(diǎn)芯片,,不支持浮點(diǎn)操作,。對(duì)于浮點(diǎn)加、減,、乘和除運(yùn)算,,應(yīng)通過(guò)TMS320C62x的編譯器,把浮點(diǎn)運(yùn)算轉(zhuǎn)化為一系列的定點(diǎn)運(yùn)算,,并由TMS320C62x芯片的功能單元處理這一系列的定點(diǎn)運(yùn)算,。浮點(diǎn)運(yùn)算是比較費(fèi)時(shí)的,在程序的編寫(xiě)過(guò)程中,,應(yīng)當(dāng)盡量采用定點(diǎn)的數(shù)據(jù)結(jié)構(gòu),。對(duì)于C語(yǔ)言,應(yīng)當(dāng)盡量采用整型(int)的數(shù)據(jù)結(jié)構(gòu),。在基于TMS320C62x的C語(yǔ)言中,整型數(shù)據(jù)占用4個(gè)字節(jié),,其所能表示的最大數(shù)據(jù)范圍是:-2147483648~+2147483647,。因?yàn)閷?shí)際處理的數(shù)據(jù)通常都是浮點(diǎn)的,所以需要把浮點(diǎn)數(shù)據(jù)通過(guò)定標(biāo)轉(zhuǎn)化為整型數(shù)據(jù)進(jìn)行處理,,以提高應(yīng)用程序的處理速度,。小數(shù)位數(shù)的選取十分關(guān)鍵,,既要使轉(zhuǎn)化后的數(shù)據(jù)處理精度滿(mǎn)足要求,又要防止在數(shù)據(jù)處理的過(guò)程中出現(xiàn)數(shù)據(jù)溢出,。
2.2 優(yōu)化C代碼
優(yōu)化C代碼包括使用編譯器選項(xiàng),、使用內(nèi)聯(lián)函數(shù)、使用字訪(fǎng)問(wèn)短整型數(shù)據(jù)和使用軟件流水等,。編譯器選項(xiàng)控制著編譯器的操作,,其中有些選項(xiàng)可使C代碼優(yōu)化。
2.2.1 向編譯器指明不相關(guān)的指令
為使指令并行操作,,編譯器必須確定指令間的關(guān)系或者相關(guān)性,,即一條指令必須發(fā)生在另一條指令之后,只有不相關(guān)的指令才可以并行執(zhí)行,。如果編譯器不能確定兩條指令是不相關(guān)的,,則編譯器認(rèn)為它們是相關(guān)的,將安排它們串行執(zhí)行,。用戶(hù)可以通過(guò)如下方法指明相關(guān)的指令:
·關(guān)鍵字const可以指定一個(gè)目標(biāo),,const表示一個(gè)變量或者一個(gè)變量的存儲(chǔ)單元保持不變,使用const可以提高代碼的性能和適應(yīng)性,。
·一起使用-pm選項(xiàng)和-03選項(xiàng)可以確定程序優(yōu)先級(jí),。在程序優(yōu)先級(jí)中,所有源文件都被編譯成一個(gè)模塊,,該模塊通過(guò)編譯器進(jìn)行優(yōu)化和產(chǎn)生代碼,,從而使編譯器更有效地消除相關(guān)性。
·使用-mt選項(xiàng)向編譯器說(shuō)明在代碼中不存在存儲(chǔ)器相關(guān)性,,即允許編譯器在無(wú)存儲(chǔ)器相關(guān)性的假設(shè)下進(jìn)行優(yōu)化,。
2.2.2 使用內(nèi)聯(lián)函數(shù)(intrinsics)
TMS320C62x編譯器提供的內(nèi)聯(lián)函數(shù)是直接映射為內(nèi)聯(lián)的C6000指令的特殊函數(shù),用戶(hù)可以用內(nèi)聯(lián)函數(shù)來(lái)快速優(yōu)化C代碼,。
2.2.3 使用字訪(fǎng)問(wèn)短整型數(shù)據(jù)
內(nèi)聯(lián)函數(shù)中有些指令是對(duì)存儲(chǔ)在32位寄存器的高16位和低16位字段進(jìn)行操作,。當(dāng)有大量短整型數(shù)據(jù)進(jìn)行操作時(shí),可以使用字(整型數(shù))一次訪(fǎng)問(wèn)兩個(gè)短整型數(shù)據(jù),,然后使用內(nèi)聯(lián)函數(shù)對(duì)這些數(shù)據(jù)進(jìn)行操作,,從而減少對(duì)內(nèi)存的訪(fǎng)問(wèn)。
2.2.4 使用軟件流水
軟件流水是采用安排循環(huán)指令的方法使循環(huán)多次迭代并行執(zhí)行的一種技術(shù),。在編譯時(shí),,使用-o2選項(xiàng)和-o3選項(xiàng),編譯器可對(duì)循環(huán)代碼實(shí)現(xiàn)軟件流水,。為填滿(mǎn)軟件流水線(xiàn),,軟件流水結(jié)構(gòu)需要執(zhí)行的最小循環(huán)迭代次數(shù)稱(chēng)為最小循環(huán)次數(shù)。當(dāng)編譯器不能確定循環(huán)總數(shù)與最小循環(huán)次數(shù)的大小時(shí),,就產(chǎn)生了兩種形式的循環(huán):循環(huán)總數(shù)小于最小循環(huán)次數(shù)時(shí),,執(zhí)行不流水形式循環(huán);循環(huán)總數(shù)大于最小循環(huán)次數(shù)時(shí),,執(zhí)行軟件流水形式循環(huán)??梢允褂?ms選項(xiàng)使編譯器根據(jù)循環(huán)次數(shù)僅產(chǎn)生一種循環(huán)形式,。用戶(hù)可以通過(guò)系列方法向編譯器傳遞循環(huán)次數(shù)信息:使用-o3和-pm選項(xiàng),使優(yōu)化器訪(fǎng)問(wèn)整個(gè)程序,,了解循環(huán)次數(shù)信息;使用_nassert內(nèi)聯(lián)函數(shù),,訪(fǎng)止冗余循環(huán)產(chǎn)生。用戶(hù)可以使用投機(jī)執(zhí)行(_mh選項(xiàng))消除軟件流水循環(huán)的排空,,從而減少代碼尺寸,。
由于在嵌套循環(huán)中編譯器僅對(duì)最里面的循環(huán)執(zhí)行軟件流水,因此對(duì)于執(zhí)行周期很少的內(nèi)循環(huán)進(jìn)行循環(huán)展開(kāi),,對(duì)外循環(huán)進(jìn)行軟件流水,,這樣可以改進(jìn)C代碼的性能。
使用軟件流水應(yīng)當(dāng)注意的問(wèn)題有:盡管軟件流水循環(huán)可以包含內(nèi)聯(lián)函數(shù),,但是不能包含函數(shù)調(diào)用;在循環(huán)中不可以有條件終止指令;在循環(huán)體中不可以修改循環(huán)控制變量;如果循環(huán)體內(nèi)復(fù)雜的條件代碼需要超過(guò)5個(gè)條件寄存器或者代碼尺寸需要32個(gè)寄存器以上,,則這個(gè)循環(huán)不可以進(jìn)行軟件流水。
2.3 編寫(xiě)線(xiàn)性匯編代碼
編寫(xiě)線(xiàn)性匯編代碼是代碼開(kāi)發(fā)流程的第三個(gè)階段,。為了提高代碼性能,,對(duì)影響應(yīng)用程序速度的關(guān)鍵C代碼可以用線(xiàn)性匯編重新編寫(xiě),線(xiàn)性匯編文件是匯編優(yōu)化器的輸入文件,。線(xiàn)性匯編代碼類(lèi)似于通常的C6000匯編代碼,,不同的是編寫(xiě)線(xiàn)性匯編代碼不需要指明使用的寄存器、指令的并行與否,、指令的延遲周期和指令使用的功能單元,,匯編優(yōu)化器會(huì)根據(jù)情況確定這些信息。線(xiàn)性匯編文件使用一些匯編優(yōu)化器偽指令來(lái)區(qū)分線(xiàn)性匯編和通常的匯編代碼,,.cproc命令和.endpro命令限定了匯編優(yōu)化器優(yōu)化的代碼段,,.cproc命令放在代碼段的開(kāi)始,.endproc命令放在代碼段的結(jié)尾;.reg命令使匯編優(yōu)化器為數(shù)值,,選擇一個(gè)寄存器,,這個(gè)寄存器與對(duì)該值進(jìn)行操作的指令所選擇的功能單元一致;.trip命令指出循環(huán)的迭代次數(shù)。優(yōu)化線(xiàn)性匯編代碼的方法包括:為線(xiàn)性匯編指令指定功能單元,,使得最后的匯編指令并行執(zhí)行;使用字訪(fǎng)問(wèn)短整型數(shù)據(jù);使用軟件流水對(duì)循環(huán)進(jìn)行優(yōu)化,。
編寫(xiě)線(xiàn)性匯編代碼的工作量非常大,需要很長(zhǎng)的開(kāi)發(fā)周期,。而且開(kāi)發(fā)后的匯編代碼不能象C代碼那樣移植在其它的DSP平臺(tái)上,,因此建議盡量采用第一階段來(lái)進(jìn)行軟件設(shè)計(jì)。如果仍然不能滿(mǎn)足性能要求,,那么再對(duì)關(guān)鍵的C代碼段編寫(xiě)線(xiàn)性匯編代碼,。
3 在TMS320C6201上實(shí)現(xiàn)寬帶毫米波雷達(dá)目標(biāo)時(shí)延神經(jīng)網(wǎng)絡(luò)識(shí)別算法
寬帶毫米波雷達(dá)目標(biāo)識(shí)別算法對(duì)于實(shí)時(shí)處理的需求是比較苛刻的,例如某種寬帶雷達(dá)導(dǎo)引頭目標(biāo)識(shí)別處理時(shí)間要求小于1.5ms,,即要求目標(biāo)識(shí)別算法在1.5ms內(nèi)對(duì)一組數(shù)據(jù)完成處理,,正確地把目標(biāo)識(shí)別出來(lái)。人工神經(jīng)網(wǎng)絡(luò)(ANN)具有并行處理運(yùn)算能力和網(wǎng)絡(luò)信息存儲(chǔ)能力,,能滿(mǎn)足寬帶毫米波雷達(dá)目標(biāo)識(shí)別系統(tǒng)并行計(jì)算和需較小數(shù)據(jù)存儲(chǔ)空間的要求,。ANN技術(shù)應(yīng)用于雷達(dá)目標(biāo)識(shí)別極具潛力。在多層前饋感知器神經(jīng)網(wǎng)絡(luò)模型中引入時(shí)延單元可以使神經(jīng)網(wǎng)絡(luò)增加記憶功能,,由此導(dǎo)出的神經(jīng)網(wǎng)絡(luò)模型適合應(yīng)用于處理序列數(shù)據(jù),。寬帶毫米波雷達(dá)目標(biāo)時(shí)延神經(jīng)網(wǎng)絡(luò)識(shí)別算法的基本原理為:對(duì)一維距離像進(jìn)行非相干平均和自適應(yīng)門(mén)限、等距離間隔峰值下采樣預(yù)處理,,獲得較穩(wěn)定的低維樣本后,,作為特征矢量提供給時(shí)延神經(jīng)網(wǎng)絡(luò)分類(lèi)器進(jìn)行自動(dòng)分類(lèi)識(shí)別。時(shí)延神經(jīng)網(wǎng)絡(luò)為三層網(wǎng)絡(luò),,網(wǎng)絡(luò)輸入層節(jié)點(diǎn)數(shù)為17,,網(wǎng)絡(luò)隱層節(jié)點(diǎn)數(shù)為10,網(wǎng)絡(luò)輸出層節(jié)點(diǎn)數(shù)為3,。采用大量的訓(xùn)練樣本集對(duì)時(shí)延神經(jīng)網(wǎng)絡(luò)進(jìn)行訓(xùn)練,,得到時(shí)延神經(jīng)網(wǎng)絡(luò)的權(quán)值,然后應(yīng)用TMS320C62x的軟件設(shè)計(jì)方法,,在TMS320C6201 EVM板上實(shí)現(xiàn)寬帶毫米波雷達(dá)目標(biāo)時(shí)延神經(jīng)網(wǎng)絡(luò)識(shí)別算法,。
在程序?qū)崿F(xiàn)過(guò)程中,對(duì)于經(jīng)常用到的兩個(gè)函數(shù)值1.0/(1.0+exp(-x))和tanh(x)采用查找表的方法來(lái)提高程序執(zhí)行速度,。根據(jù)對(duì)程序的測(cè)試,,使用整型數(shù)(int)表示浮點(diǎn)數(shù),選取整型數(shù)的低13位來(lái)表示小數(shù),。支持TMS320C6201 EVM 板的開(kāi)發(fā)軟件Code Composer Studio(CCS)是一個(gè)集編譯,、連接、實(shí)時(shí)調(diào)試,、跟蹤和分析應(yīng)用程序于一體的開(kāi)發(fā)軟件包,。CCS能夠加快用戶(hù)的開(kāi)發(fā)進(jìn)度,增強(qiáng)用戶(hù)的應(yīng)用程序性能,,使用戶(hù)可以實(shí)時(shí)地創(chuàng)建和調(diào)試數(shù)字信號(hào)處理應(yīng)用程序,。在開(kāi)發(fā)軟件CCS的集成開(kāi)發(fā)環(huán)境中,綜合應(yīng)用TMS320C62x的軟件設(shè)計(jì)方法可以編寫(xiě)和優(yōu)化時(shí)延神經(jīng)網(wǎng)絡(luò)識(shí)別算法的C代碼,。
經(jīng)過(guò)實(shí)際測(cè)試,,在TMS320C6201上實(shí)現(xiàn)寬帶毫米波雷達(dá)目標(biāo)時(shí)延神經(jīng)網(wǎng)絡(luò)識(shí)別算法的程序執(zhí)行時(shí)間為0.850ms,滿(mǎn)足了目標(biāo)識(shí)別算法的實(shí)時(shí)性需求,,取得了比較好的處理效果,。
參考文獻(xiàn)
1 肖懷鐵.寬帶極化毫米波雷達(dá)目標(biāo)特征信號(hào)測(cè)量與識(shí)別算法研究:[博士論文].國(guó)防科技大學(xué),,2000
2 TMS320C6x用戶(hù)手冊(cè).TI公司
3 任麗香,馬淑芬,,李方慧.TMS320C6000系列DSPs的原理與應(yīng)用.北京:電子工業(yè)出版社