專利名稱:一種低存儲器開銷的固定基fft處理器及其方法
技術(shù)領(lǐng)域:
本發(fā)明涉及無線通訊技術(shù)領(lǐng)域,特別是一種操作數(shù)無沖突生成的低存儲器開銷的固定基FFT處理器及其方法。
背景技術(shù):
當(dāng)FFT(快速傅立葉變換Fast Fourier Transformation)進行原位運算時,具有最小的存儲體開銷,如N點數(shù)據(jù)進行FFT,不考慮輸入輸出,則只需N字節(jié)存儲器。若考慮輸入輸出,常規(guī)架構(gòu)需要3N字節(jié)的存儲器,分別為輸入RAM,運算RAM,輸出RAM,這三個緩存存儲器一直輪換,即可以保證FFT進行連續(xù)運算,即每幀無間斷輸入輸出,該方法可以在FFT處理器內(nèi)部倍頻獲得高的數(shù)據(jù)吞吐量。
OFDM(正交頻分復(fù)用)是一種多載波調(diào)制,具有頻譜利用率高、抗多徑干擾與頻率選擇性衰減能力強等優(yōu)點,在無線通信中獲得了廣泛的應(yīng)用。無線局域網(wǎng)(WLAN)IEEE802.11a標準即采用OFDM作為物理層的調(diào)制和復(fù)用技術(shù)。
針對移動無線通信設(shè)備應(yīng)用,這里提出了一種低存儲器開銷,可以進行連續(xù)FFT處理的算法和相應(yīng)架構(gòu)。該算法的核心是操作數(shù)并行無沖突地址產(chǎn)生,以及緊湊壓縮存儲器讀寫時序,該架構(gòu)運算速度提高,并且只需要2N字節(jié)存儲器,相對于無優(yōu)化的3N字節(jié)存儲器,縮減為66.7%,采用該方法可以設(shè)計出低存儲器開銷(存儲器開銷指處理器內(nèi)部使用的SRAM存儲器的字節(jié)數(shù))的FFT處理器IP硬核,有利于減小SoC芯片面積。
操作數(shù)1965年,Cooley-Tukey兩位學(xué)者提出了FFT算法,順序輸入FFT處理器的數(shù)據(jù)經(jīng)抽取后,輸入蝶算單元進行復(fù)數(shù)乘法、累加,本說明書將輸入蝶算單元的數(shù)據(jù)稱為操作數(shù)。
存儲器交織架構(gòu)以及操作數(shù)無沖突生成輸入FFT處理器的數(shù)據(jù)均存儲在SRAM存儲器中,一個SRAM存儲器可以由多個存儲體構(gòu)成,存儲器對應(yīng)頁面地址,存儲體對應(yīng)塊地址,每個存儲體內(nèi)的地址稱為點地址(對于基-8FFT處理器,一個存儲器劃分為8個存儲體),通過以上劃分方法,得到存儲器交織架構(gòu),增大了存儲器的帶寬,即在一個時鐘周期可以并行讀取(或存儲)多個操作數(shù),如果不進行存儲器交織,一個時鐘周期只能并行讀取(或存儲)一個操作數(shù)。
發(fā)明內(nèi)容
本發(fā)明的目的在于提供一種低存儲器開銷的固定基FFT處理器及其方法。特別是一種操作數(shù)無沖突生成的低存儲器開銷的固定基FFT處理器及其方法。
這里提出的基8FFT架構(gòu)含有兩個SRAM存儲器(一種全同步、全靜態(tài)的隨機訪問存儲器),分別為I/O共享存儲器,F(xiàn)FT運算存儲器,每個存儲器都分為8塊存儲體,每個存儲體對應(yīng)一個塊地址,以十進制數(shù)表示為0,1,...,7。每個存儲體內(nèi)均有8個字節(jié),其地址定義為點地址,以十進制數(shù)表示為0,1,...,7。每個字節(jié)的地址由塊地址、點地址共同表征。對于每幀輸入的數(shù)據(jù),按時間序列進行標記,依次為0,1,2,...,63,輸入輸出共用一個6位累加寄存器IO_CNT_REG計數(shù),溢出值為111111。圖1中的輸入序列1寫入地址按照圖2.a進行譯碼,數(shù)據(jù)依次寫入I/O共享存儲器的8個存儲體中。輸入序列1寫入完成后,進行按頻域抽取FFT運算,采用下面的算法并行訪問存儲體。
一種操作數(shù)無沖突生成的低存儲器開銷的固定基FFT處理器,引入8個循環(huán)移位寄存器,并將存儲器劃分為8個存儲體,實現(xiàn)8個操作數(shù)并行訪問,同時對于每幀的輸入計數(shù)寄存器按幀交替按照大端、小端譯碼模式,實現(xiàn)本幀時域點輸入和上幀頻域點輸出共享同一存儲器,蝶算單元需要的8個操作數(shù)的地址由大端、小端譯碼模式產(chǎn)生,并且8個操作數(shù)分散在8個不同的存儲體中,可以并行訪問。
所述的操作數(shù)無沖突生成的低存儲器開銷的固定基FFT處理器,輸入序列以64點為單位交替按照大端、小端譯碼模式產(chǎn)生寫入地址,該地址與輸出序列完全一樣,可以實現(xiàn)輸入輸出共享同一存儲器。
所述的操作數(shù)無沖突生成的低存儲器開銷的固定基FFT處理器,輸入時域點順序,輸出時域點也為順序。
圖1是64點操作數(shù)地址生成及FFT數(shù)據(jù)流圖。
圖2是IO_CNT_REG譯碼模式示意圖。
圖3是SRAM訪問時序圖。
圖4是存儲器開銷對比示意圖。
圖5是對角線無沖突尋址模式示意圖。
圖6是操作數(shù)無沖突生成的低存儲器開銷的固定基FFT處理器內(nèi)部硬件結(jié)構(gòu)及工作步驟圖。
圖7是低存儲器開銷的固定基FFT處理器工作方法流程圖。
具體實施例方式
FFT處理器整體采用同步電路的經(jīng)典設(shè)計方法,即采用組合邏輯、時序邏輯電路實現(xiàn)所有的功能,組合邏輯包括地址譯碼,存儲器輪換的控制,蝶算,復(fù)數(shù)乘法等,時序邏輯在硬件上對應(yīng)D觸發(fā)器。
FFT運算模塊具有8個移位寄存器以遍歷所有的操作數(shù)(64個),該寄存器的位寬為6位,第一、二級FFT均完成8次蝶算,以J表示,J=000,001,...,111,對于每一個J,均有8個操作數(shù)并行輸入進行蝶算,這8個操作數(shù)需要放在不同的存儲體中,以并行讀取。同時,第一級蝶算按照間隔8抽取,第二級蝶算按照間隔1抽取,則移位寄存器中必須包含級數(shù)I的信息,在第一級,對于同一個J的3位二進制碼,置于移位寄存器的低三位,而8個操作數(shù)在蝶算單元輸入端的順序位(000-111)置于移位寄存器的高三位,則滿足了與同一個J對應(yīng)的蝶算單元中每一個操作數(shù)的抽取間隔為8;在第二級,對于同一個J的3位二進制碼,置于移位寄存器的高三位,而8個操作數(shù)在蝶算單元輸入端的順序位(000-111)置于移位寄存器的低三位,則滿足了與同一個J對應(yīng)的蝶算單元中每一個操作數(shù)的抽取間隔為1。因此,構(gòu)造一個循環(huán)移位寄存器,其譯碼用于遍歷各級的各個蝶算,每個蝶算單元并行輸入的8個操作數(shù)的地址可以由下面8個循環(huán)移位寄存器譯碼生成CIR_0_REG(8*J+000,3*I),CIR_1_REG(8*J+001,3*I),CIR_2_REG(8*J+010,3*I),CIR_3_REG(8*J+011,3*I),CIR_4_REG(8*J+100,3*I),CIR_5_REG(8*J+101,3*I),CIR_6_REG(8*J+110,3*I),CIR7_REG(8*J+111,3*I),J=000,001,...,111.I=1,0.(或者I=0,1).
I交替取1,0或者0,1,即對于第一幀數(shù)據(jù)FFT處理,I取1,0,對于第二幀,I取0,1,一直交替進行。式中8*J+xxx表示將J的二進制碼左移3位,然后低三位分別加上000,001,...,111。當(dāng)I=1時,循環(huán)左移3位,即高三位移入低三位,低三位移入高三位;當(dāng)I=0時,不移位。
8個循環(huán)移位寄存器的高三位與低三位輸入模8加法器,得到3位的塊地址(000-111),用以并行命中存儲器的8個存儲體,點地址為移位寄存器的高三位,譯碼方式與圖2.a相同,區(qū)別在于IO_CNT_REG僅是一個累加計數(shù)寄存器,沒有移位。
對圖2,大端譯碼模式在生成點地址時,點地址由IO_CNT_REG的高位譯碼生成。
小端譯碼模式在生成點地址時,點地址由IO_CNT_REG的低位譯碼生成。
對于輸入輸出,當(dāng)按照圖2.a大端譯碼模式進行譯碼時,第一、二級蝶算I分別取1,0,當(dāng)按照圖2.b小端譯碼模式進行譯碼時,第一、二級蝶算I分別取0,1。即CIR_0_REG,CIR_1_REG,......,CIR_7_REG的循環(huán)方式由IO_CNT_REG的譯碼方式?jīng)Q定。
若將同一塊地址對應(yīng)的8個字節(jié)看作一行,而將同一點地址對應(yīng)的8個字節(jié)看作一列,則對IO_CNT_REG按照圖2譯碼后,順序輸入輸出的數(shù)據(jù)在I/O共享存儲器的8個存儲體中具有與對角線平行的分布模式,如圖5所示。對8個循環(huán)移位寄存器進行譯碼,操作數(shù)地址在FFT運算存儲器的8個存儲體中也具有與對角線平行的分布模式。因此可以進行對角線存儲模式下的無沖突操作數(shù)并行訪問。
64點基-8FFT數(shù)據(jù)流如圖1所示,為清晰起見,第一級只畫了第一個基-8蝶算單元。采用按頻域抽取,即輸入序列1為順序時域點輸入,F(xiàn)FT原位運算完成后,相應(yīng)原位地址為按基8的倒序頻域點數(shù)據(jù)。如圖1中寬體下劃線標記所示,對于輸入序列1中的時域點5,IO_CNT_REG對應(yīng)的二進制碼為000101,按照圖2.a譯碼,塊地址與點地址分別為5,0,F(xiàn)FT運算完成后,該地址存放的數(shù)為輸出序列1中的頻域點40,二進制碼為101000,為IO_CNT_REG高三位與低三位交換后對應(yīng)的十進制數(shù)。
如果在讀出輸出序列1(第一幀輸入數(shù)據(jù)FFT運算結(jié)果)時,同時原位寫入輸入序列2(第二幀待FFT運算的數(shù)據(jù)),即可實現(xiàn)輸出輸入存儲器共享。在開始輸入序列2時,IO_CNT_REG從000000開始計數(shù),將IO_CNT_REG按照圖2.b譯碼,用作讀出輸出序列1的地址和寫入輸入序列2的地址,輸出序列1的頻域點即可按照順序方式依次讀出,而輸入序列2按照順序方式原位寫入。寫入后,對輸入序列2進行FFT運算。差別在于進行FFT運算時,輸入序列1對應(yīng)I=1,0,輸入序列2對應(yīng)I=0,1,輸入序列3對應(yīng)I=1,0,......,一直交替進行。按照上述算法,對于任一幀輸入數(shù)據(jù),均實現(xiàn)了FFT第一級運算按照間隔8抽取,F(xiàn)FT第二級運算按照間隔1抽取,輸入時域點與輸出頻域點均為順序。
設(shè)地址表示格式為(塊地址/點地址),對于輸入序列2的時域點20,21,22,23,24,25,26,27,按照圖2.b譯碼得到寫入地址分別為(6/4),(7/5),(0/6),(1/7),(3/0),(4/1),(5/2),(6/3),這些地址存儲的數(shù)據(jù)改寫前為輸出序列1的頻域點20,21,22,23,24,25,26,27,對應(yīng)關(guān)系如圖1中方框標記所示。
采用上述無沖突地址生成算法之后,即可緊湊壓縮存儲器讀寫時序。
表1 SRAM信號說明表(注32位包含操作數(shù)的實部,虛部)
本設(shè)計采用的SRAM存儲體信號說明見表1,其中CEN端連接塊地址譯碼結(jié)果,用以命中該存儲體。
訪問時序如圖3所示,當(dāng)?shù)刂酚行r,WEN為低,CLK上升沿時對D采樣,在延時Ta之后,數(shù)據(jù)DATA寫入該地址對應(yīng)的存儲單元,Q在Ta之后發(fā)生改變。因此在CLK上升沿,如果同時也對Q采樣,則可保證在地址ADD對應(yīng)的存儲單元寫入數(shù)據(jù)DATA前,該存儲單元上一時鐘上升沿讀出的數(shù)據(jù)已經(jīng)被采樣。采用上述方法后,輸入輸出存儲器共享,減小了存儲器開銷。這里提出的FFT處理器只需要2N字節(jié)存儲器,在存儲器開銷上節(jié)省了33.3%。
圖4.a為常規(guī)架構(gòu)存儲器開銷所需存儲器框圖。
圖4.b為本發(fā)明提出的架構(gòu)存儲器開銷,優(yōu)化算法后所需存儲器框圖。
圖5是對角線無沖突尋址模式示意圖,以J=0為例,第0,8,16,24,32,40,48,56點分布在存儲體0-7中,可以無沖突的并行讀出這8個操作數(shù)。
圖6是操作數(shù)無沖突生成的低存儲器開銷的固定基FFT處理器內(nèi)部硬件結(jié)構(gòu)及工作步驟。
低存儲器開銷的固定基FFT處理器由控制邏輯部件1、運算RAM存儲器2、網(wǎng)絡(luò)3、蝶算單元4、旋轉(zhuǎn)因子復(fù)數(shù)乘法單元5、旋轉(zhuǎn)因子ROM6、I/O共享RAM存儲器7組成,控制邏輯部件1控制運算RAM存儲器2、蝶算單元4、旋轉(zhuǎn)因子ROM6以及I/O共享RAM存儲器7。運算RAM存儲器2通過網(wǎng)絡(luò)3連接于蝶算單元4和旋轉(zhuǎn)因子復(fù)數(shù)乘法單元5。旋轉(zhuǎn)因子復(fù)數(shù)乘法單元5連接于旋轉(zhuǎn)因子ROM6。
控制邏輯部件1主要包括特殊功能寄存器堆,包括用于存儲器輪換的計數(shù)器以及輪換標志位生成邏輯,用于并行讀取操作數(shù)尋址的循環(huán)移位寄存器以及譯碼邏輯,用于輸入、輸出的地址寄存器以及譯碼邏輯,控制邏輯部件1采用VerilogHDL語言描述,并采用電子輔助設(shè)計軟件綜合生成網(wǎng)表(含邏輯門和連線)。
蝶算單元4進行操作數(shù)的復(fù)數(shù)乘法、累加運算,采用的基-8 FFT運算矩陣。矩陣運算的復(fù)數(shù)乘法完全采用移位、累加完成,也由VerilogHDL語言描述,并采用電子輔助設(shè)計軟件綜合生成網(wǎng)表(含邏輯門和連線)。
RAM存儲器為芯片代工廠商提供的全靜態(tài)、全同步的SRAM硬核,由Memory Compiler電子輔助設(shè)計工具生成,作為現(xiàn)成的硬核嵌入到FFT處理器芯片中。
圖7是低存儲器開銷的固定基FFT處理器的工作方法流程,其步驟如下一種操作數(shù)無沖突生成的低存儲器開銷的固定基FFT處理器的工作方法,其步驟如下步驟1,F(xiàn)FT處理器初始化完成,進入工作狀態(tài),當(dāng)?shù)谝粠瑫r域(奇數(shù)幀)數(shù)據(jù)輸入時,按照大端譯碼模式生成塊地址和點地址,輸入第一幀時域數(shù)據(jù)串行寫入I/O共享存儲器;步驟2,第一幀時域數(shù)據(jù)寫入完成后,I/O存儲器輪換成為運算存儲器,F(xiàn)FT處理器從寫滿第一幀時域數(shù)據(jù)的運算存儲器中并行讀取操作數(shù);步驟3,運算存儲器讀出的數(shù)據(jù)經(jīng)過對準網(wǎng)絡(luò)進入蝶算單元;步驟4,蝶算單元處理后的數(shù)據(jù)進入復(fù)數(shù)乘法單元;步驟5,經(jīng)過復(fù)數(shù)乘法運算后的數(shù)據(jù)通過數(shù)據(jù)對準網(wǎng)絡(luò)再原位寫回運算存儲器;步驟6,步驟2到步驟5的過程要反復(fù)若干次,直到FFT運算完成,每一次運算從運算存儲器中抽取操作數(shù)的地址由控制邏輯部件(1)產(chǎn)生;步驟7,在FFT運算的同時,第二幀時域(偶數(shù)幀)數(shù)據(jù)輸入I/O存儲器;步驟8,第一幀時域數(shù)據(jù)FFT運算完成后,運算存儲器輪換為I/O共享存儲器,I/O存儲器輪換為運算存儲器,此時,開始第二幀時域數(shù)據(jù)的FFT運算,同時,第一幀頻域數(shù)據(jù)開始輸出,第三幀時域數(shù)據(jù)(奇數(shù)幀)數(shù)據(jù)開始寫入,兩者共享I/O存儲器。
以上過程一直進行下去,運算與輸入輸出同時進行,從而獲得了連續(xù)流處理的性能,并且存儲器開銷得到了減小。
權(quán)利要求
1,一種操作數(shù)無沖突生成的低存儲器開銷的固定基FFT處理器,其特征為,引入8個循環(huán)移位寄存器,并將存儲器劃分為8個存儲體,實現(xiàn)8個操作數(shù)并行訪問,同時對于每幀的輸入計數(shù)寄存器按幀交替按照大端、小端譯碼模式,實現(xiàn)本幀時域點輸入和上幀頻域點輸出共享同一存儲器,蝶算單元需要的8個操作數(shù)的地址由大端、小端譯碼模式產(chǎn)生,并且8個操作數(shù)分散在8個不同的存儲體中,可以并行訪問。
2,根據(jù)權(quán)利要求1所述的操作數(shù)無沖突生成的低存儲器開銷的固定基FFT處理器,其特征在于,輸入序列以64點為單位交替按照大端、小端譯碼模式產(chǎn)生寫入地址,該地址與輸出序列完全一樣,可以實現(xiàn)輸入輸出共享同一存儲器。
3,根據(jù)權(quán)利要求2所述的操作數(shù)無沖突生成的低存儲器開銷的固定基FFT處理器,其特征在于,輸入時域點順序,輸出時域點也為順序。
4,根據(jù)權(quán)利要求1所述的操作數(shù)無沖突生成的低存儲器開銷的固定基FFT處理器,其特征在于,低存儲器開銷的固定基FFT處理器由控制邏輯部件(1)、運算RAM存儲器(2)、網(wǎng)絡(luò)(3)、蝶算單元(4)、旋轉(zhuǎn)因子復(fù)數(shù)乘法單元(5)、旋轉(zhuǎn)因子ROM(6)、I/O共享RAM存儲器(7)組成,控制邏輯部件(1)控制運算RAM存儲器(2)、蝶算單元(4)、旋轉(zhuǎn)因子ROM(6)以及I/O共享RAM存儲器(7),運算RAM存儲器(2)通過網(wǎng)絡(luò)(3)連接于蝶算單元(4)和旋轉(zhuǎn)因子復(fù)數(shù)乘法單元(5),旋轉(zhuǎn)因子復(fù)數(shù)乘法單元(5)連接于旋轉(zhuǎn)因子ROM(6)。
5,一種操作數(shù)無沖突生成的低存儲器開銷的固定基FFT處理器的工作方法,采用基-8FFT算法,引入8個循環(huán)移位寄存器,并將存儲器劃分為8個存儲體,實現(xiàn)8個操作數(shù)并行訪問,同時對于每幀的輸入計數(shù)寄存器按幀交替按照大端、小端譯碼模式,實現(xiàn)本幀時域點輸入和上幀頻域點輸出共享同一存儲器,其步驟如下步驟1,F(xiàn)FT處理器初始化完成,進入工作狀態(tài),當(dāng)?shù)谝粠瑫r域數(shù)據(jù)輸入時,按照大端譯碼模式生成塊地址和點地址,輸入第一幀時域數(shù)據(jù)串行寫入I/O共享存儲器;步驟2,第一幀時域數(shù)據(jù)寫入完成后,I/O存儲器輪換成為運算存儲器,F(xiàn)FT處理器從寫滿第一幀時域數(shù)據(jù)的運算存儲器中并行讀取操作數(shù);步驟3,運算存儲器讀出的數(shù)據(jù)經(jīng)過對準網(wǎng)絡(luò)進入蝶算單元;步驟4,蝶算單元處理后的數(shù)據(jù)進入復(fù)數(shù)乘法單元;步驟5,經(jīng)過復(fù)數(shù)乘法運算后的數(shù)據(jù)通過數(shù)據(jù)對準網(wǎng)絡(luò)再原位寫回運算存儲器;步驟6,步驟2到步驟5的過程要反復(fù)若干次,直到FFT運算完成,每一次運算從運算存儲器中抽取操作數(shù)的地址由控制邏輯部件(1)產(chǎn)生;步驟7,在FFT運算的同時,第二幀時域數(shù)據(jù)輸入I/O存儲器;步驟8,第一幀時域數(shù)據(jù)FFT運算完成后,運算存儲器輪換為I/O共享存儲器,I/O存儲器輪換為運算存儲器,此時,開始第二幀時域數(shù)據(jù)的FFT運算,同時,第一幀頻域數(shù)據(jù)開始輸出,第三幀時域數(shù)據(jù)數(shù)據(jù)開始寫入,兩者共享I/O存儲器。以上過程一直進行下去,運算與輸入輸出同時進行,從而獲得了連續(xù)流處理的性能,并且存儲器開銷得到了減小。
全文摘要
本發(fā)明涉及無線通訊技術(shù)領(lǐng)域,特別是一種操作數(shù)無沖突生成的低存儲器開銷的固定基FFT處理器及其方法。引入8個循環(huán)移位寄存器,將存儲器劃分為8個存儲體,8個操作數(shù)并行訪問,同時對于每幀的輸入計數(shù)寄存器按幀交替按照大端、小端譯碼模式,實現(xiàn)本幀時域點輸入和上幀頻域點輸出共享同一存儲器,蝶算單元需要的8個操作數(shù)的地址由大端、小端譯碼模式產(chǎn)生,并且8個操作數(shù)分散在8個不同的存儲體中,可以并行訪問。步驟如下FFT處理器初始化完成;第一幀時域數(shù)據(jù)并行讀取操作數(shù);運算存儲器的數(shù)據(jù)進入蝶算單元;蝶算單元的數(shù)據(jù)進入復(fù)數(shù)乘法單元;第二幀時域數(shù)據(jù)輸入I/O存儲器;第三幀時域數(shù)據(jù)數(shù)據(jù)寫入,兩者共享I/O存儲器。
文檔編號H04L27/26GK101082906SQ200610012048
公開日2007年12月5日 申請日期2006年5月31日 優(yōu)先權(quán)日2006年5月31日
發(fā)明者王江, 黑勇, 仇玉林 申請人:中國科學(xué)院微電子研究所