基于FPGA的FIFO設(shè)計和應(yīng)用
引 言
在利用DSP實現(xiàn)視頻實時跟蹤時,需要進行大量高速的圖像采集。而DSP本身自帶的FIFO并不足以支持系統(tǒng)中大量數(shù)據(jù)的暫時存儲,這就要求大的中間緩存,而專用的高速FIFO芯片價格昂貴且容量受限,大大增加了商業(yè)成本,因此在實際應(yīng)用中尋找FIFO代替器件是很有必要的。
1 器件選擇
這里在視頻信號處理系統(tǒng)中,將利用FPGA作為橋梁,實現(xiàn)對SDRAM的控制,以達到大量高速存取數(shù)據(jù)的功能。之所以選取SDRAM,主要是因為在各種隨機存取器件中,SDRAM的容量較大,價格較低,且數(shù)據(jù)突發(fā)傳輸模式大大提高了存取速度,能夠滿足應(yīng)用的要求。
FIFO的速度受到兩個因素的限制:
(1)SDRAM的最高工作頻率。SDRAM的工作頻率越高,數(shù)據(jù)的傳輸速率就越高;
(2)SDRAM的突發(fā)長度。SDRAM的突發(fā)長度越長,對數(shù)據(jù)流的吞吐量就越大,可以從某種程度上提高數(shù)據(jù)的傳輸速率。
FIFO的大小由所選SDRAM芯片的容量來決定。該設(shè)計以采用MICRON公司的MT48LC4M3282(4 BANK×4M×32 b)為例,存儲容量為128 Mb,數(shù)據(jù)帶寬為32位,內(nèi)部由4個BANK組成,每個BANK有4 096行和256列。
MT48LC4M3282的控制信號有CLK(時鐘信號)、CKE(時鐘使能)、CS(片選信號)、WE(寫使能)、CAS(列有效)、RAS(行有效)、DQM0~DQM3(輸入輸出使能)??刂菩盘柦M成的常用控制命令如表1所示。
2 FIFO系統(tǒng)設(shè)計
FIFO系統(tǒng)由FGPA和SDRAM兩部分組成。其中,F(xiàn)GPA內(nèi)部包含F(xiàn)IFO監(jiān)控器、緩沖器、SDRAM控制器三個模塊。FIFO監(jiān)控器的作用是將FIFO的狀態(tài)轉(zhuǎn)變成狀態(tài)機的讀、寫信號。若操作為向SDRAM寫數(shù)據(jù),則在FIFO已滿時,F(xiàn)IFO監(jiān)控器送出一個信號,以阻止寫操作繼續(xù)向FIFO中寫數(shù)據(jù)而造成溢出;若操作為向SDRAM讀數(shù)據(jù),則在緩沖器已空時,F(xiàn)IFO監(jiān)控器送出一個信號,以阻止讀操作繼續(xù)從FIFO中讀數(shù)據(jù)而造成無效數(shù)據(jù)的讀出。FIFO的模塊結(jié)構(gòu)如圖1所示。
在該設(shè)計中,攝像頭采用640×480的屏幕分辨率,圖像深度為8,每秒為25幀,圖像數(shù)據(jù)量的大小為圖像中像素總數(shù)與圖像深度的乘積,由此可以得出每幀圖像的大小為2.457 Mb,每秒鐘視頻產(chǎn)生數(shù)據(jù)的大小為61.44 Mb。因為系統(tǒng)向SDRAM控制器寫入和讀出數(shù)據(jù)的速度比較低,約為62 MHz,F(xiàn)PGA的外接晶振CLK為27 MHz,F(xiàn)PGA和SDRAM的工作時鐘由鎖相環(huán)4倍頻后生成,即為108 MHz,所以SDRAM控制器向SDRAM寫入和讀出數(shù)據(jù)的速率為108 MHz,因此二者屬于不同的時鐘域,需要用緩沖器作為輸入和輸出的緩存。
SDRAM控制器的模塊結(jié)構(gòu)如圖2所示,其中SDRAM控制器內(nèi)部包括:初始化模塊、模式寄存器、控制模塊和狀態(tài)機。SDRAM的接口設(shè)計是極其關(guān)鍵的,可根據(jù)SDRAM內(nèi)部操作狀態(tài)之間的聯(lián)系,通過狀態(tài)機來實現(xiàn)接口設(shè)計。初始化模塊負(fù)責(zé)SDRAM的初始化,在上電和時鐘穩(wěn)定后等待100 ms,至少執(zhí)行一條空操作,然后對所有頁執(zhí)行預(yù)充電操作,使所有頁處于空閑狀態(tài),接著向各頁發(fā)出兩條刷新操作指令,最后發(fā)出一個模式寄存器裝載命令,使SDRAM有確定的狀態(tài)進行讀寫操作。模式寄存器可根據(jù)要求對SDRAM的突發(fā)長度、突發(fā)類型、CAS延時的時鐘數(shù)、運行模式和寫突發(fā)模式進行設(shè)置,確定SDRAM在讀寫操作時的工作狀態(tài)。模式寄存器M0~M2用于規(guī)定突發(fā)長度,可以為1,2,4,8。M3用于規(guī)定突發(fā)類型,當(dāng)M3=0時,突發(fā)類型是連續(xù)的;當(dāng)M3=1時,突發(fā)類型是交錯的。M4~M6用于規(guī)定CAS延遲的時鐘周期數(shù),可以分為1,2,3。M7,M8用于規(guī)定運行模式。M9用于規(guī)定寫突發(fā)模式,當(dāng)M9=0時,按實際編程的突發(fā)長度存??;當(dāng)M9=1時,按單個存取單元寫入,但可按實際編程的突發(fā)長度讀出。
狀態(tài)機是SDRAM控制器的核心控制模塊,其作用主要有兩個方面:其一是對各模塊發(fā)出的操作請求進行仲裁,在適當(dāng)?shù)臅r刻作出反映,發(fā)出對SDRAM適當(dāng)?shù)目刂泼?;其二是協(xié)調(diào)各模塊之間的時序關(guān)系,滿足對SDRAM讀寫所必需的時序要求。狀態(tài)機的狀態(tài)轉(zhuǎn)移如圖3所示。
在模式設(shè)定之后,BANK和行地址選中需要訪問數(shù)據(jù)所在的具體BANK塊和行,狀態(tài)機對這一行發(fā)出激活命令,從激活到讀寫操作需要經(jīng)過一個tRCD的延時,設(shè)計中選tRCD=20 ns,而系統(tǒng)時鐘周期為9.26 ns,所以從激活到執(zhí)行讀寫操作之間至少需要3個時鐘周期。在執(zhí)行讀寫操作時,只要狀態(tài)機通過讀寫命令選中數(shù)據(jù)所在行的列地址,就能達到讀寫具體存儲單元的目的。狀態(tài)機對SDRAM發(fā)出一個讀命令后,需要等待一個CAS latency,然后才能讀數(shù)據(jù);而寫操作是實時的,不需要延時,狀態(tài)機在發(fā)出寫命令后,就可以對SDRAM進行寫操作。SDRAM同時只允許一行地址激活,因此在完成某BANK/ROW的讀寫操作后,對該BANK/ROW進行預(yù)充電,然后才能激活下一個BANK/ROW。從預(yù)充電成功到下一次激活命令成功,如果是在同一個BANK塊,則需要延時tRC,如果是不同的BANK塊,則需要延時tRRD。
SDRAM要求在64 ms之內(nèi)對4 096行進行刷新,也就是每15.625μs刷新一行。由于系統(tǒng)時鐘周期為9.26 ns,所以刷新模塊計數(shù)達到1 685時,就需要對SDRAM發(fā)出刷新命令,保證SDRAM中的數(shù)據(jù)不丟失。將自動刷新請求設(shè)為優(yōu)先請求,狀態(tài)機內(nèi)部有請求仲裁邏輯,當(dāng)自動刷新請求和其他請求同時出現(xiàn)時,優(yōu)先保證自動刷新請求,狀態(tài)轉(zhuǎn)移至刷新操作,當(dāng)刷新操作結(jié)束時,重新返回空閑狀態(tài),開始響應(yīng)其他請求。
3 工程應(yīng)用介紹
該設(shè)計目的是為了擴展TMS320DM642的FIFO容量,以FPGA為接口,實現(xiàn)與SDRAM的連接。TMS320DM642可以對4 GB的地址進行尋址,而實際應(yīng)用中FIFO的容量只有256 KB,尋址空間為0x0184000~0x0187FFFF,因此在實際應(yīng)用中必須進行擴展。這里采用1片MICRON公司的MT48LC4M3282型號的128 Mb SDRAM,采用32位數(shù)據(jù)總線,將其通過FPGA配置在TMS320DM642處理器的EMIFA CE3上,其地址范圍為0xB0000000~0xB7FFFFFF。在該設(shè)計中,突發(fā)長度為8,CAS latency為3。圖4為用Modelsim SE 6.0仿真的SDRAM讀時序圖。
4 結(jié) 語
該設(shè)計已應(yīng)用于目標(biāo)識別與跟蹤系統(tǒng)中的幀緩沖。文中主要介紹了SDRAM的具體信號關(guān)系,說明各種操作命令,給出在高速圖像存儲系統(tǒng)中SDRAM控制器的具體硬件接口設(shè)計。大容量存儲器是FIFO的發(fā)展方向,從現(xiàn)在通用的SDRAM、專用的SRAM,到DDR SDRAM,容量越來越大,速度也越來越快,而用FPGA作為SDRAM的控制器,具有最大的靈活性,也能在最大限度上發(fā)揮SDRAM高速度的優(yōu)勢,因此對它進行研究具有重要的意義。
評論
查看更多