SDRAM通用控制器的FPGA模塊化設計
同步動(dòng)態(tài)隨機存儲器(SDRAM),在同一個(gè)CPU時(shí)鐘周期內即可完成數據的訪(fǎng)問(wèn)和刷新,其數據傳輸速度遠遠大于傳統的數據存儲器(DRAM),被廣泛的應用于高速數據傳輸系統中?;?a class="contentlabel" href="http://dyxdggzs.com/news/listbylabel/label/FPGA">FPGA的SDRAM控制器,以其可靠性高、可移植性強、易于集成的特點(diǎn),已逐漸取代了以往的專(zhuān)用控制器芯片而成為主流解決方案。然而,SDRAM復雜的控制邏輯和要求嚴格的時(shí)序,成為開(kāi)發(fā)過(guò)程中困擾設計人員主要因素,進(jìn)而降低了開(kāi)發(fā)速度,而且大多數的基于FPGA的SDRAM控制器都是針對特定的SDRAM芯片進(jìn)行設計,無(wú)法實(shí)現控制器的通用性。本文介紹一種通用SDRAM控制器的FPGA模塊化解決方案。
SDRAM控制邏輯復雜,命令種類(lèi)多樣,需要周期性刷新操作、行列管理的等多重操作。
SDRAM首先要進(jìn)行初始化操作。在上電后等待100ns, 至少執行1條空操作,然后對所有頁(yè)執行預充電操作,接著(zhù)向各頁(yè)發(fā)出兩條刷新操作指令,最后執行SDRAM工作模式的設定LMR命令用來(lái)配置SDRAM工作模式寄存器。SDRAM工作寄存器可以根據具體應用的需要進(jìn)行設置。
初始后的SDRAM在得到了RAS、CAS、WE的值后開(kāi)始執行相應的命令。在對SDRAM進(jìn)行讀、寫(xiě)過(guò)程中,必須要先進(jìn)行頁(yè)激活ACT操作,保證存儲單元是打開(kāi)的,以便從中讀取地址或者寫(xiě)入地址,然后通過(guò)預充電PHC命令實(shí)現來(lái)關(guān)閉存儲單元。在進(jìn)行寫(xiě)操作時(shí),內部的列地址和數據都會(huì )被寄存,而進(jìn)行讀操作時(shí),內部地址被寄存,數據的存儲則發(fā)生在CAS延遲時(shí)間(通常為1~3個(gè)時(shí)鐘周期)后。最后,操作終止:當SDRAM順次的進(jìn)行讀、寫(xiě)操作后,當到達到突發(fā)長(cháng)度或者突發(fā)終止指令BT出現時(shí),SDRAM將終止其操作。
模塊化的SDRAM控制器設計
在SDRAM控制器的FPGA實(shí)現方案中,采用了:FPGA的自底向上的模塊化設計思想,首先分析頂層模塊的功能,再將其功能分類(lèi)細化,分配到不同的子模塊去實(shí)現,然后自底向上的先逐步完成各個(gè)子模塊的設計,最后將子模塊相互連接生成頂層模塊。經(jīng)過(guò)分析,SDRAM控制器應實(shí)現的功能有:為SDRAM提供刷新控制以保持SDRAM中的數據;對主機的命令進(jìn)行仲裁,將下一步要執行的命令翻譯成可與SDRAM連接的信號;為SDRAM的讀、寫(xiě)生成數據路徑。因此,根據SDRAM的指令操作特點(diǎn)將SDRAM控制器劃分為接口控制模塊、命令生成模塊和數據路徑模塊三個(gè)主要模塊(圖1)。
下面,對其接口信號進(jìn)行介紹,需要注意的是,為了實(shí)現該控制器的通用性,ADDR、DATAIN、DATAOUT、DQ、DOM信號設計成可根據SDRAM的容量改變的形式。
與主機接口信號:CLK(系統時(shí)鐘);RESET(系統復位);CMD[2:0](譯碼指令);CMDACK(指令應答信號);ADDR[ASIZE-1:0】(地址線(xiàn));DATAIN/DATAOU[DSIZE-1:0](輸入、輸出數據總線(xiàn));DM[(DSIZE/8)-1:0】(數據掩碼)。
與SDRAM接口信號:SA(地址線(xiàn));BA(頁(yè)地址);CS-N(片選信號);CKE(時(shí)鐘使能信號);RAS、CAS、WE(命令控制信號);DQM[(DSIZE/8)-1:0](SDRAM數據掩碼);DQ[DSIZE-1:0】(雙向數據線(xiàn))。
各個(gè)模塊的設計與實(shí)現
接口控制模塊
接口控制模塊主要實(shí)現的功能是將CMD[2:0]翻譯成接口指令和對刷新計數器的控制指令。接口模塊在工作過(guò)程中首先通過(guò)要通過(guò)狀態(tài)機來(lái)完成對CMD[2:0]的翻譯。在VHDL程序中聲明一個(gè)用戶(hù)自定義類(lèi)型states,根據CMD[2:0】輸入來(lái)決定狀態(tài)的轉移,完成對CMD[2:0】的解碼,部分代碼如下:
另外,SDRAM需要周期性刷新操作以保持數據。在模塊的程序設計中,刷新周期的控制通過(guò)一個(gè)計數器來(lái)完成,到達規定的計數周期數時(shí),接口模塊通過(guò)REF_REQ信號向SDRAM發(fā)出刷新請求。直到SDRAM完成刷新操作,發(fā)出REF_AcK刷新應答信號,計數器才重新賦值,開(kāi)始下一次的計數。
命令生成模塊
命令生成模塊實(shí)現對輸入的SDRAM指令請求進(jìn)行仲裁判斷的功能,并將仲裁后要執行的指令解碼成sDRAM需要的RAS、CAS等信號,從而實(shí)現指令對SDRAM的控制。仲裁機制是SDRAM控制器設計不可或缺的一個(gè)環(huán)節。仲裁機制實(shí)現要遵循如下規則:
評論