一種基于二維fft處理器的行轉(zhuǎn)置架構(gòu)設(shè)計(jì)方法
【專利摘要】本發(fā)明公開了一種二維FFT處理器的行轉(zhuǎn)置架構(gòu),具有以下特點(diǎn):FFT處理器包含片上行轉(zhuǎn)置存儲(chǔ)器,用于保存圖像行變換結(jié)果。當(dāng)行變換結(jié)果超過該片上存儲(chǔ)器容量時(shí),每行變換結(jié)果的前2k個(gè)數(shù)據(jù)寫入片上行轉(zhuǎn)置存儲(chǔ)器,剩余數(shù)據(jù)寫入片外SDRAM,k根據(jù)行變換結(jié)果和片上行轉(zhuǎn)置存儲(chǔ)器容量計(jì)算得到。此時(shí),將片上行轉(zhuǎn)置存儲(chǔ)器一分為二,記為存儲(chǔ)器A、B,用于保存行變換部分結(jié)果以及暫存片外SDRAM讀出數(shù)據(jù)。在從存儲(chǔ)器A或B逐列讀出數(shù)據(jù)進(jìn)行FFT列變換的同時(shí),采用行突發(fā)方式訪問SDRAM,并將數(shù)據(jù)輪流寫入被讀空的存儲(chǔ)器A或B。這樣A和B乒乓切換,循環(huán)往復(fù),直到讀空SDRAM。采用這種行轉(zhuǎn)置架構(gòu),能夠顯著降低SDRAM的跨行訪問次數(shù),提高二維FFT執(zhí)行速度。
【專利說明】
-種基于二維FFT處理器的行轉(zhuǎn)置架構(gòu)設(shè)計(jì)方法
技術(shù)領(lǐng)域
[0001] 本發(fā)明屬于數(shù)字信號(hào)處理領(lǐng)域,更具體地,設(shè)及一種基于二維FFT處理器的行轉(zhuǎn)置 架構(gòu)設(shè)計(jì)方法,適用于流水線架構(gòu)的FFT內(nèi)核,能滿足星載雷達(dá)成像系統(tǒng)對(duì)FFT的速度等性 能要求。
【背景技術(shù)】
[0002] FFT變換廣泛應(yīng)用于圖像處理、無線通信、語音識(shí)別、頻譜分析、雷達(dá)處理、遙感遙 測和地質(zhì)勘探等多個(gè)領(lǐng)域。在一維信號(hào)處理中,各種高效的FFT算法相繼被提出,對(duì)于2的整 數(shù)次幕的點(diǎn)數(shù)處理,可W通過Cooley-T址ey算法、Sander-I'址ey算法、分裂基算法等算法來 實(shí)現(xiàn)。而對(duì)于非2的整數(shù)次幕的點(diǎn)數(shù)處理,可W采用Good-Thomas素因子算法、Winograd嵌套 算法等算法來實(shí)現(xiàn)。而在二維信號(hào)處理中,主要通過行列分解算法W及矢量基算法來實(shí)現(xiàn)。
[0003] 矢量基算法是直接將二維陣列當(dāng)成一維序列處理的,通過將NXN點(diǎn)數(shù)據(jù)分解為多 個(gè)獨(dú)立的小點(diǎn)數(shù)單元,對(duì)蝶形操作數(shù)進(jìn)行并行存取,只用了一個(gè)矢量基2 X 2蝶形運(yùn)算硬件 單元實(shí)現(xiàn)了 2D-FFT。相比于傳統(tǒng)行列分解方法極大地節(jié)省了硬件資源,同時(shí)提高了計(jì)算速 度。它對(duì)于小規(guī)模數(shù)據(jù)陣列時(shí)可W有效減少計(jì)算量,但對(duì)于大規(guī)模數(shù)據(jù)陣列就顯得力不從 屯、,比如說8192 X 8192規(guī)模的二維FFT計(jì)算,數(shù)據(jù)控制流程復(fù)雜,并且對(duì)于片上存儲(chǔ)器的要 求很高。
[0004] 相對(duì)于矢量基算法,行列分解算法應(yīng)用得更為廣泛和成熟,行列分解算法主要是 在一維FFT算法基礎(chǔ)上,先將二維陣列中每一行進(jìn)行FFT計(jì)算,得到的二維陣列中間結(jié)果;在 列方向,再將每一列進(jìn)行FFT計(jì)算,所有列都計(jì)算完成得到的結(jié)果就是最后的二維FFT結(jié)果。 將二維陣列的FFT計(jì)算分解為多次一維FFT計(jì)算,不僅簡化數(shù)據(jù)流圖,而且在片上降低存儲(chǔ) 器的容量,有利于化SI設(shè)計(jì)實(shí)現(xiàn)和縮小娃片面積。本發(fā)明專利的實(shí)施例就是采用的行列分 解算法。
[0005] 目前大規(guī)模數(shù)據(jù)陣列的行轉(zhuǎn)置主要有兩種方法實(shí)現(xiàn):第一種是采用轉(zhuǎn)置存儲(chǔ)器的 方法,對(duì)采用的存儲(chǔ)器進(jìn)行硬件操作,即對(duì)行變換后的二維陣列結(jié)果所存放的處理模塊進(jìn) 行行列變換,對(duì)存儲(chǔ)器的讀取方式進(jìn)行變換;第二種是將行變換后的二維陣列結(jié)果按照轉(zhuǎn) 置地址寫入存儲(chǔ)器,之后順序地址依次讀出即可。
[0006] 其中轉(zhuǎn)置存儲(chǔ)器來實(shí)現(xiàn)圖像轉(zhuǎn)置的方法主要有輸入輸出平衡法、矩陣分塊法、行 進(jìn)列出法、兩頁式或S頁式轉(zhuǎn)置法。其中實(shí)現(xiàn)FFT的行變換結(jié)果轉(zhuǎn)置的方法主要是行進(jìn)列出 法W及矩陣分塊法。行進(jìn)列出法主要是將二維行變換后的數(shù)據(jù)按行方向連續(xù)地存入片外 SDRAM,在列方向連續(xù)地讀出一列數(shù)據(jù),最壞的情況是每取一個(gè)列數(shù)據(jù)就要進(jìn)行行激活,需 要耗費(fèi)若干時(shí)鐘周期,降低對(duì)片外SDRAM的訪問效率;而矩陣分塊法方法略好于行進(jìn)列出 法,主要是將二維數(shù)據(jù)按行分段存儲(chǔ)到片外SDRAM,即將二維數(shù)據(jù)中的一行存到片外SDRAM 的區(qū)域塊中,運(yùn)樣分塊存儲(chǔ),列數(shù)據(jù)雖然不是連續(xù)存放在SDRAM中的同一行,但是SDRAM中的 一行總會(huì)有若干同列數(shù)據(jù),因此對(duì)其只需要通過地址變換就可W讀取了。避免行激活的額 外開銷,提高了對(duì)片外SDRAM的訪問效率。本發(fā)明專利中行轉(zhuǎn)置架構(gòu)充分利用片上存儲(chǔ)器, 轉(zhuǎn)置操作都在片上進(jìn)行;從片外SDRAM讀取行變換后的數(shù)據(jù)都是采用突發(fā)讀取SDRAM中一行 數(shù)據(jù)到片上存儲(chǔ)器,跨行的情況比矩陣分塊法方法還少,片外SDRAM的訪問效率也就相對(duì)更 局。
【發(fā)明內(nèi)容】
[0007]針對(duì)現(xiàn)有技術(shù)的W上缺陷或改進(jìn)需求,本發(fā)明提供了一種基于二維FFT處理器的 行轉(zhuǎn)置架構(gòu)設(shè)計(jì),其目的在于結(jié)合硬件實(shí)現(xiàn)速度快、并行執(zhí)行、存儲(chǔ)資源有限等特點(diǎn)實(shí)現(xiàn)二 維行變換結(jié)果的轉(zhuǎn)置功能,由此解決訪問外部SDRAM效率過低的技術(shù)問題。
[000引為了實(shí)現(xiàn)上述目的,本發(fā)明提供了一種基于二維FFT處理器的行轉(zhuǎn)置架構(gòu)設(shè)計(jì)方 法,包括W下步驟:
[0009] S1、根據(jù)行變換后的二維陣列行列數(shù)大小,判斷是否需要片外SDRAM協(xié)同工作:行 變換后的二維陣列的大小為M*N,其中M是行數(shù),N是列數(shù),片上存儲(chǔ)器的存儲(chǔ)單元有S個(gè);若 M*N>s,則執(zhí)行步驟S2;若M*N《s,則執(zhí)行步驟S3;其中^s需要大于行變換后的圖像數(shù)據(jù)的 最大行數(shù)M;
[0010] S2、片上存儲(chǔ)器與片外SDRAM協(xié)同工作完成行轉(zhuǎn)置功能:包括如下子步驟:
[0011] (S2a)將片上的存儲(chǔ)器一分為二,其中每一份的存儲(chǔ)單元都有!S個(gè),分別記為A與 B;
[0012] (S2b)將行變換后的結(jié)果串行寫入存儲(chǔ)器,將其中一行前k個(gè)數(shù)據(jù),按照順序依次 存放到存儲(chǔ)器A,然后將該行接下來的k個(gè)數(shù)據(jù)順序?qū)懭隑,最后將該行剩下的(N-化)個(gè)數(shù)據(jù) 寫入片外SDRAM;運(yùn)樣將行變換后的二維結(jié)果中的一行完整地寫入存儲(chǔ)器A,BW及片外 SDRAM中,重復(fù)該操作,直到將所有行的數(shù)據(jù)全部順序地存放在存儲(chǔ)器A,BW及SDRAM中;其
4 k是一個(gè)取整的數(shù);
[OuiJ」作ZC)在步驟(S化)中寫完存儲(chǔ)器A后,按照轉(zhuǎn)置地址來讀取存儲(chǔ)器A中數(shù)據(jù),每次 讀出M個(gè)數(shù)據(jù)送到FFT內(nèi)核進(jìn)行列變換,直到讀空存儲(chǔ)器A;
[0014] (S2d)按照(S2c)的步驟,按照轉(zhuǎn)置地址讀取存儲(chǔ)器B中數(shù)據(jù),每次讀出M個(gè)數(shù)據(jù)送 到FFT內(nèi)核進(jìn)行列變換;同時(shí)并行執(zhí)行從SDRAM突發(fā)讀數(shù)據(jù)到存儲(chǔ)器A,按照順序突發(fā)方式讀 取一行的前X數(shù)據(jù)存到存儲(chǔ)器A;循環(huán)執(zhí)行,直到將SDRAM中行變換后的矩陣的前X列數(shù)據(jù)全 部寫到存儲(chǔ)器A;其中X的大小為:
[0015]
12 其中n是指第n次從片外SDRAM讀取數(shù)據(jù)到片上存儲(chǔ)器; 2 (S2e)當(dāng)存儲(chǔ)器A寫滿時(shí),存儲(chǔ)器B肯定早已讀空,運(yùn)時(shí)需要進(jìn)行交替處理;將(S2d) 步驟中的執(zhí)行對(duì)象顛倒過來,在按照轉(zhuǎn)置地址讀取存儲(chǔ)器A中數(shù)據(jù)的同時(shí),并行執(zhí)行從 SDRAM突發(fā)讀數(shù)據(jù)到存儲(chǔ)器B中,按步驟(S2d)的方法同時(shí)執(zhí)行讀存儲(chǔ)器A和寫存儲(chǔ)器B的操 作,直到A讀空B寫滿,再替換執(zhí)行對(duì)象;運(yùn)樣重復(fù)操作,直到第m次從片外SDRAM讀取數(shù)據(jù)到 片上存儲(chǔ)器時(shí)(其中m滿盾
將最后剩余的N-(m+l)*k列數(shù)據(jù)突發(fā)讀出來,讀空 SDRAM;
[0018] S3、只在片上存儲(chǔ)器中實(shí)現(xiàn)行轉(zhuǎn)置的功能;
[0019] 將二維行變換后的結(jié)果串行寫入存儲(chǔ)器A,B中,將其中每行的前個(gè)數(shù)據(jù)緩存到 存儲(chǔ)器A,后^ N個(gè)數(shù)據(jù)緩存到存儲(chǔ)器B,共緩存M行;
[0020] 在進(jìn)行讀操作時(shí),按照轉(zhuǎn)置地址讀取存儲(chǔ)器A中數(shù)據(jù),每次讀出M個(gè)數(shù)據(jù)送至FFT內(nèi) 核進(jìn)行列變換;當(dāng)讀空存儲(chǔ)器A后,再按照相同的方式讀存儲(chǔ)器B,直到將B也讀空。
[0021] 所述步驟Sl中,根據(jù)行變換后的圖像數(shù)據(jù)M*NW及片上存儲(chǔ)器的存儲(chǔ)容量S之間的 大小關(guān)系,采用不同方式來實(shí)現(xiàn)行轉(zhuǎn)置的功能,具體情況如下:
[0022] (1)若M*N<s,只用片上存儲(chǔ)器就可W完成行轉(zhuǎn)置功能;
[0023] (2)若M*N>s,需要片上存儲(chǔ)器與片外SDRAM協(xié)同工作完成行轉(zhuǎn)置的功能。
[0024] 所述步驟(S2b)中,對(duì)于行變換后圖像數(shù)據(jù)M*N大于片上存儲(chǔ)器的存儲(chǔ)容量S的情 況,將片上存儲(chǔ)器一分為二,其寫操作按W下方式進(jìn)行:
[0025] 二維行變換后生成的陣列數(shù)據(jù)M*N串行寫入片上存儲(chǔ)器與片外SDRAM中,將其中一 行的前k個(gè)數(shù)據(jù)按順序依次寫入片上存儲(chǔ)器A,再把該行接下來的k個(gè)數(shù)據(jù)按順序依次寫入 片上存儲(chǔ)器B,最后把該行剩下的N-化個(gè)數(shù)據(jù)按順序依次寫入片外SDRAM;運(yùn)樣把行變換輸 出結(jié)果的M行按上述步驟分別寫入片上存儲(chǔ)器與片外SDRAM,其中M*化的圖像像素存儲(chǔ)在片 上,后M*(N-化)的圖像像素存儲(chǔ)在片外SDRAM中。
[0026] 所述步驟(S2c)中對(duì)于行變換后圖像數(shù)據(jù)M*N大于片上存儲(chǔ)器的存儲(chǔ)容量S的情 況,其按轉(zhuǎn)置地址讀出存儲(chǔ)器A與B中數(shù)據(jù)的實(shí)現(xiàn)方式:
[0027] 在存儲(chǔ)器A或B寫滿后,先從存儲(chǔ)器中讀出第一個(gè)數(shù)據(jù),然后每隔k個(gè)地址處再讀出 存儲(chǔ)器中的一個(gè)數(shù)據(jù),運(yùn)樣重復(fù)M次,讀出行變換后生成的二維數(shù)據(jù)的第一列送到FFT內(nèi)核 中進(jìn)行列變換;再從存儲(chǔ)器中讀出第二個(gè)數(shù)據(jù),然后每隔k個(gè)地址讀出存儲(chǔ)器中的一個(gè)數(shù) 據(jù),也重復(fù)M次,運(yùn)樣讀出第二列數(shù)據(jù),并將其送到FFT內(nèi)核中進(jìn)行列變換;依次類推,直到將 存儲(chǔ)器讀空為止;當(dāng)最后一次從片外SDRAM讀出數(shù)據(jù)到片上存儲(chǔ)器,將片外SDRAM最后剩下 的N-(m+l)*k列數(shù)據(jù)全部寫到片上存儲(chǔ)器,運(yùn)時(shí)就應(yīng)該間隔N-(m+l)*k個(gè)數(shù)據(jù)讀出一列,其 它操作相同。
[0028] 所述步驟(S2c)中對(duì)于行變換后的二維數(shù)據(jù)M*N大于片上存儲(chǔ)器的存儲(chǔ)容量S的情 況,其按照順序突發(fā)方式讀出片外SDRAM中數(shù)據(jù)存到片上存儲(chǔ)器的實(shí)現(xiàn)方式:
[0029] 存儲(chǔ)器A讀空后,在讀取存儲(chǔ)器B的數(shù)據(jù)到FFT內(nèi)核進(jìn)行列變換時(shí),需要并行執(zhí)行從 片外SDRAM讀取數(shù)據(jù)到存儲(chǔ)器A;當(dāng)?shù)谝淮螐腟DRAM中讀取數(shù)據(jù)時(shí),先從開始的位置按順序依 次讀取k個(gè)數(shù)據(jù)存放在片上存儲(chǔ)器A,然后在間隔最后讀出數(shù)據(jù)的位置后的N-3k處,再按順 序依次讀取k個(gè)數(shù)據(jù)存放在存儲(chǔ)器A,之后又一次在間隔N-3k處讀取k個(gè)數(shù)據(jù)存放在存儲(chǔ)器 A,運(yùn)樣重復(fù)M次,直到將M*k個(gè)數(shù)據(jù)全部寫到存儲(chǔ)器A;同樣地,當(dāng)?shù)趒次從SDRAM中讀取數(shù)據(jù) 時(shí),從距離開頭(q-l)k處按順序依次讀取k個(gè)數(shù)據(jù)存放在存儲(chǔ)器A,然后在間隔最后讀出數(shù) 據(jù)的位置后的N-3k處,再按順序依次讀取k個(gè)數(shù)據(jù),運(yùn)樣突發(fā)讀取M次,將M*k個(gè)數(shù)據(jù)到存儲(chǔ) 器A;
[0030] 當(dāng)?shù)趒i次從片外SDRAM突發(fā)讀取數(shù)據(jù)到片上存儲(chǔ)器時(shí),此時(shí)qi滿足:
運(yùn)也是最后一次從片外SDRAM讀取數(shù)據(jù)到片上存儲(chǔ)器中;按順序的方式從距離開頭(qi-1)* k處讀取N-(qi+l)*k個(gè)數(shù)據(jù),然后在間隔最后讀出數(shù)據(jù)的位置后的(qi-l)*k處,再按順序依 次讀取N-(qi+l)k個(gè)數(shù)據(jù)存放在片上存儲(chǔ)器,接著還是在間隔(qi-l)*k處按順序依次讀取N- (qi+l)*k個(gè)數(shù)據(jù)存放在片上存儲(chǔ)器,運(yùn)樣突發(fā)讀取M次,此時(shí)SDRAM中的行變換結(jié)果就全部 讀空了。
[0031] 所述步驟(S2e),對(duì)于行變換后的圖像數(shù)據(jù)M*N大于片上存儲(chǔ)器的存儲(chǔ)容量S的情 況,當(dāng)按照轉(zhuǎn)置地址讀取某一片上存儲(chǔ)器的數(shù)據(jù)時(shí),比如存儲(chǔ)器A,每次讀出M個(gè)數(shù)據(jù)送到 FFT內(nèi)核進(jìn)行列變換,同時(shí)并行執(zhí)行從SDRAM按順序突發(fā)讀數(shù)據(jù)到存儲(chǔ)器B中;由于讀取 SDRAM中的數(shù)據(jù)總會(huì)存在跨行讀取的情況,因此需要幾個(gè)時(shí)鐘周期來激活,運(yùn)樣在存儲(chǔ)器A 讀空時(shí),B存儲(chǔ)器還沒有填滿,運(yùn)時(shí)需要等待存儲(chǔ)器B填滿,才能交換執(zhí)行對(duì)象。
【附圖說明】
[0032] 圖1為本發(fā)明設(shè)計(jì)的硬件結(jié)構(gòu)簡圖;
[0033] 圖2為行變換結(jié)果存儲(chǔ)示意圖;
[0034] 圖3為片上存儲(chǔ)器存放數(shù)據(jù)示意圖;
[0035] 圖4為片外SDRAM存放數(shù)據(jù)示意圖;
[0036] 圖5為片上存儲(chǔ)器讀取數(shù)據(jù)示意圖;
[0037] 圖6為片外SDRAM讀取數(shù)據(jù)示意圖;
[003引圖7為寫RAM邏輯控制1狀態(tài)機(jī)示意圖;
[0039] 圖8為寫RAM邏輯控制2狀態(tài)機(jī)示意圖;
[0040] 圖9為讀RAM控制邏輯狀態(tài)機(jī)示意圖;
[0041 ]圖10為EMIF讀寫控制邏輯狀態(tài)機(jī)示意圖。
【具體實(shí)施方式】
[0042] 為了使本發(fā)明的目的、技術(shù)方案及優(yōu)點(diǎn)更加清楚明白,W下結(jié)合附圖及實(shí)施例,對(duì) 本發(fā)明進(jìn)行進(jìn)一步詳細(xì)說明。應(yīng)當(dāng)理解,此處所描述的具體實(shí)施例僅僅用W解釋本發(fā)明,并 不用于限定本發(fā)明。此外,下面所描述的本發(fā)明各個(gè)實(shí)施方式中所設(shè)及到的技術(shù)特征只要 彼此之間未構(gòu)成沖突就可W相互組合。
[0043] 如圖1所示,本實(shí)施例中二維FFT處理器行轉(zhuǎn)置架構(gòu)主要包括FFT行變換結(jié)果的接 收控制邏輯、采用兵鳥緩存的的片上存儲(chǔ)器、用于緩存寫入SDRAM數(shù)據(jù)的FIFO、控制片外存 儲(chǔ)器SDRAM讀寫的片外存儲(chǔ)器擴(kuò)展接口 EMIFW及其讀寫控制邏輯W及針對(duì)片上存儲(chǔ)器的讀 寫控制邏輯。
[0044] 其中片上存儲(chǔ)器的總?cè)萘渴?192*15*64bits,采用兵鳥緩存結(jié)構(gòu),分為存儲(chǔ)器A和 存儲(chǔ)器B,每部分的存儲(chǔ)器容量由7片64*819化its的RASP和1片64*4096bits的RASP組成,并 采用統(tǒng)一尋址方式控制;用于緩存寫入SDRAM數(shù)據(jù)的FIFO是采用的128*64bit的雙端口 RFTP;寫RAM控制邏輯I的功能是將FFT行變換的部分結(jié)果寫入片上存儲(chǔ)器;寫RAM控制邏輯2 的功能是將FFT緩存到SDRAM的行變換結(jié)果讀入到片上存儲(chǔ)器;讀RAM的控制邏輯用來將RAM 中的行變換結(jié)果轉(zhuǎn)置輸出。
[0045] 如圖2、圖3與圖4所示,接收控制邏輯負(fù)責(zé)從FFT內(nèi)核輸出端接受行變換結(jié)果,然后 由寫RAM控制邏輯1和EMIF讀寫控制邏輯負(fù)責(zé)給片上存儲(chǔ)器與片外SDRAM寫入行變換結(jié)果。 將前2k列數(shù)據(jù)緩存在片上,后(N-2k)列數(shù)據(jù)緩存到片外,其中前k列數(shù)據(jù)緩存到存儲(chǔ)器A 中,后k列數(shù)據(jù)緩存到存儲(chǔ)器B中。如圖7中狀態(tài)機(jī)所示,描述的是寫RAM邏輯控制1將前2k列 數(shù)據(jù)緩存在片上的方式。其中CntCol是一個(gè)計(jì)數(shù)器,記錄輸入數(shù)據(jù)的個(gè)數(shù),k是輸入數(shù)據(jù)每 行中寫入片上存儲(chǔ)器的數(shù)據(jù)個(gè)數(shù)。化tRow記錄寫入片上存儲(chǔ)器的行數(shù)。
[0046] 如圖6,EMIF讀寫控制邏輯負(fù)責(zé)從片外SDRAM讀出數(shù)據(jù),寫RAM控制邏輯2負(fù)責(zé)將讀 出的數(shù)據(jù)寫入到片上存儲(chǔ)器中。當(dāng)?shù)谝淮螐钠釹DRAM讀出數(shù)據(jù)時(shí),按順序的方式從開始的 位置讀取k個(gè)數(shù)據(jù),并依次將其寫入片上存儲(chǔ)器,然后在間隔最后讀出數(shù)據(jù)的位置后的N- 3k處,按順序依次讀取k個(gè)數(shù)據(jù)存放在片上存儲(chǔ)器,接著還是在間隔N-3k處按順序依次讀 取k個(gè)數(shù)據(jù)存放在片上存儲(chǔ)器,運(yùn)樣重復(fù)M次才算完成一次從片外SDRAM讀數(shù)據(jù)到片上存儲(chǔ) 器。當(dāng)?shù)趒次從片外SDRAM讀出數(shù)據(jù),按順序的方式從距離開頭(q-l)*k處讀取k個(gè)數(shù)據(jù),并 依次將其寫入片上存儲(chǔ)器,然后在間隔最后讀出數(shù)據(jù)的位置后的N-3k處,按順序依次讀取 k個(gè)數(shù)據(jù)存放在片上存儲(chǔ)器,接著還是在間隔N-3k處按順序依次讀取k個(gè)數(shù)據(jù)存放在片上 存儲(chǔ)器,運(yùn)樣重復(fù)M次再結(jié)束。
[0047] 當(dāng)?shù)趒i次從片外SDRAM突發(fā)讀取數(shù)據(jù)到片上存儲(chǔ)器時(shí),此時(shí)qi滿足:k>N-(qi+l)k, 運(yùn)也是最后一次從片外SDRAM讀取數(shù)據(jù)到片上存儲(chǔ)器中。按順序的方式從距離開頭(qi- l)*k處讀取N-(qi+l)*k個(gè)數(shù)據(jù),然后在間隔最后讀出數(shù)據(jù)的位置后的(qi-l)*k處,按順序 依次讀取N-(qi+l)*k個(gè)數(shù)據(jù)存放在片上存儲(chǔ)器,接著還是在間隔(qi-l)*k處按順序依次 讀取N-(qi+1 )*k個(gè)數(shù)據(jù)存放在片上存儲(chǔ)器,運(yùn)樣重復(fù)M次再結(jié)束,此時(shí)SDRAM中的行變換結(jié) 果就全部讀空了。
[004引其具體實(shí)現(xiàn)的狀態(tài)機(jī)示意圖如圖8、圖10所示,EMIF讀寫控制邏輯負(fù)責(zé)從片外 SDRAM讀出數(shù)據(jù),寫RAM控制邏輯2負(fù)責(zé)將讀出的數(shù)據(jù)寫入到片上存儲(chǔ)器相對(duì)應(yīng)的兵鳥結(jié)構(gòu)。 圖8中,SD_W_REQ是寫RAM控制邏輯2向EMIF的讀寫控制邏輯發(fā)送的請(qǐng)求讀的信號(hào),SD_ W_ACK是EMIF的讀寫控制邏輯向?qū)慠AM控制邏輯2發(fā)送的握手響應(yīng)信號(hào)。當(dāng)EMIF的讀寫控制 邏輯檢測到寫RAM控制邏輯2的請(qǐng)求信號(hào),并且此時(shí)檢測到存儲(chǔ)器A空標(biāo)志時(shí),開始從SDRAM 中按上述方式讀出數(shù)據(jù)寫到A,當(dāng)寫滿A,設(shè)置A的滿標(biāo)志位,且檢測到存儲(chǔ)器B的空的標(biāo)志位 就開始按上述方式從SDRAM中讀出數(shù)據(jù)寫到B,當(dāng)B寫滿,就設(shè)置B的滿標(biāo)志。然后再檢測存儲(chǔ) 器A的空標(biāo)志,開始存儲(chǔ)器A的寫操作,W空標(biāo)志為每次寫存儲(chǔ)器的起始信號(hào)交替寫存儲(chǔ)器A 和存儲(chǔ)器B。另外,當(dāng)最后讀空SDRAM,設(shè)置正在寫入數(shù)據(jù)的片上存儲(chǔ)器滿標(biāo)志;寫存儲(chǔ)器的 地址是連續(xù)的。
[0049] 圖10中,EMIF在上電復(fù)位撤銷后首先要配置SDRAM,然后接收前級(jí)FIFO寫入的數(shù) 據(jù),W接收到帖起始為開始寫標(biāo)志,將數(shù)據(jù)按照順序地址寫入SDRAM,CNT是計(jì)數(shù)器用來記錄 寫入數(shù)據(jù)的個(gè)數(shù),接收完畢就等待寫RAM控制邏輯2產(chǎn)生的讀請(qǐng)求,在接收到請(qǐng)求信號(hào)后就 開始應(yīng)答,從SDRAM中讀數(shù)據(jù)并且輸出到片上存儲(chǔ)器A或存儲(chǔ)器B,讀地址如上所述。
[0050] 如圖5,讀RAM控制邏輯負(fù)責(zé)將片上存儲(chǔ)器的行變換結(jié)果轉(zhuǎn)置輸出。當(dāng)需要讀取儲(chǔ) 存器時(shí),先讀出第一個(gè)數(shù)據(jù),然后每隔k個(gè)地址再讀出存儲(chǔ)器中的一個(gè)數(shù)據(jù),運(yùn)樣重復(fù)M次, 讀出行變換后的二維數(shù)據(jù)的第一列進(jìn)行列變換;再從存儲(chǔ)器中讀出第二個(gè)數(shù)據(jù),然后每隔k 個(gè)地址讀出存儲(chǔ)器中的一個(gè)數(shù)據(jù),也重復(fù)M次,將讀出數(shù)據(jù)進(jìn)行列變換;依次類推,重復(fù)k次, 將存儲(chǔ)器的k列數(shù)據(jù)進(jìn)行列變換。運(yùn)里的片上存儲(chǔ)器是指的存儲(chǔ)器A或B中的任意一個(gè)。
[0051 ]當(dāng)最后一次從片外SDRAM讀取數(shù)據(jù)到片上存儲(chǔ)器,將SDRAM中的行變換結(jié)果全部寫 到片上存儲(chǔ)器后,其讀出儲(chǔ)存器方式如下:先讀出第一個(gè)數(shù)據(jù),然后每隔N-(qi+l)*k個(gè)地 址再讀出存儲(chǔ)器中的一個(gè)數(shù)據(jù),運(yùn)樣重復(fù)M次,讀出行變換后的二維數(shù)據(jù)的一列送到FFT內(nèi) 核進(jìn)行列變換;再從存儲(chǔ)器中讀出第二個(gè)數(shù)據(jù),然后每隔N-(qi+l)*k個(gè)地址讀出存儲(chǔ)器中 的一個(gè)數(shù)據(jù),也重復(fù)M次,將讀出數(shù)據(jù)進(jìn)行列變換,依次類推,重復(fù)N-(qi+l)次,將存儲(chǔ)器的 N-(qi+l)*k列數(shù)據(jù)全部送到FFT內(nèi)核進(jìn)行列變換。
[0052] 其具體實(shí)現(xiàn)的狀態(tài)機(jī)示意圖如圖9所示,其中Read^req是片外輸入的請(qǐng)求讀數(shù)據(jù) 的信號(hào),存儲(chǔ)器A和存儲(chǔ)器B各設(shè)置一個(gè)滿標(biāo)志位,每次檢測該位為高電平,就開始讀該存儲(chǔ) 器。存儲(chǔ)器讀是按照轉(zhuǎn)置地址進(jìn)行讀的,其方式如上所講。
[0053] 上面都是講述的行變換后的圖像數(shù)據(jù)M*N大于片上存儲(chǔ)器的存儲(chǔ)容量的情況,而 對(duì)于行變換后的圖像數(shù)據(jù)M*N小于片上存儲(chǔ)器的存儲(chǔ)容量時(shí),不需要用到片外SDRAM,所W 也無需啟動(dòng)EMIF讀寫控制邏輯,相對(duì)比較簡單,易于實(shí)現(xiàn)。
[0054] 本實(shí)施例中所設(shè)計(jì)的FFT內(nèi)核處理速度可W達(dá)到一個(gè)時(shí)鐘周期處理一個(gè)數(shù)據(jù),那 么提高FFT處理器速度的關(guān)鍵是如何提高行轉(zhuǎn)置的速度。轉(zhuǎn)置處理需要先將一帖圖像進(jìn)行 完整緩存然后再讀出,并且該圖像大小范圍變化很大,片上存儲(chǔ)器遠(yuǎn)遠(yuǎn)不能滿足存儲(chǔ)的需 求,采用存儲(chǔ)容量比較大的片外SDRAM存儲(chǔ)器,能有效地降低設(shè)計(jì)成本。但是由于SDRAM的行 激活預(yù)充電刷新的時(shí)間要求特性,從行激活指令有效到有效的讀寫指令,該行必須滿足 tRCD的時(shí)間延遲參數(shù)要求,而如果從SDRAM存儲(chǔ)器按照列地址進(jìn)行讀操作,送入SDRAM的地 址是不連續(xù)的,運(yùn)樣就造成在讀一列數(shù)據(jù)時(shí),SDRAM需要進(jìn)行多次行激活操作,從而使SDRAM 的讀速率非常低,造成FFT列變換速率的降低。而采用本發(fā)明設(shè)計(jì)的二維FFT處理器行轉(zhuǎn)置 架構(gòu),充分利用片上存儲(chǔ)器,轉(zhuǎn)置操作都在片上進(jìn)行,片外SDRAM的數(shù)據(jù)僅需要讀到片上存 儲(chǔ)器進(jìn)行緩存,然后按照轉(zhuǎn)置地址讀片上存儲(chǔ)器,運(yùn)樣片外SDRAM就可W連續(xù)突發(fā)讀取,跨 行讀取的情況大大降低了,F(xiàn)FT列變換速率也相應(yīng)的提高了。
[0055] 行轉(zhuǎn)置的最理想的情況是每個(gè)時(shí)鐘周期處理一個(gè)數(shù)據(jù),運(yùn)樣才能匹配FFT內(nèi)核的 處理速度,本設(shè)計(jì)的轉(zhuǎn)置速度與理想情況對(duì)比:假設(shè)SDRAM的每次跨行需要耗費(fèi)t個(gè)時(shí)鐘周 期進(jìn)行行激活W及預(yù)充電操作,本設(shè)計(jì)與理想情況下對(duì)比多出時(shí)間就是跨行讀的時(shí)間,W 轉(zhuǎn)置一個(gè)51巧512的圖像為例,片上存儲(chǔ)器可W緩存的列數(shù)L為240列,片外為272列,根據(jù)上 文提到的參數(shù)qi = 3次,也就是需要3次從SDRAM中讀取數(shù)據(jù)到片上存儲(chǔ)器才算完成一帖圖 像的轉(zhuǎn)置。其中SDRAM每個(gè)bank的列數(shù)設(shè)為1024,那么緩存到SDRAM占行數(shù)是136行。與理想 情況比較,耗費(fèi)的時(shí)間為136*3*t為408t,假設(shè)t為16個(gè)時(shí)鐘周期,耗費(fèi)的時(shí)間為6528個(gè)周 期,相較于理想情況整個(gè)轉(zhuǎn)置周期512*512*2為524288個(gè)周期,多出了 1.2%的時(shí)鐘周期,與 理想情況是很接近的。
[0056] 盡管本發(fā)明的內(nèi)容已經(jīng)通過上述實(shí)施例作了比較詳細(xì)介紹,但應(yīng)當(dāng)認(rèn)識(shí)到上述描 述不應(yīng)被認(rèn)為是對(duì)本發(fā)明的限制。本領(lǐng)域技術(shù)人員閱讀上述內(nèi)容后,本發(fā)明的多種修改和 替代都將是顯而易見的,因此,本發(fā)明的保護(hù)范圍應(yīng)由所附的權(quán)利要求的限定。
【主權(quán)項(xiàng)】
1. 一種基于二維FFT處理器的行轉(zhuǎn)置架構(gòu)設(shè)計(jì)方法,其特征在于,所述方法包含以下步 驟: 51、 根據(jù)行變換后的二維陣列行列數(shù)大小,判斷是否需要片外SDRAM協(xié)同工作:行變換 后的二維陣列的大小為M*N,其中M是行數(shù),N是列數(shù),片上存儲(chǔ)器的存儲(chǔ)單元有s個(gè);若M*N> s,則執(zhí)行步驟S2;若M*N彡s,則執(zhí)行步驟S3;其中^ s需要大于行變換后的圖像數(shù)據(jù)的最大 2 行數(shù)M; 52、 片上存儲(chǔ)器與片外SDRAM協(xié)同工作完成行轉(zhuǎn)置功能:包括如下子步驟: (S2a)將片上的存儲(chǔ)器一分為二,其中每一份的存儲(chǔ)單元都有4 S個(gè),分別記為A與B; .2 (S2b)將行變換后的結(jié)果串行寫入存儲(chǔ)器,將其中一行前k個(gè)數(shù)據(jù),按照順序依次存放 到存儲(chǔ)器A,然后將該行接下來的k個(gè)數(shù)據(jù)順序?qū)懭隑,最后將該行剩下的(N-2k)個(gè)數(shù)據(jù)寫入 片外SDRAM;這樣將行變換后的二維結(jié)果中的一行完整地寫入存儲(chǔ)器A,B以及片外SDRAM中, 重復(fù)該操作,直到將所有行的數(shù)據(jù)全部順序地存放在存儲(chǔ)器A,B以及SDRAM中;其中,k是一個(gè)取整的數(shù); (S2c)在步驟(S2b)中寫完存儲(chǔ)器A后,按照轉(zhuǎn)置地址來讀取存儲(chǔ)器A中數(shù)據(jù),每次讀出M 個(gè)數(shù)據(jù)送到FFT內(nèi)核進(jìn)行列變換,直到讀空存儲(chǔ)器A; (S2d)按照(S2c)的步驟,按照轉(zhuǎn)置地址讀取存儲(chǔ)器B中數(shù)據(jù),每次讀出M個(gè)數(shù)據(jù)送到FFT 內(nèi)核進(jìn)行列變換;同時(shí)并行執(zhí)行從SDRAM突發(fā)讀數(shù)據(jù)到存儲(chǔ)器A,按照順序突發(fā)方式讀取一 行的前X數(shù)據(jù)存到存儲(chǔ)器A;循環(huán)執(zhí)行,直到將SDRAM中行變換后的矩陣的前X列數(shù)據(jù)全部寫 到存儲(chǔ)器A;其中滿足的條件為:其中η是指第η次從片外SDRAM讀取數(shù)據(jù)到片上存儲(chǔ)器; (S2e)當(dāng)存儲(chǔ)器A寫滿時(shí),存儲(chǔ)器B肯定早已讀空,這時(shí)需要進(jìn)行交替處理;將(S2d)步驟 中的執(zhí)行對(duì)象顛倒過來,在按照轉(zhuǎn)置地址讀取存儲(chǔ)器A中數(shù)據(jù)的同時(shí),并行執(zhí)行從SDRAM突 發(fā)讀數(shù)據(jù)到存儲(chǔ)器B中,按步驟(S2d)的方法同時(shí)執(zhí)行讀存儲(chǔ)器A和寫存儲(chǔ)器B的操作,直到A 讀空B寫滿,再替換執(zhí)行對(duì)象;這樣重復(fù)操作,直到第m次從片外SDRAM讀取數(shù)據(jù)到片上存儲(chǔ) 器時(shí)(其中m滿,將最后剩余的N-(m+l)*k列數(shù)據(jù)突發(fā)讀出來,讀空SDRAM; 53、 只在片上存儲(chǔ)器中實(shí)現(xiàn)行轉(zhuǎn)置的功能; 將二維行變換后的結(jié)果串行寫入存儲(chǔ)器A,B中,將其中每行的前個(gè)數(shù)據(jù)緩存到存儲(chǔ) 上 器A,后^ N個(gè)數(shù)據(jù)緩存到存儲(chǔ)器B,共緩存M行; L 在進(jìn)行讀操作時(shí),按照轉(zhuǎn)置地址讀取存儲(chǔ)器A中數(shù)據(jù),每次讀出M個(gè)數(shù)據(jù)送至FFT內(nèi)核進(jìn) 行列變換;當(dāng)讀空存儲(chǔ)器A后,再按照相同的方式讀存儲(chǔ)器B,直到將B也讀空。2. 如權(quán)利要求1所述的基于二維FFT處理器的行轉(zhuǎn)置架構(gòu)設(shè)計(jì)方法,其特征在于,所述 步驟Sl中,根據(jù)行變換后的圖像數(shù)據(jù)M*N以及片上存儲(chǔ)器的存儲(chǔ)容量s之間的大小關(guān)系,采 用不同方式來實(shí)現(xiàn)行轉(zhuǎn)置的功能,具體情況如下: (1) 若M*N<s,只用片上存儲(chǔ)器完成行轉(zhuǎn)置功能; (2) 若M*N彡s,需要片上存儲(chǔ)器與片外SDRAM協(xié)同工作完成行轉(zhuǎn)置的功能。3. 如權(quán)利要求1或2所述的基于二維FFT處理器的行轉(zhuǎn)置架構(gòu)設(shè)計(jì)方法,其特征在于,所 述步驟(S2b)中,對(duì)于行變換后圖像數(shù)據(jù)M*N大于片上存儲(chǔ)器的存儲(chǔ)容量s的情況,將片上存 儲(chǔ)器一分為二,其寫操作按以下方式進(jìn)行: 二維行變換后生成的陣列數(shù)據(jù)M*N串行寫入片上存儲(chǔ)器與片外SDRAM中,將其中一行的 前k個(gè)數(shù)據(jù)按順序依次寫入片上存儲(chǔ)器A,再把該行接下來的k個(gè)數(shù)據(jù)按順序依次寫入片上 存儲(chǔ)器B,最后把該行剩下的N-2k個(gè)數(shù)據(jù)按順序依次寫入片外SDRAM;這樣把行變換輸出結(jié) 果的M行按上述步驟分別寫入片上存儲(chǔ)器與片外SDRAM,其中M*2k的圖像像素存儲(chǔ)在片上, 后M*(N-2k)的圖像像素存儲(chǔ)在片外SDRAM中。4. 如權(quán)利要求1或2所述的基于二維FFT處理器的行轉(zhuǎn)置架構(gòu)設(shè)計(jì)方法,其特征在于,所 述步驟(S2c)中對(duì)于行變換后圖像數(shù)據(jù)M*N大于片上存儲(chǔ)器的存儲(chǔ)容量s的情況,其按轉(zhuǎn)置 地址讀出存儲(chǔ)器A與B中數(shù)據(jù)的實(shí)現(xiàn)方式: 在存儲(chǔ)器A或B寫滿后,先從存儲(chǔ)器中讀出第一個(gè)數(shù)據(jù),然后每隔k個(gè)地址處再讀出存儲(chǔ) 器中的一個(gè)數(shù)據(jù),這樣重復(fù)M次,讀出行變換后生成的二維數(shù)據(jù)的第一列送到FFT內(nèi)核中進(jìn) 行列變換;再從存儲(chǔ)器中讀出第二個(gè)數(shù)據(jù),然后每隔k個(gè)地址讀出存儲(chǔ)器中的一個(gè)數(shù)據(jù),也 重復(fù)M次,這樣讀出第二列數(shù)據(jù),并將其送到FFT內(nèi)核中進(jìn)行列變換;依次類推,直到將存儲(chǔ) 器讀空為止;當(dāng)最后一次從片外SDRAM讀出數(shù)據(jù)到片上存儲(chǔ)器,將片外SDRAM最后剩下的N-(m+l)*k列數(shù)據(jù)全部寫到片上存儲(chǔ)器,這時(shí)就應(yīng)該間隔N-(m+l)*k個(gè)數(shù)據(jù)讀出一列,其它操 作相同。5. 如權(quán)利要求1或2所述的基于二維FFT處理器的行轉(zhuǎn)置架構(gòu)設(shè)計(jì)方法,其特征在于,所 述步驟(S2c)中對(duì)于行變換后的二維數(shù)據(jù)M*N大于片上存儲(chǔ)器的存儲(chǔ)容量s的情況,其按照 順序突發(fā)方式讀出片外SDRAM中數(shù)據(jù)存到片上存儲(chǔ)器的實(shí)現(xiàn)方式:存儲(chǔ)器A讀空后,在讀取存儲(chǔ)器B的數(shù)據(jù)到FFT內(nèi)核進(jìn)行列變換時(shí),需要并行執(zhí)行從片外 SDRAM讀取數(shù)據(jù)到存儲(chǔ)器A;當(dāng)?shù)谝淮螐腟DRAM中讀取數(shù)據(jù)時(shí),先從開始的位置按順序依次讀 取k個(gè)數(shù)據(jù)存放在片上存儲(chǔ)器A,然后在間隔最后讀出數(shù)據(jù)的位置后的N-3k處,再按順序依 次讀取k個(gè)數(shù)據(jù)存放在存儲(chǔ)器A,之后又一次在間隔N-3k處讀取k個(gè)數(shù)據(jù)存放在存儲(chǔ)器A,這 樣重復(fù)M次,直到將M*k個(gè)數(shù)據(jù)全部寫到存儲(chǔ)器A;同樣地,當(dāng)?shù)趒次從SDRAM中讀取數(shù)據(jù)時(shí),從 距離開頭(q_l)*k處按順序依次讀取k個(gè)數(shù)據(jù)存放在存儲(chǔ)器A,然后在間隔最后讀出數(shù)據(jù)的 位置后的N_3k處,再按順序依次讀取k個(gè)數(shù)據(jù),這樣突發(fā)讀取M次,將M*k個(gè)數(shù)據(jù)存到存儲(chǔ)器 A; 當(dāng)?shù)趒J*從片外SDRAM突發(fā)讀取數(shù)據(jù)到片上存儲(chǔ)器時(shí),此時(shí)qi滿足: ,這也是 最后一次從片外SDRAM讀取數(shù)據(jù)到片上存儲(chǔ)器中;按順序的方式從距離開頭(qi_l)*k處讀 取N-(qi+l)*k個(gè)數(shù)據(jù),然后在間隔最后讀出數(shù)據(jù)的位置后的(qi-l)*k處,再按順序依次讀取 N-(qi+l)*k個(gè)數(shù)據(jù)存放在片上存儲(chǔ)器,接著還是在間隔(qi-l)*k處按順序依次讀取N-( qi+ l)*k個(gè)數(shù)據(jù)存放在片上存儲(chǔ)器,這樣突發(fā)讀取M次,此時(shí)SDRAM中的行變換結(jié)果就全部讀空 了。6.如權(quán)利要求1或2所述的基于二維FFT處理器的行轉(zhuǎn)置架構(gòu)設(shè)計(jì)方法,其特征在于,所 述步驟(S2e),對(duì)于行變換后的圖像數(shù)據(jù)M*N大于片上存儲(chǔ)器的存儲(chǔ)容量s的情況,當(dāng)按照轉(zhuǎn) 置地址讀取某一片上存儲(chǔ)器的數(shù)據(jù)時(shí),比如存儲(chǔ)器A,每次讀出M個(gè)數(shù)據(jù)送到FFT內(nèi)核進(jìn)行列 變換,同時(shí)并行執(zhí)行從SDRAM按順序突發(fā)讀數(shù)據(jù)到存儲(chǔ)器B中;由于讀取SDRAM中的數(shù)據(jù)總會(huì) 存在跨行讀取的情況,因此需要幾個(gè)時(shí)鐘周期來激活,這樣在存儲(chǔ)器A讀空時(shí),B存儲(chǔ)器還沒 有填滿,這時(shí)需要等待存儲(chǔ)器B填滿,才能交換執(zhí)行對(duì)象。
【文檔編號(hào)】G06F17/14GK106021182SQ201610325060
【公開日】2016年10月12日
【申請(qǐng)日】2016年5月17日
【發(fā)明人】桑紅石, 高英華, 胡鵬
【申請(qǐng)人】華中科技大學(xué)