• <li id="00i08"><input id="00i08"></input></li>
  • <sup id="00i08"><tbody id="00i08"></tbody></sup>
    <abbr id="00i08"></abbr>
  • 新聞中心

    EEPW首頁 > 嵌入式系統 > 設計應用 > G.723.1標準算法在DSP上的優化

    G.723.1標準算法在DSP上的優化

    作者: 時間:2012-02-18 來源:網絡 收藏

    3.3匯編編程的

    本文引用地址:http://www.czjhyjcfj.com/article/149632.htm

      線性匯編是TI提供的一種匯編語言,其指令系統和匯編語言的指令系統完全相同,但在編寫時不需要指定寄存器和操作單元,也不需要考慮延時的問題,因此編寫線性匯編相對要容易一些。

      經過以上的后,音頻編碼程序在DM642上的運行狀況有了很大改善,但是經測試仍然沒有到達可以接收的程度,而高級語言的效率幾乎發揮到了極致,所以在具體分析耗時大的模塊特點后,采用線性匯編語言重新編寫C代碼的低效率段程序,迸一步提高程序的執行效率。

      在編寫線性匯編代碼的過程中,為了提高代碼執行效率,我們需要遵循以下原則:

      (1)寫并行代碼:通過使用匯編指令并行執行的方法減少循環內的執行周期數,優化線性匯編代碼。這里的關鍵問題是弄清指令相關性,只有不相關的指令才能并行執行。辨別指令是否相關.可以使用相關圖。

      (2)處理跳轉指令和轉移指令:匯編程序的一大特點就是頻繁地跳轉,當滿足不同的條件時,要求程序進行不同的操作,或跳到相應的位置。對于“大于”、“大于等于”、“小于”、“小于等于”等較為接近的邏輯判斷和處理,應慎重對待,否則將產生邏輯性錯誤,并且很難調試。當發生溢出需進行相應處理時,這種現象尤為突出。

      (3)盡量減少循環體內的指令數[7]:G.72.1的實現,有許多是在循環內部完成的,有些地方如同定碼本搜索過程中,為了確定四個非0脈沖的位置和幅度,還用到了多重循環。在循環內部,特別是在嵌套較深的循環內部,減少一條指令可以大大降低程序的操作次數。例如。對于一個每重循環8次的四重嵌套循環,在最內層循環每減少一條指令,整個程序可以少執行84=4096語句。因此在設計程序時,能夠放在循環體外執行的語句.盡量放在循環體外執行。

      (4)展開程序體:盡在一定條件下,盡量展開程序,以減少子程序的調用和返回次數,犧牲空問換取時間。

      經匯編優化器優化后,代碼效率比C語言直接編譯有明顯提高。

      4 優化工作的創新點

      在對的優化中.本文在前人研究成果的基礎上,針對 C64xx系列芯片提}n了一些有價值的新方法。這些創新點在不同程度上提高了代碼的優化速度和執行效率,在語音編解碼的實時實現中起到了關鍵性作用。下面,本文將以舉例的方式闡明一些經典的方法。

      (1)編寫連接命令文件.cmd

      明確了系統的程序和數據映射地址后,編寫連接器命令文件將部分調用次數較多的函數、堆棧段、數據段放入內存:cmd文件內容如下:

      一L\evmdm642_echocfg.cmd //連接CCS提供的連接命令文件

      SECTIONS

      {

      .tahles>SDRAM

      .cinit>ISRAM //將變量初值表放入內存

      . far >SDRAM

      .const>ISRAM //將常數段放入內存

      .pinit>SDRAM

      . tin >SDRAM

      .text>SDRAM

      .test >ISRAM

      }

      一levmdm642bsl.lib     //連接庫文件

      一levmdm642_edma_aic23.164 //連接驅動程序的庫文件

      一lc6xlx_edma_mcasp.J64 //連接串口McASP的庫文件

      其中.test是筆者在C程序內用#pragma CODE_SECTION或DATA_SECTION自定義的段。

      (2)高速緩沖寄存器Cache的使用

      Cache即高速緩存,是位于CPU和片內存儲器之間的規模小速度快的存儲器。Cache的工作原理是保存CPU中最常用的數據。當Cache中保存著CPU要讀寫的數據時,CPU直接訪問Cache。由于Cache的速度與CPU相當,CPU能在零等待狀態下迅速地實現數據存取。只有在Cache中不舍有CPU所需的數據時CPU才去訪問片內存儲器。因此Cache的有效利用對整個程序速度的提高有著舉足輕重的作用。在主函數中加入以下代碼,使Cache使能:

      CACHE_clean (CACHE_L2ALL,0,0}; //清除Cache內原有內容

      CACHE_setL2Mode (CACHE_64KCACHE); //設置Cache的大小為64K

      CACHE_enableCaching (CACHE_EMIFA_CE00); //Cache使能

      添加以上代瑪后,測試速度由原來的20幀/s提高到了400幀/s。提高了將近20倍。

      5 結束語

      本文詳細分紹了代碼優化工作,重點描述了代碼優化的方法和本課題的創新點.對于中的一些函數提出了獨創性改寫方法。基于線性匯編的優化以及Cache的有效利用使本課題的工作取得了顯著成果,在沒有降低音質的情況下,實現了DSP的語音實時編解碼。

      本文作者創新點:在對的優化中,針對TMS320DM 642 DSP系列芯片提出了一些有價值的新方法。例如:編寫連接命令文件.cmd和高速緩沖寄存器Cache的使用。這些創新點在不同程度上提高了代碼的優化速度和執行效率,在語音編解碼的DSP實時實現中起到了關鍵性作用。


    上一頁 1 2 下一頁

    評論


    相關推薦

    技術專區

    關閉
    主站蜘蛛池模板: 平罗县| 阿克陶县| 望奎县| 外汇| 洪江市| 顺义区| 宜阳县| 景泰县| 乳山市| 东乡族自治县| 桑植县| 萨迦县| 遵义县| 昭平县| 珲春市| 承德市| 马公市| 神农架林区| 光泽县| 屯留县| 万宁市| 西青区| 胶州市| 徐闻县| 渭南市| 弥勒县| 宁明县| 山东省| 清新县| 鲁山县| 太谷县| 盐源县| 津市市| 玛纳斯县| 襄樊市| 社会| 常山县| 年辖:市辖区| 阳原县| 庄浪县| 冀州市|