基于C6000系列DSP的MPEG-4編碼器實(shí)現
·可以將兩個(gè)16位數據或者四個(gè)8位數據合并成一個(gè)32位數據,以提高存取效率;
·必須靜態(tài)地知道每條操作指令執行需要的時(shí)鐘周期,這樣才能取得該操作的正確結果;
·這種結構的處理器不能處理動(dòng)態(tài)事件,例如Cache突然消失;
·對于多周期才能完成的指令,在正確計算的基礎上,一定要提前執行,以免出現一條指令必須等上一條指令執行結束才能執行的情況。
下面結合C6000系列DSP的指令及其具體資源情況,以MPEG-4中的算法為例說(shuō)明如何利用這兩種結構設計出高效的代碼。
3.1 利用流水線(xiàn)結構設計程序
流水線(xiàn)是指指令的處理可分為幾個(gè)子操作,每個(gè)子操作由不同的單元完成。對每個(gè)單元來(lái)說(shuō),每隔一個(gè)時(shí)鐘周期可進(jìn)入一條新指令,在同一時(shí)間內不同單元可以同時(shí)處理多條指令。在C6000中B(.unit)lable是一條跳轉指令,它的執行周期為7個(gè)時(shí)鐘周期,也就是說(shuō),在安排這條指令之后6個(gè)時(shí)鐘周期才能使程序轉移到lable處執行,以程序1為例說(shuō)明如何利用流水線(xiàn)結構設計程序。該程序的執行順序如下:0000→0004→0008→000C-0010→0014→0008→000C...從程序執行順序知道,要想在執行完0014處的指令后跳轉到LOOP處,就應該在0014的前6個(gè)時(shí)鐘周期處安排這條指令;如果不提前安排好這條指令,而是在0014后放置這條指令,就需要使CPU等待6個(gè)時(shí)鐘周期才能跳到LOOP處,從而使程序運行效率降低。從這個(gè)程序的執行順序可以看出,必須提前知道每一條指令的運行周期數,并提前安排該指令,才能達到減少等待周期、提高程序效率的效果。C6000系列DSP指令集包括許多多時(shí)鐘周期的指令,如跳轉指令、數據訪(fǎng)問(wèn)指令等。MPEG-4編碼算法需要頻繁地訪(fǎng)問(wèn)大量數據,并且有很多循環(huán),無(wú)論是數據訪(fǎng)問(wèn)還是循環(huán)都要用到多時(shí)鐘周期指令。以MEPG-4的DCT算法為例,每一個(gè)8×8的塊變換需要用16次的跳轉指令和256次數據訪(fǎng)問(wèn)指令,由此可見(jiàn)流水線(xiàn)在MPEG-4程序優(yōu)化中所起的作用。
相關(guān)推薦
技術(shù)專(zhuān)區
- FPGA
- DSP
- MCU
- 示波器
- 步進(jìn)電機
- Zigbee
- LabVIEW
- Arduino
- RFID
- NFC
- STM32
- Protel
- GPS
- MSP430
- Multisim
- 濾波器
- CAN總線(xiàn)
- 開(kāi)關(guān)電源
- 單片機
- PCB
- USB
- ARM
- CPLD
- 連接器
- MEMS
- CMOS
- MIPS
- EMC
- EDA
- ROM
- 陀螺儀
- VHDL
- 比較器
- Verilog
- 穩壓電源
- RAM
- AVR
- 傳感器
- 可控硅
- IGBT
- 嵌入式開(kāi)發(fā)
- 逆變器
- Quartus
- RS-232
- Cyclone
- 電位器
- 電機控制
- 藍牙
- PLC
- PWM
- 汽車(chē)電子
- 轉換器
- 電源管理
- 信號放大器
評論