99精品伊人亚洲|最近国产中文炮友|九草在线视频支援|AV网站大全最新|美女黄片免费观看|国产精品资源视频|精彩无码视频一区|91大神在线后入|伊人终合在线播放|久草综合久久中文

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

基于TMS320VC5402 DSP的特殊結(jié)構(gòu)和指令集代碼實(shí)現(xiàn)手工匯編優(yōu)化

牽手一起夢 ? 來源:單片機(jī)與嵌入式系統(tǒng)應(yīng)用 ? 作者:錢俊,王芙蓉 ? 2020-10-04 13:24 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

1 引言

隨著DSP技術(shù)的不斷發(fā)展和完善,數(shù)字信號處理的應(yīng)用范圍越來越廣泛。工控、計算機(jī)、通信消費(fèi)電子產(chǎn)品中,都會找到它的影子。近年來,隨著多媒體通信的蓬勃發(fā)展,DSP也越來越多的應(yīng)用在多媒體通信中,而在多媒體通信中DSP多用于語音壓縮和圖像處理等方面,而這些都需要巨大的計算量,在實(shí)時通信中一些低速DSP難以滿足要求,而使用高速DSP會大大提高成本,所以對代碼進(jìn)行優(yōu)化是現(xiàn)在DSP開發(fā)中常用的一種方法。由于DSP的特殊結(jié)構(gòu),編譯器的編譯效率都比較低,難以將DSP計算能力全部發(fā)揮出來,所以就必須根據(jù)DSP的特殊結(jié)構(gòu)和指令集代碼進(jìn)行手工的匯編優(yōu)化。

本文結(jié)合在TI公司的TMS320VC5402 DSP上的對G.729算法的優(yōu)化經(jīng)驗(yàn),提出一些優(yōu)化的方法和建議,而這些方法也適用其他54系列的DSP。

2 芯片介紹

TMS320C54X是TI公司于1996年推出的新一代定點(diǎn)數(shù)字處理器,它具有功耗小、高度并行等優(yōu)點(diǎn),可以滿足電信等眾多領(lǐng)域的實(shí)時處理要求。54系列有很多不同型號的芯片,它們的結(jié)構(gòu)都是一樣的,只是在接口和存儲器空間上有些不同。在54系列眾多DSP芯片中 TMS320VC5402是使用最廣泛的一種芯片,接下來將以TMS320VC5402為例介紹54系列DSP的性能特點(diǎn):

● 運(yùn)算速度最高達(dá)100MIPS

● 具有先進(jìn)的多總線結(jié)構(gòu),三條16 位數(shù)據(jù)存儲器總線和一條程序存儲器總線

● 40位算術(shù)邏輯單元(ALU),包括一個40位桶形移位器和兩個40位累加器

● 一個17bit×17bit乘法器和40位專用加法器,允許16位帶/不帶符號乘法

● 8個輔助寄存器和一個軟件棧

● 內(nèi)部采用改進(jìn)的哈佛結(jié)構(gòu),程序空間和數(shù)據(jù)空間分開,允許同時取指令和取操作數(shù),并且允許在程序和數(shù)據(jù)空間相互傳送數(shù)據(jù)

● 最大64K×16bit外部數(shù)據(jù)空間,最大1M×16bit外部程序空間,4K×16bit片內(nèi)ROM,16K×16bit片內(nèi)RAM

● 內(nèi)置可編程等待狀態(tài)發(fā)生器、鎖相環(huán)(PLL)時鐘發(fā)生器、兩個多通道緩沖串口、一個8位并行與外部處理器通信的HPI口、兩個16位定時器以及6通道DMA控制器

● 支持單指令循環(huán)和塊循環(huán),采用六級流水線,將一條指令執(zhí)行所需要的取指、譯碼、取操作數(shù)并執(zhí)行等幾個步驟同時完成,是指令周期降到最小適合算法的優(yōu)化

3 代碼優(yōu)化

對C代碼進(jìn)行手工匯編優(yōu)化有三種方法:1.對照C代碼寫出匯編代碼,這種方法優(yōu)化的效率很高,但是開發(fā)難度很大特別是當(dāng)代碼量很大,結(jié)構(gòu)很復(fù)雜時優(yōu)化很容易出錯;2.先用編譯器產(chǎn)生匯編代碼,然后改寫匯編代碼,這種方法優(yōu)化的效率較低,因?yàn)榭蚣鼙幌薅耍情_發(fā)難度降低了,不容易出錯。

