專利名稱:一種面向通用處理器的fft計算地址產生方法
技術領域:
本發明屬于計算機技術領域,涉及數字信號處理領域的算法實現。
背景技術:
通用處理器通常都具有專門的地址產生模塊,用于處理器訪存操作時產生操作數的地址,地址產生模塊支持多種尋址模式,可根據處理器指令中指定的尋址方式快速產生操作數的地址。為了便于對一塊存儲區間進行循環操作,大多數通用處理器都支持循環尋址模式,地址產生模塊根據循環尋址的范圍產生一定區間的操作數地址。循環尋址需要關注兩個信息基地址和偏移地址,基地址通常指向一塊存儲體或存儲區間,偏移地址表示操作數·在指定存儲區間內的相對位置。進行循環尋址時,地址產生模塊根據循環區間的大小對偏移地址進行取模操作,并產生最終的操作數地址。常用的取模循環操作可以滿足大多數計算的尋址需求,但是在進行一些復雜計算時則顯得不夠靈活,比如進行數字信號處理時常用的FFT (Fast Fourier Transform:快速傅里葉變換)計算。FFT計算通常被分解為M級的基2蝶形運算,級數由FFT計算的點數N確定M =Iog2N-I ;每一級FFT計算都選取N/2組操作數對進行蝶形運算。常用的基于時域抽取的基2 FFT算法,其蝶形運算的公式如下
—i-V- i I ( ") = (廠)+(")八+ 1\公式 I
Uw (《)=xm O) - WnrXm {q)式中為蝶形運算的旋轉因子,一般通過查找表的方式獲得。式中p、q為選取的一組操作數對,對于N點FFT計算,每一級計算都要選取N/2組操作數對進行公式I的計算,其P、Q滿足公式q-p = 2m公式 2以8點FFT計算為例,其進行第一級蝶形運算的操作數對為(0、2)、(1、3)、(4、6)、(5、7);進行第二級蝶形運算的操作數對為(0、4)、( 1、5)、(2、6)、(3、7),可見其操作數地址的排列順序不具備遞增性。正是由于每次選取的操作數對P、q不具備遞增性,因此通用處理器在進行每一級FFT計算時,無法通過常用的取模循環尋址方式連續產生操作數的地址,而需要頻繁插入寄存器賦值指令更改操作數地址,這就增加了通用處理器進行FFT計算的復雜度,降低了 FFT計算的效率。針對FFT計算的地址產生方法已經有很多方面的研究,例如將蝶形運算的操作數地址分為高位地址和低位地址,通過引入隱含位并增加移位計數器實現操作數地址的快速產生。這一類地址產生方法可應用于專用的FFT計算模塊,但由于不能有效利用通用處理器地址產生模塊已有的資源,在通用處理器中實現的代價比較大,因此有必要設計一種通用處理器進行FFT計算時的地址產生方法,使得通用處理器能夠連續快速地產生FFT計算時的操作數地址。
發明內容
為了克服現有技術操作數地址產生比較復雜的不足,本發明提供一種面向通用處理器的FFT計算地址產生方法,能優化FFT計算時操作數的排列順序,擴展通用處理器中常用的循環尋址模式,使得通用處理器可以連續產生FFT計算的操作數地址。本發明解決其技術問題所采用的技術方案包括以下步驟I.優化FFT計算中蝶形運算操作數的選 取順序每一級FFT計算都要選取N/2組操作數對進行蝶形運算,每次選取的操作數對表示為(Pt,qt) ,0 彡 t 彡 N/2-1 ;第M級FFT計算的操作數對從地址O開始選取,目卩Ptl = O ;pt、qt 滿足 qt-pt = 2m ;操作數的選取滿足公式
[qt+2mqt+2m <N-lP,+ι = I
l((i/,.+2")m0d(,V —1)) + 1qt+2m>N-l·2.擴展通用處理器的循環尋址模式增加循環超界地址加一、循環超界地址加二和循環超界地址加四;3.通用處理器通過擴展的循環尋址模式產生每一級FFT計算操作數的地址通用處理器進行第M級的N點FFT計算時都從地址O開始選取操作數對進行蝶形運算,并按照偏移量為2m、循環界限為N-I的循環超界地址加一模式順序產生操作數地址。本發明的有益效果是本發明優化了 FFT計算中蝶形運算操作數對的選取順序,擴展了通用處理器的循環尋址模式,使通用處理器可以連續、快速的產生FFT計算的操作數地址,提高了通用處理器進行所述復雜運算的執行效率,可應用于通用處理器的地址產生模塊。
圖I是進行基于時域抽取的8點FFT計算的流程圖。
具體實施例方式本發明采用如下的技術解決方案I.優化FFT計算中蝶形運算操作數的選取順序每一級FFT計算都要選取N/2組操作數對進行蝶形運算,每次選取的操作數對表示為(pt,qt),其中O彡t彡N/2-1。第M級FFT計算的操作數對從地址O開始選取,目卩Ptl = O ;pt、qt的選取依然滿足公式2 qt-pt = 2m ;操作數的選取滿足公式
\qt+TCJt+2m <N-Irx jpM公式 3
Ι( /, -I-1") rnocK N - Π) +1 if q; -r 2 > N -1
公式3說明每次選取的一組操作數中的pt+1由上一次選取的一組操作數中的qt決定,兩者相差2m,如果qt+2m超過了 FFT計算的點數N_l,則按照取模mod(N-l)加一的方法
產生Pt+1。優化后的操作數P的地址由上一組操作數q的地址偏移加2m決定,而操作數q的地址由本組操作數P的地址偏移加2m產生,這就使每一級FFT計算操作數的排列順序具備了一定的遞增性。2.擴展通用處理器常用的循環尋址模式通用處理器常用的循環尋址方式為取模循環,為了實現上述優化后的蝶形運算操作數對的選取順序,便于通用處理器連續產生FFT計算操作數的地址,需要擴展通用處理器已有的循環尋址模式,增加循環超界地址加一、循環超界地址加二和循環超界地址加四這三種模式,其中后兩種模式是為了實現基于頻域抽取的FFT計算的地址產生。擴展的循環尋址模式如表I所示。3.通用處理器通過擴展的循環尋址模式產生每一級FFT計算操作數的地址通用處理器進行第M級的N點FFT計算時都從‘0’地址開始選取操作數對進行蝶形運算,并按照偏移量為2m、循環界限為N-I的循環超界地址加一模式順序產生操作數地址。 下面結合附圖和實施例對本發明進一步說明。圖I是進行基于時域抽取的8點FFT計算的流程圖。8點FFT計算分為三級(第O級、第I級、第2級),每一級FFT計算中蝶形運算操作數對的地址按照優化后的順序選取,其中第O級的選取順序為(0、1)、(2、3)、(4、5)、(6、7);第I級的選取順序為(0、2)、(4、6)、(1、3)、(5、7);第 2 級的選取順序為(0、4)、(1、5)、(2、6)、(3、7)。通用處理器在進行所述8點FFT計算時,地址產生模塊按照循環超界地址加一的模式順序產生操作數地址。地址產生模塊通常維護三種與尋址相關的寄存器地址寄存器(AR)、偏移量寄存器(IR)、循環尋址寄存器(IRM)。所述寄存器均可由處理器通過指令寫入數據,地址寄存器(AR)還可由地址產生模塊更新寫入數據。進行第O級FFT計算時,處理器通過指令設定起始地址AR為O、偏移量IR為2° =I、循環界限IRM為8-1=7,并通過連續8次普通循環尋址順序產生4對操作數的地址(0、1)、(2、3)、(4、5)、(6、7)。在進行第I級FFT計算時,如表2所示,處理器通過指令設定起始地址AR為O、偏移量IR為21 = 2、循環界限IRM為8-1 = 7,并通過連續8次循環超界地址加一的尋址模式順序產生優化后的4對操作數地址(0、2)、(4、6)、(1、3)、(5、7)。在進行第2級FFT計算時,如表3所示,處理器通過指令設定起始地址AR為O、偏移量IR為22 = 4、循環界限IRM為8-1=7,并通過連續8次循環超界地址加一的尋址模式順序產生優化后的4對操作數地址(0、4)、(1、5)、(2、6)、(3、7)。通用處理器采用本發明設計的循環尋址方式進行N點FFT計算時,只需在每一級FFT計算之前通過指令設定一次尋址寄存器組,地址產生模塊便可根據擴展的循環尋址模式順序產生蝶形運算操作數對的地址。若不采用本發明設計的尋址方式,除第O級以外的其他各級FFT計算,由于操作數地址不具備遞增性,處理器均無法通過普通的循環尋址模式順序產生操作數地址,因此需要通過指令設定N/2次寄存器組,當進行點數較多(例1024點)的FFT計算時,處理器的控制將更加復雜,計算效率大大降低。表I
助記符_w__助記符__mm_
addr = ARnaddr = ARn
普通余A如
ARn = (ARn+IRm)mod(IRMm)ARn = (ARn-IRm)myd(!RMiii)
循環·
尋址
addr = ARnaddr = ARn
^ARn++(IRin)%l 如果循環超界_果循環超界
ARn = ARii-IRm-IRMm+l ^ARii-{IRm)%lARn = ARii-IRm+IRMm-l
如果循環農超界如果循環未超界
ARn = ARn +IRmARn=ARn-IRm
^ ARn++ 擴展 addr = ARnaddr =ARn
.. ^ 如果循環超界如栗循環超界
傭外 ^ARn-H-{IRm3%2 ARn = ARn-IRm-IRMm+2 *ARn-(IRm)%2ARn = ARn-IRm+IRMra-2
如果循環未超界如果循環未超界
ARn = ARii + IRmARii = ARii — Irm
addr = Al<naddr=Alln
如果循環超界如果循環超界
ψ ARn-H-( IRib) %4 ARn - ARn-IRm-IRMm+4 liiARji-(IRin)1MARn 二 ARn-IRm+IRMm-4
如果循環未起界如果閛環未超羿
ARn ^ ARii + IRmARn = ARn - Imi
如果循環超界 '' 如果循環超界
普通 addr = ARn+IRra-IRMmad4r ^ ARn-IRm+IRMm
ARn = ARn-TRm-IRMmARn = ARn-lRm+iRMm
*++ARn(IRni)0Zo ( ^ *--ARn(IRm)%, ,
如果循環宋超界如果循壞未超界
addr = AKn+lllmaddr = ARn-IRm
尋址 ARn = ARn-IRmARii = ARn - Iim
如果循環超界kmmm-fr
^4-4-A^n
addr - ARn+IRm-IRMm+1addr = ARn-IRm+IRMm-1
ARii 二 ARii-lRm-IRMm+lARn 二 ARn-iRm+lRMm-1
如果循壞未超界如果衛斗+超界
addr = ARn+IRinaddr 二 ARn-IRm
擴展 ARn = AKn~MRmAKn = ARn-Irm
極钚如果循環超界果循環超界
aAir = ARn+iRm-iRMin+2addr — ARn-!Rm+fRMm-2
,, ^ ARn = ARn-IRm-IRMm十2 .ARii =ARii-IRm+IRMm-2 尋址*++她_ )%2如果循環宋超界 *--ARn卿)%2 _循環宋超界
addr = ARn+IRmaddr = ARn-IRni
ARii = ARii + IRinARii = ARii-Irai
如果循壞超羿·如果循壞超界
addr = ARn+IRm-IRMm+4uddr = ARn-IRm+IRMra-4
m ARn = ARn- IRm-IRMm+4m 11 ARn = ARn-IRm+IRMm-4
s^ARn(IRm)0ZWARn{iRm)%4 t
' } 如果循環未超界} 如果循環+超界
addr = ARn+IRmaddr = ARn-IRm
ARn = ARn + IRtriARn = ARn - Irm表權利要求
1.一種面向通用處理器的FFT計算地址產生方法,其特征在于包括下述步驟I)優化FFT計算中蝶形運算操作數的選取順序每一級FFT計算都要選取N/2組操作數對進行蝶形運算,每次選取的操作數對表示為 (pt,qt),0 彡 t 彡 N/2-1 ;第M級FFT計算的操作數對從地址O開始選取,即Ptl = O ;Pt、Qt 兩足 Qt-Pt = 2m ;操作數的選取滿足公式2)擴展通用處理器的循環尋址模式增加循環超界地址加一、循環超界地址加二和循環超界地址加四;3)通用處理器通過擴展的循環尋址模式產生每一級FFT計算操作數的地址通用處理器進行第M級的N點FFT計算時都從地址O開始選取操作數對進行蝶形運算, 并按照偏移量為2m、循環界限為N-I的循環超界地址加一模式順序產生操作數地址。
全文摘要
本發明提供了一種面向通用處理器的FFT計算地址產生方法,首先優化FFT計算中蝶形運算操作數的選取順序,然后擴展通用處理器的循環尋址模式,最后通過擴展的循環尋址模式產生每一級FFT計算操作數的地址。本發明優化了FFT計算中蝶形運算操作數對的選取順序,擴展了通用處理器的循環尋址模式,使通用處理器可以連續、快速的產生FFT計算的操作數地址,提高了通用處理器進行所述復雜運算的執行效率,可應用于通用處理器的地址產生模塊。
文檔編號G06F9/34GK102929582SQ20121036393
公開日2013年2月13日 申請日期2012年9月26日 優先權日2012年9月26日
發明者楊靚, 于飛, 王丹 申請人:中國航天科技集團公司第九研究院第七七一研究所