劉浩淼,卞樹檀,朱守保
(第二炮兵工程學院 陜西 西安 710025)
SDRAM(Synchronous DRAM)是一種大容量快速讀寫存儲器,因為其讀寫速度快、容量大、價格低廉,被廣泛應用到音頻、視頻處理[1],數(shù)據(jù)采集,手持電子設備,雷達設備[2-3]等方面。這里使用SDRAM作為視頻回波模擬器的回波數(shù)據(jù)高速緩存。
工控機PC104產生相關的模擬回波數(shù)據(jù),以FPGA為中介將數(shù)據(jù)存儲于I/Q兩路SDRAM,并進行數(shù)據(jù)處理和數(shù)據(jù)輸出操縱。由于回波脈沖有一定間隔,所以方案使用SDRAM以單字讀寫模式工作。
這里使用的SDRAM芯片是現(xiàn)代公司生產的HY57V561620型號芯片[4],擁有4個Bank,每個Bank容量為4,194,304×16 bit,B0~B1 是 2 根 Bank 選擇線,A0~A12 的 13根地址線是行地址,RA0~RA12與列地址 CA0~CA8復用,D0~D15是16根數(shù)據(jù)線。地址線還可以對工作模式進行設置,A10控制預充電模式等功能。工作時鐘能達到133 MHz(7.5 ns),是一種高速存儲器。
采用Ateral公司颶風系列的EP1C6Q240芯片[5],對SDRAM控制器進行設計和實現(xiàn)。這種設計節(jié)省PCB空間,又增加了系統(tǒng)穩(wěn)定性。FPGA有重復可編程的特征,使得SDRAM控制器可以方便地進行功能擴展。
SDRAM 操作[3-4,6-7]包括初始化、讀寫、預充電和刷新等操作。初始化過程如下:上電等待200 μs,隨后完成1次預充電,隨后連續(xù)進行8次刷新操作,最后對模式寄存器進行設置。至此初始化完畢,SDRAM進入正常工作狀態(tài)。
SDRAM芯片內部嵌有一個控制模塊操作底層的存儲單元,所以SDRAM工作狀態(tài)是通過命令控制的。這些命令包括:預充電(Precharge)和自動預充電(Auto Precharge)、激活(Active)、讀(Read)、寫(Write)、自動刷新(Auto Refresh)和自刷新(Self Refresh)等。這里介紹幾個相關的命令:刷新、預充電、激活、讀寫。
刷新是對SDRAM內的數(shù)據(jù)進行更新的操作。SDRAM存儲單元實質是使用電容存儲數(shù)據(jù)的,電容有漏電現(xiàn)象,所以需要每隔一段時間對其進行一次重新充電,芯片手冊要求在每64 ms對內部所有行213=8 192進行一次刷新。刷新包括:自動刷新和自刷新。自刷新是在低功耗下芯片內部自動完成的。自動刷新是由控制器發(fā)起的,它必須在SDRAM沒有激活行時才能進行,每次提出刷新命令芯片內部會通過行自加器對行數(shù)加一。對芯片刷新的實現(xiàn)方法有:集中刷新和定時刷新。由于模擬數(shù)據(jù)擁有固定時序,且沒有大塊的空閑時間,所以選擇定時刷新。
預充電是對讀寫的行進行關閉操作。這里選擇預充電而沒有使用自動預充電,是出于掌握對時序的主動控制考慮,每次對全部模塊進行預充電。
激活是對某一行的激活,這樣才能對這一行進行讀寫操作。激活過程實質上是對行地址的鎖存。
讀寫是在激活行上進行的,讀寫命令與列地址同時發(fā)出??梢酝话l(fā)讀寫,其長度是在初始化時通過對模式寄存器時設置實現(xiàn)。本設計使用突發(fā)讀/單一寫的模式,突發(fā)長度為1。
表1 命令真值表Tab.1 Command truth table
Mode Code設置為220 H,即突發(fā)讀/單一寫,讀操作潛伏期為2 clk,順序突發(fā),突發(fā)長度為1。
SDRAM控制器采用模塊化設計,可以進行功能模塊化調試,便于設計。設計模塊由4部分組成:狀態(tài)控制機(State Control Machine)、命令控制機(Command Control Machine)、刷新機(Refresh Machine)、雙向鎖存器(Latch)。 控制器總體設計如1所示。
圖1 SDRAM控制器結構框圖Fig.1 SDRAM controller block diagram
狀態(tài)控制機是控制模塊的核心,它接收請求信號并通過狀態(tài)分析控制其他模塊的工作。狀態(tài)控制機的設計主要通過設計狀態(tài)機[8]來完成,SDRAM的控制狀態(tài)主要分為:初始化、正常工作狀態(tài),狀態(tài)圖分別如圖2、圖3所示。
設備加電后狀態(tài)控制機先進入初始化狀態(tài)(Initial),依次完成:等待200 μs、預充電、8次刷新、模式寄存器設置(MRS)。隨后進入正常工作狀態(tài),工作狀態(tài)首先進入空閑狀態(tài)(Idel),此時可能會有讀寫、刷新請求,因此需要制定一個優(yōu)先級判別機制。使用SDRAM讀取數(shù)據(jù)模擬脈沖回波,數(shù)據(jù)不能被中斷,因此設置讀寫操作優(yōu)先級高于刷新,這樣刷新操作必須在空閑狀態(tài)時才響應。如果當讀寫操作正在進行時刷新定時到來,可以設置一個標志記錄變量,在完成讀寫操作進入空閑狀態(tài)后再通過刷新標志變量來判定是否進入刷新狀態(tài)(Refresh)。VerilogHDL部分實現(xiàn)程序如下:
圖2 初始化狀態(tài)圖Fig.2 Initialization state diagram
圖3 工作狀態(tài)圖Fig.3 Work state diagram
在讀寫操作狀態(tài)(Read/Write)時,也不知道刷新請求會什么時候到來,所以采用每次回到空閑狀態(tài)前進行一次對所有Bank的預充電(Precharge),為空閑狀態(tài)的刷新做好準備。讀寫模式為單一讀寫,每次間隔與發(fā)射脈沖頻率相關為500 ns,因此也有足夠的時間完成預充電。狀態(tài)控制機內部有兩個分別控制讀寫的地址譯碼器,譯碼器自動遞增讀寫的地址,因此設計了讀寫激活狀態(tài)(Active Read/Active Write)來判斷是激活讀地址還是寫地址。
狀態(tài)控制機還輸出dat脈沖信號去鎖存雙端口鎖存器的數(shù)據(jù),保證數(shù)據(jù)在操作時的穩(wěn)定性。
狀態(tài)控制機通過分析狀態(tài)給出相應的命令信號,命令信號輸入到命令控制機(Command Control Machine)。命令控制機輸出端直接去控制SDRAM,對輸入端命令信號的分析和輸出以真值表1為依據(jù),部分實現(xiàn)代碼如下:
命令的譯碼操作主要是根據(jù)輸入判斷輸出。在讀寫操作時,當讀寫完一行數(shù)據(jù)29×16=512×16 bit后需要對行地址加一,對列地址再加一為零,從下次開始讀寫下一行數(shù)據(jù)。
刷新機(RefreshMachine)的實質是定時器,它以固定時間間隔輸出刷新脈沖。芯片手冊要求在64 ms內對所用行進行一次刷新,計算每次刷新的間隔為7812.5 ns,片上時鐘頻率為100 MHz,即每計781個數(shù)進行一次刷新,這里考慮到刷新的優(yōu)先級低,可能被推遲執(zhí)行,所以設置每記512個數(shù)提出一次刷新請求。
PC104通過ISA總線和SDRAM通過數(shù)據(jù)線傳輸?shù)臄?shù)據(jù)是雙向的,雙向鎖存器(Latch)[9]為滿足數(shù)據(jù)流通提供了橋梁。數(shù)據(jù)的輸入采用鎖存機制,使輸出端得到的數(shù)據(jù)穩(wěn)定。DA[15..0]與PC104的數(shù)據(jù)總線相連;DB[15..0]與SDRAM的數(shù)據(jù)線相連;控制數(shù)據(jù)的流向,高電平時數(shù)據(jù)從DA[15..0]流向DB[15..0],反之則流向相反;dat脈沖對數(shù)據(jù)進行鎖存。
對各個模塊進行聯(lián)合實驗的時序仿真如圖4所示。
圖4 控制器整體時序圖Fig.4 Control the overall timing diagram
實驗對控制器的初始化、寫操作、讀操作和刷新操作進行了仿真。實驗結果表明SDRAM控制器對于各個操作都有正確的時序輸出。在設計刷新操作實驗時,特意同時給出讀脈沖和刷新脈沖來測試控制器對優(yōu)先級的判定能力,實驗結果表明在控制器完成讀操作并回到空閑狀態(tài)后才去響應刷新請求正確地執(zhí)行了優(yōu)先級操縱。在時間軸上對每個響應操作的時間進行分析,發(fā)現(xiàn)操作響應存在一定的延時,這是硬件電路的性能和時鐘頻率所決定的,延時在可接受范圍內。實驗證明使用模塊化設計SDRAM控制器的方法可行。
筆者從實際應用出發(fā)設計了單一長度讀寫的SDRAM控制器,使用了狀態(tài)機和模塊化設計,使設計簡潔明了,簡化了設計流程,并通過了時序仿真,可以被視頻回波模擬器設計所使用。下一步要從設計上和時鐘上做一些改進盡量減小操作響應的延時。
[1]王騫,丁鐵夫.高速圖像存儲系統(tǒng)中SDRAM控制器的實現(xiàn)[J].液晶與顯示,2006,21(1):48-52.
WANG Qian,DING Tie-fu.High-speedimagestorage system SDRAM controller implementation[J].Chinese Journal of Liquid Crystals and Display,2006,21(1):48-52.
[2]余卜一.基于磁盤陣列的雷達回波模擬器的研制[D]成都:電子科技大學,2006.
[3]鄭哲,李加琪,吳嗣亮.引信體目標視頻回波模擬器SDRAM控制器的FPGA設計[J]微電子學, 2005,35(1):102-104.
ZHENG Zhe, LI Jia-qi, WU Si-liang.FPGA design of SDRAM controllerforwirelessfuseebody-targetvideo frepuenty echo simulator[J].Microelectronics, 2005,35(1):102-104.
[4]Hynix公司.HY57V561620DataSheet[EB/OL].[2011-07-20].www.datasheet.com.
[5]altera公司.Cyclone FPGA Family[EB/OL][2011-07-12].www.altera.com.cn/literature.jsp.
[6]楊映輝.基于FPGA的SDRAM控制器設計及應用[D]蘭州:蘭州大學,2007.
[7]程方敏,黃啟俊,向守坤,等.基于FPGA的高速SDRAM控制器的視頻應用[J]應用設計,2009,36(7):22-24.
CHENG Fang-min, HUANG Qi-jun, XIANG Shou-kun,et al.The video application of high speed SDRAM controller based on FPGA[J].Application Design,2009,36(7):22-24.
[8]姚遠,李辰.FPGA應用開發(fā)入門與典型實例[M].北京:人民郵電出版社,2010.
[9]杜志傳,鄭建立.基于CPLD/FPGA的VHDL語言電路優(yōu)化設計[J].現(xiàn)代電子技術,2010(03):191-193.
DU Zhi-chuan,ZHENG Jian-li.Optimized design of circuits in VHDL based on CPLD/FPGA[J].Modern Electronics Technique,2010(03):191-193.