由于現(xiàn)在常用的一些音頻、圖像處理算法都是結(jié)構(gòu)很復(fù)雜的程序,所以建議使用第二種優(yōu)化方法。

3.1 產(chǎn)生匯編代碼

TI公司為DSP開發(fā)者提供一套編譯開發(fā)平臺叫CCS (Code Composer Studio),該工具提供了編譯器可以將C語言的程序編譯為DSP的匯編語言程序,然后鏈接生成可以在DSP上執(zhí)行的COFF格式的out文件。

而CCS自身也提供優(yōu)化器可對C代碼進(jìn)行優(yōu)化,并產(chǎn)生匯編語言程序,具體過程如圖1所示。

CCS提供了4級的文件優(yōu)化方案,分別是O0、O1、O2、O3,以下具體說明。

(1) O0 寄存器級別

● 執(zhí)行控制流程簡化

● 用寄存器分配變量

● 執(zhí)行交替循環(huán)

● 排除未用的代碼

● 簡化公式和表述

● 擴(kuò)大對內(nèi)連函數(shù)的調(diào)用

(2) O1 局部級別

執(zhí)行所有O0級別的優(yōu)化,并且:

● 執(zhí)行局部常量的傳播

● 排除未用的賦值

● 排除局部共用表達(dá)式

(3) O2 函數(shù)級別

執(zhí)行所有O1級別的優(yōu)化,并且:

● 執(zhí)行循環(huán)優(yōu)化

● 排除全局共用子表達(dá)式

● 排除全局不用的賦值

● 執(zhí)行打開循環(huán)

(4) O3 文件級別

執(zhí)行所有O1級別的優(yōu)化,并且:

● 排除未被調(diào)用的函數(shù)

● 簡化返回值沒被使用的函數(shù)

● 讓小函數(shù)變成內(nèi)聯(lián)調(diào)用

● 保存函數(shù)說明,以便主函數(shù)被優(yōu)化時知道被調(diào)用函數(shù)的屬性

● 識別文件級別的變量的特性

在使用O3級別的優(yōu)化時,還可以使用別的選項(xiàng)執(zhí)行更細(xì)致的優(yōu)化

● OLN 得到標(biāo)準(zhǔn)庫函數(shù)的文件

● ONN 創(chuàng)造優(yōu)化信息文件

● PM 執(zhí)行程序級別優(yōu)化,編譯多個源文件

而我們在做優(yōu)化時,選的是O2級別的優(yōu)化,因?yàn)槭褂肙2級別優(yōu)化后產(chǎn)生的匯編文件帶有比較多的注釋信息,比較容易看懂程序,建議對程序不太熟和對匯編語言不太熟練的人使用。

3.2 手工匯編優(yōu)化

因?yàn)閰R編語言可讀性很差,并且代碼量很大,所以手工優(yōu)化工作量很大,并且容易出錯。為了確保優(yōu)化不出錯,我們就先制作一段測試序列即程序的輸入,然后運(yùn)行程序?qū)ζ溥M(jìn)行處理,生成一段正確的結(jié)果序列,檢驗(yàn)手工優(yōu)化是否正確就是用優(yōu)化過的程序?qū)ο嗤臏y試序列進(jìn)行處理,比較生成的結(jié)果序列和正確的結(jié)果序列是否一樣,一樣的話就代表優(yōu)化無誤。不過測試序列要比較長,因?yàn)橛械腻e誤開始不會顯現(xiàn)出來,只是慢慢累積,運(yùn)行一段時間才會出現(xiàn)。

接下來,就開始手工優(yōu)化的工作。下面就是我對手工優(yōu)化的一些經(jīng)驗(yàn)。

(1) 盡量少進(jìn)行函數(shù)調(diào)用。因?yàn)檫M(jìn)行函數(shù)調(diào)用的時候,要將PC壓棧,還要將一些寄存器壓棧,函數(shù)調(diào)用完后,還要出棧,這都是一些不必要的操作,所以一些小的函數(shù),就不調(diào)用,而是直接寫入主函數(shù)里,這樣可以就可以減少那些壓棧出棧的操作,提高速度。

(2) 優(yōu)化循環(huán)時,盡量將一些操作放到循環(huán)外面去,減少操作的次數(shù)。例如一些賦值和初始化操作,可以提到循環(huán)外面去做,來提高速度。

