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