詳解如何利用FPGA與SRAM設(shè)計大容量數(shù)據(jù)存儲
1 前言
針對FPGA中內(nèi)部BlockRAM有限的缺點,提出了將FPGA與外部SRAM相結(jié)合來改進設(shè)計的方法,并給出了部分VHDL程序。
2 硬件設(shè)計
這里將主要討論以Xilinx公司的FPGA(XC2S600E-6fg456)和ISSI公司的SRAM(IS61LV25616AL)為主要器件來完成大容量數(shù)據(jù)存儲的設(shè)計思路。
FPGA即現(xiàn)場可編程門陣列,其結(jié)構(gòu)與傳統(tǒng)的門陣列相似,大量的可編程邏輯塊( CLB , Configurable Logic Block ) 在芯片中央按矩陣排列,芯片四周為可編程輸入/輸出塊( IOB , Input / Output Block),CLB行列之間及CLB和IOB之間具有可編程的互連資源(ICR,InterConnectResource)。CLB、IOB和ICR都由分布在芯片中的SRAM靜態(tài)存儲單元控制,SRAM中的數(shù)據(jù)決定FPGA的功能,這些數(shù)據(jù)可以在系統(tǒng)加電時自動或由命令控制從外部存儲器裝入。
在進行數(shù)據(jù)存儲時,可直接將數(shù)據(jù)寫入FPGA內(nèi)部的BlockRAM中,在一定程度上減少了FPGA的資源分配。但FPGA內(nèi)部自帶的RAM塊畢竟是有限的,當(dāng)需進行大容量數(shù)據(jù)存儲時這有限的RAM塊是遠(yuǎn)遠(yuǎn)不能滿足系統(tǒng)設(shè)計要求的。此時,就需要將FPGA與外部RAM相結(jié)合完成大容量數(shù)據(jù)存儲。具體硬件電路如圖一所示:
3 IS61LV25616AL功能簡介
IS61LV25616AL是IntegratedSiliconSolution公司(ISSI)的一款容量為256K×16的且引腳功能完全兼容的4Mb的異步SRAM,可為Xilinx公司的Spartan-2E系列FPGA提供高性能、高消費比的外圍存儲。除了256K×16異步SRAM外,ISSI還提供128K×16、512K×16、256K×8、512K×8和1M×8的異步SRAM。 IS61LV25616AL引腳結(jié)構(gòu)框圖如圖二所示:
3.1 主要特征
(1)工作電壓:3.3伏;
(2)訪問時間:10ns、12ns;
(3)芯片容量:256K×16;
(4)封裝形式:44引腳TSOPII封裝,也有48引腳mBGA和44引腳SOJ封裝;
(5)采用0.18μm技術(shù)制造。
3.2 引腳功能
(1)A0~A17:18位的地址輸入線;
(2)IO0~IO15:16位的三態(tài)數(shù)據(jù)輸入輸出線;
(3)寫控制線;
(4)片選信號;
(5)輸出使能信號;
(6)低字節(jié)、高字節(jié)使能信號;
(3)~(6)的控制線均為低電平有效。
3.3 控制邏輯電路設(shè)計
如圖三所示,控制邏輯由FPGA來實現(xiàn)。主要包括讀地址產(chǎn)生器、寫地址產(chǎn)生器、讀寫時鐘信號產(chǎn)生器及讀寫控制等幾部分。下面分別加以講述。
(1)寫地址產(chǎn)生器:由于設(shè)計時采用256K×16的SRAM,故有18位地址,寫地址產(chǎn)生器用18位計數(shù)器實現(xiàn)??客獠繒r鐘驅(qū)動,每進行一次寫操作后,讀寫控制單元產(chǎn)生計數(shù)脈沖,使其增1,直到18位計數(shù)器計滿再循環(huán)寫入地址為0的空間。
(2)讀地址產(chǎn)生器同上,也采用18位計數(shù)器實現(xiàn),根據(jù)系統(tǒng)要求,每隔一定的采樣周期將讀地址指針偏移一定偏移量,并從該位置讀取數(shù)據(jù)。
(3)讀寫地址選擇器由于讀寫地址復(fù)用管腳,因此在讀寫操作時,必須選通相應(yīng)的地址。這就需要由FPGA控制芯片上的等控制信號來對SRAM進行讀寫的操作。
(4)此外,由于讀寫之間的切換,數(shù)據(jù)線上的數(shù)據(jù)在切換瞬間如不加處理會出現(xiàn)混亂現(xiàn)象。因此,為避免讀、寫操作發(fā)生沖突,數(shù)據(jù)線呈三種狀態(tài),讀數(shù)據(jù)、寫數(shù)據(jù)及高阻態(tài)。在從寫到讀的過程中需給數(shù)據(jù)線上送高阻態(tài)。
(5)當(dāng)需要對SRAM進行寫操作時,由FPGA控制產(chǎn)生寫地址選通信號,該選通信號為一單脈沖形式,如圖四中該脈沖下降沿觸發(fā)SRAM,告知開始對RAM進行寫操作,使FPGA輸出寫地址,同時給數(shù)據(jù)線上送數(shù)據(jù)。在寫操作期間,片選信號始終保持低電平,而寫地址選通信號上升沿到來時使寫地址計數(shù)器增1。以此類推,通過寫地址選通信號高低電平變化完成對數(shù)據(jù)依次寫入。需要注意的是,地址線和數(shù)據(jù)線在為高時可同時賦新值,但只有在變低后賦予數(shù)據(jù)線上的新值才有效。
對SRAM進行讀操作相對較簡單,在進行讀操作期間,始終為低電平,始終為高電平。每進行一次讀操作,地址按系統(tǒng)要求變化一次。同時注意,地址的變化時刻總要先于數(shù)據(jù)的變化時刻。圖五為RAM讀操作時序。
以下是一段用VHDL語言描述的控制RAM的讀寫操作時序的程序代碼:
程序中,在進行讀寫操作時,片選使能信號CE_SRAM及輸出使能信號OE_SRAM始終為低電平。
第0時刻到第2時刻在進行寫操作:第0時刻地址線addr_SRAM和數(shù)據(jù)線data_SRAM同時賦新值,控制線WE_SRAM、LB_SRAM、UB_SRAM要經(jīng)歷一個窄脈沖的變化過程,RAM在獲取到此控制線下降沿信息后,便知開始進行寫操作。需要注意的是,雖然數(shù)據(jù)在第0時刻已賦到數(shù)據(jù)線上,但因為寫操作是控制線低電平有效,所以數(shù)據(jù)線上真正發(fā)生數(shù)據(jù)更新是在控制線變?yōu)榈碗娖街螅虼?,?shù)據(jù)線上的實際更新時刻是在第2個時刻。
第3、4狀態(tài)是進行讀操作:在讀寫轉(zhuǎn)換時刻,也就是在第3時刻如前所述需給數(shù)據(jù)線上送高阻態(tài)。這樣,讀取數(shù)據(jù)的時序關(guān)系由系統(tǒng)時鐘進行控制,在第3時刻給地址線上送要讀取的地址,第4時刻將數(shù)據(jù)端口上的數(shù)據(jù)送出。這里需注意的是,讀取數(shù)據(jù)要比讀取地址晚一個時刻。從而,完成了對外部RAM的讀寫操作控制。
4結(jié)論
該系統(tǒng)已應(yīng)用在羅蘭—C導(dǎo)航接收機的信號處理中。實驗證明,此設(shè)計可靠穩(wěn)定地完成了大容量高速異步數(shù)據(jù)存儲,進一步提高了系統(tǒng)的性能。