(3) 去除一些冗余的賦值。編譯器產(chǎn)生的代碼有很多賦值,經(jīng)常將一個值賦給寄存器,再賦給變量,這樣就產(chǎn)生了冗余。

(4) 盡量使用RPT和RPTB來執(zhí)行循環(huán)操作。在編譯器產(chǎn)生的代碼里很多循環(huán)操作是通過條件判別來實(shí)現(xiàn)的,這樣就多了很多無用的判別代碼,而54x的DSP芯片就提供專門的循環(huán)指令:RPT和RPTB。RPT的功能就是循環(huán)執(zhí)行下一條指令,循環(huán)次數(shù)由RC寄存器的值決定,循環(huán)次數(shù)是RC寄存器的值加1,所以執(zhí)行循環(huán)前要將循環(huán)次數(shù)減1賦給RC寄存器;RPTB是塊循環(huán)指令,它的功能是循環(huán)執(zhí)行一段指令,它的循環(huán)次數(shù)由BRC寄存器決定,循環(huán)次數(shù)是BRC的寄存器的值加1,所以使用前需將循環(huán)次數(shù)減1賦給BRC寄存器。

(5) 使用比較快的尋址方式。在數(shù)字信號處理里面,會對大量的數(shù)據(jù)進(jìn)行大量的運(yùn)算,如果使用比較快的尋址方式會大大減少指令周期。因?yàn)閿?shù)據(jù)大多是順序存放,所以我們用寄存器去尋址,操作完后自加1而指向下個數(shù)據(jù),這樣尋址會減少很多指令周期。

(6) 使用循環(huán)緩沖區(qū)。因?yàn)镕FT,F(xiàn)IR等常用運(yùn)算中都需要對數(shù)據(jù)進(jìn)行移位操作,如果數(shù)據(jù)量大的話,程序花在數(shù)據(jù)移位上的開銷就很大了,如果使用循環(huán)緩沖區(qū)就可以不進(jìn)行這些操作從而提高速度。

(7) 使用一些專用指令。在54的指令系統(tǒng)里,有一些專用指令執(zhí)行一些特殊的操作,例如平方,F(xiàn)IR等,如果用其他指令代替需要多個指令周期,而使用專用指令值需要一個指令周期。

(8) 使用并行指令。因?yàn)镈SP的流水線結(jié)構(gòu),可以讓一些指令同時運(yùn)行,就產(chǎn)生了并行指令,使用并行指令會大大減少指令周期。

(9) 將一些常用的程序和數(shù)據(jù),放在片內(nèi)RAM運(yùn)行。DSP芯片上一般都帶有RAM,而片內(nèi)RAM的尋址速度比片外RAM快一至兩倍,所以將常用程序和數(shù)據(jù)放在片內(nèi),會大大提高運(yùn)行速度。

3.3 優(yōu)化中常遇見的問題

在手工優(yōu)化過程時會遇到很多問題,以下幾點(diǎn)比較常見。

(1) 對一些寄存器的設(shè)置。因?yàn)槭鞘止?yōu)化,所以對一些寄存器都要自己賦值,例如ST0、ST1和PMST等,不同的設(shè)置會導(dǎo)致運(yùn)算結(jié)果的不一樣。其中一些用的比較多的位有SXM、OVM和FRCT。SXM是符號擴(kuò)展位,如果SXM=0就不進(jìn)行符號擴(kuò)展,如果SXM=1就進(jìn)行符號擴(kuò)展(見圖2a)。OVM是溢出模式位,當(dāng)發(fā)生溢出時,如果OVM=0溢出的結(jié)果就被送往目的寄存器,如果OVM=1就往目的寄存器送最大的正數(shù)(007FFFFFFFh)或最小的負(fù)數(shù)(FF80000000h)。FRCT是小數(shù)模式位,當(dāng)FRCT=1時乘法的結(jié)果會左移一位(見圖2b)。以上3個標(biāo)志位的置位和復(fù)位是由SSBX和 RSBX指令來完成的。

