基于XC166單片機的DSP優(yōu)化方法
發(fā)布時間:2007/4/23 0:00:00 訪問次數(shù):2832
與專用數(shù)字信號處理器(DSP)相比,英飛凌的C166單片機的DSP性能相當差,為了提高C166單片機的DSP處理能力,英飛凌推出了新的16位單片機系列XC166,XC166系列單片機與C166單片機的最主要的區(qū)別在于,XC166中的CPU核加入了乘法-累加(MAC)單元,用于提高DSP的功能。MAC單元在XC166中是以一個算法處理單元出現(xiàn)的,類似于CPU中的算術(shù)邏輯(ALU)單元。這種結(jié)構(gòu)的優(yōu)點是可以保持XC166與C166的兼容性。
MAC單元有自己的尋址模式和指令集,MAC指令集是專為開發(fā)DSP程序而設計的。獨立的尋址模式是為了保證MAS指令能在1個機器周期內(nèi)完成對2個操作數(shù)的間接尋址。與XC166中的一般尋址模式不同,MAC尋址模式有2個地址指針(IDX0/IDX1)及2對地址偏移指針(QX0/QX1,QR0/QR1)用于對雙操作數(shù)尋址。另外,單機器周期的MAC指令還要求MAC單元具有Harvard結(jié)構(gòu),也即代碼與數(shù)據(jù)獨立尋址。但英飛凌的16位單片機的存儲器地址都是線性的,采用的是Von Neumann結(jié)構(gòu),代碼與數(shù)據(jù)在一個線性存儲空間。為了在線性空間中實現(xiàn)Harvard結(jié)構(gòu),XC166專門把MAC指令的兩個操作數(shù)中的一個定義在DPRAM中,所以,在使用MAC單元時要特別注意,有些操作數(shù)只能存在DPRAM中,否則,指令無法正常運行。目前,XC166系列單片機配有2KB的DPRAM,從地址0xF600到0xFDFF。
由于硬件的要求,XC166單片機的指令流水線存在著不可避免的阻塞現(xiàn)象,MAC單元指令也一樣。盡管在硬件設計時已經(jīng)采用了專用模塊來減少阻塞,但有些阻塞是不可避免的,從程序優(yōu)化的角度來說,可以充分利用指令流水線阻塞現(xiàn)象,通過重排指令流水線上的指令,消除阻塞,以使得程序的運行時間縮短,從而達到優(yōu)化的目的。
通常DSP優(yōu)化方法可以分為兩類:一類是與芯片相關(guān)的,另一類是與芯片無關(guān)的。與芯片無關(guān)的優(yōu)化方法獨立于單片機硬件,適用于所有單片機及DSP處理器,下面根據(jù)使用XC166單片機的經(jīng)驗總結(jié)一些優(yōu)化DSP程序的方法。
1 通用優(yōu)化方法
1.1 數(shù)據(jù)組處理
數(shù)據(jù)組處理的基本思想是通過成組的處理數(shù)據(jù),以節(jié)約每次調(diào)用處理子程序所需的附加指令。數(shù)據(jù)組處理可以在C語言或匯編語言程序中實現(xiàn)。一般而言,對于開發(fā)DSP程序,最常用的程序語言為C和匯編。下面分別介紹如何在C和匯編程序中使用數(shù)據(jù)組處理優(yōu)化方法。
(1)C程序
在C環(huán)境中開發(fā)DSP程序,通常算法本身由匯編編寫,以便優(yōu)化實現(xiàn)。C主程序通過調(diào)用匯編實現(xiàn)的核心處理子程序來完成對數(shù)據(jù)的處理。核心處理子程序有兩種實現(xiàn)方法,一種是數(shù)組處理,另一種是單值處理,假設單值處理子程序的核心部分與數(shù)組處理子程序的核心部分所需機器周期相同,并且調(diào)用子程序的前期處理需M個機器周期,后期處理需要N個機器周期,如果子程序被調(diào)用K次,那么理想情況下,數(shù)據(jù)組處理可以節(jié)約(K-1)(M+N)個機器周期,如圖1所示。
(2)匯編程序
在匯編程序中實現(xiàn)數(shù)據(jù)組處理有多種方法,比如數(shù)組操作,數(shù)組讀入/寫出等。
1、數(shù)組操作。數(shù)組操作是將多個不同的短操作數(shù)裝入一個長位數(shù)的寄存器,然后進行運算操作。比如,1個16位的寄存器可以裝入2個8位的來自A/D轉(zhuǎn)換器的數(shù)據(jù)。下面舉例說明數(shù)據(jù)組處理在匯編程序中的應用。
2、數(shù)組讀入寫出。這種方法是將多個短操作數(shù)合并為一個長操作數(shù)后進行讀入/寫出操作,如上面例子中的輸入/輸出部分。
1.2 數(shù)據(jù)存儲器交織
數(shù)據(jù)存儲器交織的目的是通過重新排列數(shù)據(jù)在存儲器中的位置,以使得程序讀寫數(shù)據(jù)的時間最短,比如有2個8位的復數(shù)x和y,一般情況下,復數(shù)將按下
與專用數(shù)字信號處理器(DSP)相比,英飛凌的C166單片機的DSP性能相當差,為了提高C166單片機的DSP處理能力,英飛凌推出了新的16位單片機系列XC166,XC166系列單片機與C166單片機的最主要的區(qū)別在于,XC166中的CPU核加入了乘法-累加(MAC)單元,用于提高DSP的功能。MAC單元在XC166中是以一個算法處理單元出現(xiàn)的,類似于CPU中的算術(shù)邏輯(ALU)單元。這種結(jié)構(gòu)的優(yōu)點是可以保持XC166與C166的兼容性。
MAC單元有自己的尋址模式和指令集,MAC指令集是專為開發(fā)DSP程序而設計的。獨立的尋址模式是為了保證MAS指令能在1個機器周期內(nèi)完成對2個操作數(shù)的間接尋址。與XC166中的一般尋址模式不同,MAC尋址模式有2個地址指針(IDX0/IDX1)及2對地址偏移指針(QX0/QX1,QR0/QR1)用于對雙操作數(shù)尋址。另外,單機器周期的MAC指令還要求MAC單元具有Harvard結(jié)構(gòu),也即代碼與數(shù)據(jù)獨立尋址。但英飛凌的16位單片機的存儲器地址都是線性的,采用的是Von Neumann結(jié)構(gòu),代碼與數(shù)據(jù)在一個線性存儲空間。為了在線性空間中實現(xiàn)Harvard結(jié)構(gòu),XC166專門把MAC指令的兩個操作數(shù)中的一個定義在DPRAM中,所以,在使用MAC單元時要特別注意,有些操作數(shù)只能存在DPRAM中,否則,指令無法正常運行。目前,XC166系列單片機配有2KB的DPRAM,從地址0xF600到0xFDFF。
由于硬件的要求,XC166單片機的指令流水線存在著不可避免的阻塞現(xiàn)象,MAC單元指令也一樣。盡管在硬件設計時已經(jīng)采用了專用模塊來減少阻塞,但有些阻塞是不可避免的,從程序優(yōu)化的角度來說,可以充分利用指令流水線阻塞現(xiàn)象,通過重排指令流水線上的指令,消除阻塞,以使得程序的運行時間縮短,從而達到優(yōu)化的目的。
通常DSP優(yōu)化方法可以分為兩類:一類是與芯片相關(guān)的,另一類是與芯片無關(guān)的。與芯片無關(guān)的優(yōu)化方法獨立于單片機硬件,適用于所有單片機及DSP處理器,下面根據(jù)使用XC166單片機的經(jīng)驗總結(jié)一些優(yōu)化DSP程序的方法。
1 通用優(yōu)化方法
1.1 數(shù)據(jù)組處理
數(shù)據(jù)組處理的基本思想是通過成組的處理數(shù)據(jù),以節(jié)約每次調(diào)用處理子程序所需的附加指令。數(shù)據(jù)組處理可以在C語言或匯編語言程序中實現(xiàn)。一般而言,對于開發(fā)DSP程序,最常用的程序語言為C和匯編。下面分別介紹如何在C和匯編程序中使用數(shù)據(jù)組處理優(yōu)化方法。
(1)C程序
在C環(huán)境中開發(fā)DSP程序,通常算法本身由匯編編寫,以便優(yōu)化實現(xiàn)。C主程序通過調(diào)用匯編實現(xiàn)的核心處理子程序來完成對數(shù)據(jù)的處理。核心處理子程序有兩種實現(xiàn)方法,一種是數(shù)組處理,另一種是單值處理,假設單值處理子程序的核心部分與數(shù)組處理子程序的核心部分所需機器周期相同,并且調(diào)用子程序的前期處理需M個機器周期,后期處理需要N個機器周期,如果子程序被調(diào)用K次,那么理想情況下,數(shù)據(jù)組處理可以節(jié)約(K-1)(M+N)個機器周期,如圖1所示。
(2)匯編程序
在匯編程序中實現(xiàn)數(shù)據(jù)組處理有多種方法,比如數(shù)組操作,數(shù)組讀入/寫出等。
1、數(shù)組操作。數(shù)組操作是將多個不同的短操作數(shù)裝入一個長位數(shù)的寄存器,然后進行運算操作。比如,1個16位的寄存器可以裝入2個8位的來自A/D轉(zhuǎn)換器的數(shù)據(jù)。下面舉例說明數(shù)據(jù)組處理在匯編程序中的應用。
2、數(shù)組讀入寫出。這種方法是將多個短操作數(shù)合并為一個長操作數(shù)后進行讀入/寫出操作,如上面例子中的輸入/輸出部分。
1.2 數(shù)據(jù)存儲器交織
數(shù)據(jù)存儲器交織的目的是通過重新排列數(shù)據(jù)在存儲器中的位置,以使得程序讀寫數(shù)據(jù)的時間最短,比如有2個8位的復數(shù)x和y,一般情況下,復數(shù)將按下
上一篇:DSP基條碼掃描器
上一篇:不使用MCU對三線DCP進行控制