(2) 注意流水線沖突。5402的芯片有一個6級深度的指令流水線,這6級流水線彼此是獨(dú)立的,在任何一個機(jī)器周期內(nèi),可以有1至6條不同的指令在工作。這6級流水線的功能分別是預(yù)取指、取指、譯碼、尋址、讀數(shù)和執(zhí)行。C5402多級流水線操作可以讓多條指令同時指令訪問CPU資源,如果多個流水線同時訪問到相同的資源,就可能發(fā)生流水線沖突,有些沖突可以由CPU通過延遲尋址的方法自動緩解,而有的沖突是不能防止的,需要由程序重新安排指令或插入空操作來解決。當(dāng)用CCS編譯器對C程序進(jìn)行編譯的時候,編譯器會自動加入NOP指令來解決流水線沖突,而進(jìn)行手工優(yōu)化的時候,就要特別注意這個問題,大部分流水線沖突都是因?yàn)橥瑫r訪問到某些寄存器,只要根據(jù)等待周期表加入相應(yīng)的NOP指令就可以解決。

(3) 對一些參數(shù)的保存。在手工優(yōu)化的過程中,我們會用某些寄存器來傳遞數(shù)據(jù),而在此過程中,如果調(diào)用了別的函數(shù),這些寄存器的值就有可能被改變,所以在調(diào)用這些函數(shù)的時候,要先將這些參數(shù)壓棧保存,調(diào)用完后再將其出?;謴?fù)。還有就是某些標(biāo)志位的保存,因?yàn)樵谡{(diào)用函數(shù)的過程會改變這些狀態(tài)標(biāo)志位,所以在調(diào)用完后要將其恢復(fù)。

(4) 循環(huán)緩沖區(qū)地址分配問題。循環(huán)緩沖區(qū)的地址分配必須對齊,長度為R的緩沖區(qū)必須從N位地址的邊界開始(即循環(huán)緩沖區(qū)基地址的N個最低有效位必須為0),N 是滿足2N>R的最小的整數(shù)。例如,長度R=31的循環(huán)緩沖區(qū)必須從地址XXXX XXXX XXX0 00002(N=5,25>>31,該地址的最低5位為0)。

(5) 內(nèi)存泄漏問題。因?yàn)镈SP使用的是哈佛結(jié)構(gòu),數(shù)據(jù)空間和程序空間是分開的,一般數(shù)據(jù)的操作不會影響到程序。但是DSP芯片上都帶有RAM,而這些空間數(shù)據(jù)和程序是共享的,所以對該部分的數(shù)據(jù)進(jìn)行操作,如果有泄漏的話會改寫程序,導(dǎo)致程序跑飛。因此程序跑飛的話,就要考慮是否有內(nèi)存泄漏。

4 結(jié)論

以上經(jīng)驗(yàn)和技巧均是在實(shí)際的DSP工程中總結(jié)得出,實(shí)踐證明對實(shí)際開發(fā)非常有幫助。以對G.729算法優(yōu)化為例,在優(yōu)化之前,G.729的運(yùn)算量為1000MIPS,優(yōu)化后的運(yùn)算量為30MIPS,提高了30多倍,可見優(yōu)化的效果很明顯。以上這些經(jīng)驗(yàn)主要是針對TI公司的 54系列,但對于別的型號的DSP也有借鑒作用。

責(zé)任編輯:gt

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 處理器
    +關(guān)注

    關(guān)注

    68

    文章

    19884

    瀏覽量

    235030
  • dsp
    dsp
    +關(guān)注

    關(guān)注

    556

    文章

    8155

    瀏覽量

    357311
  • 存儲器
    +關(guān)注

    關(guān)注

    38

    文章

    7648

    瀏覽量

    167306
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點(diǎn)推薦

    TMS320VC5402 DSP與單片機(jī)的HPI接口實(shí)現(xiàn)

    TMS320VC5402(VC5402)兩個可編程的多通道緩沖串口(McBSP)能夠全雙工、快速地與其他同步串口進(jìn)行數(shù)據(jù)交換,硬件連接簡單,串口的工作模式和傳送數(shù)據(jù)的格式可通過編程實(shí)現(xiàn)。DSP
    發(fā)表于 09-09 10:49 ?2393次閱讀
    <b class='flag-5'>TMS320VC5402</b> <b class='flag-5'>DSP</b>與單片機(jī)的HPI接口<b class='flag-5'>實(shí)現(xiàn)</b>

    HPI方式自舉在TMS320VC5402 DSP芯片上的實(shí)現(xiàn)

    HPI方式自舉在TMS320VC5402 DSP芯片上的實(shí)現(xiàn)在由TI系列DSP組成的多機(jī)系統(tǒng)中,往往用HPI進(jìn)行多機(jī)數(shù)據(jù)交換。由于HPI的功能特性,產(chǎn)生了一種新的應(yīng)用—— 使用HPI對
    發(fā)表于 08-20 18:59

    TMS320VC5402手冊

    TMS320VC5402手冊
    發(fā)表于 05-25 09:34

    怎樣去設(shè)計TMS320VC5402與模擬芯片TLC320AD50C的接口?

    TMS320VC5402的McBSP是什么?TLC320AD20C是什么?TMS320VC5402與TLC320AD50C硬件連接及軟件怎樣去實(shí)現(xiàn)
    發(fā)表于 04-23 06:56

    如何去實(shí)現(xiàn)TMS320VC5402與TLC320AD50C的接口設(shè)計?

    如何去實(shí)現(xiàn)TMS320VC5402與TLC320AD50C的接口設(shè)計?
    發(fā)表于 06-04 06:01

    TMS320VC5402 的Flash并行Bootloade

    概述TMS320VC5402 DSP 芯片的幾種自舉引導(dǎo)方法,深入分析、研究最常用的基于閃爍存儲器的并行自舉引導(dǎo)方式;按照自舉表的格式在Flash 中存儲程序代碼,由DSP Bootl
    發(fā)表于 04-15 11:56 ?40次下載

    基于TMS320VC5402DSP基本系統(tǒng)的設(shè)計

    基于TMS320VC5402DSP基本系統(tǒng)的設(shè)計 本文以美國Texas Instruments( TI) 公司C5000TM系列DSPTMS320VC5402 為例,介紹用F
    發(fā)表于 04-01 15:52 ?47次下載

    基于TMS320VC5402 DSP芯片的自動指紋識別系統(tǒng)的

    介紹了一種基于TI公司的TMS320VC5402來構(gòu)造指紋識別系統(tǒng)的方法。詳細(xì)論述了系統(tǒng)的各個組成部分以及指紋識別算法的實(shí)現(xiàn)流程,結(jié)合VC5402指令集和自身
    發(fā)表于 12-06 14:08 ?94次下載

    MAX121與TMS320VC5402在高速數(shù)據(jù)采集中的接口

    MAX121與TMS320VC5402在高速數(shù)據(jù)采集中的接口設(shè)計 TMS320VC5402
    發(fā)表于 10-09 14:55 ?1068次閱讀
    MAX121與<b class='flag-5'>TMS320VC5402</b>在高速數(shù)據(jù)采集中的接口

    基于DSP芯片TMS320VC5402的HPI通信設(shè)計

    介紹了DSP(Digital signal processor)芯片TMS320VC5402的HPI(Hostportinterface)主機(jī)接口原理.以一個簡單的通信程序作為例子,詳細(xì)說明通過
    發(fā)表于 02-28 17:31 ?136次下載

    TLC320AD50C介紹及與TMS320VC5402連接分析

    TMS320VC5402是TI公司生產(chǎn)的TMS320VC54x系列中的一個操作靈活、高速、具有較高性價比、低功耗的16位定點(diǎn)通用DSP芯片
    發(fā)表于 09-08 11:25 ?2399次閱讀
    TLC<b class='flag-5'>320</b>AD50C介紹及與<b class='flag-5'>TMS320VC5402</b>連接分析

    TMS320VC5402 DSP與串行AD73360 A/D轉(zhuǎn)換器的接口設(shè)計

    TMS320VC5402 DSP與串行AD73360 A/D轉(zhuǎn)換器的接口設(shè)計
    發(fā)表于 11-02 11:00 ?12次下載

    TMS320VC5402實(shí)現(xiàn)的語音識別算法

    TMS320VC5402實(shí)現(xiàn)的語音識別算法
    發(fā)表于 12-30 15:38 ?9次下載

    基于TMS320VC5402DSP基本系統(tǒng)的設(shè)計

    基于TMS320VC5402DSP基本系統(tǒng)的設(shè)計
    發(fā)表于 10-20 15:14 ?18次下載
    基于<b class='flag-5'>TMS320VC5402</b>的<b class='flag-5'>DSP</b>基本系統(tǒng)的設(shè)計

    TMS320VC5402 數(shù)字信號處理器

    電子發(fā)燒友網(wǎng)為你提供TI(ti)TMS320VC5402相關(guān)產(chǎn)品參數(shù)、數(shù)據(jù)手冊,更有TMS320VC5402的引腳圖、接線圖、封裝手冊、中文資料、英文資料,TMS320VC5402真值表,TM
    發(fā)表于 10-09 10:54
    <b class='flag-5'>TMS320VC5402</b> 數(shù)字信號處理器