基于FPGA的SDRAM控制器的設計和實現_第1頁
基于FPGA的SDRAM控制器的設計和實現_第2頁
基于FPGA的SDRAM控制器的設計和實現_第3頁
基于FPGA的SDRAM控制器的設計和實現_第4頁
基于FPGA的SDRAM控制器的設計和實現_第5頁
已閱讀5頁,還剩2頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、基于fpga的sdram控制器的設計和實現0 引言隨著電子技術在工業(yè)、醫(yī)療、商業(yè)等領域的發(fā)展,人們對數據傳輸率的要求越來越高,傳統(tǒng)的單片機早已不能滿足這種高速數據傳輸的要求。與此同時,可編程的邏輯器件fpga/cpld以其強大的功能,開發(fā)過程投資小、周期短,可反復編程修改,開發(fā)工具智能化等特點,成為當今硬件設計的潮流;相比而言,fpga即現場可編程門陣列,它的集成度高,可完成極其復雜的時序與組合邏輯電路功能,更適用于高速、高密度的高端數字邏輯電路設計領域1。sdram即:同步動態(tài)隨即存儲器,與傳統(tǒng)的dram有很大區(qū)別。它可以與系統(tǒng)總線以同頻率工作,用同一個cpu時鐘周期即可完成數據的訪問和刷新

2、,進而大大的提高了數據傳輸率,其速度遠大于dram。因而,sdram常作為數據緩存應用于高速數據傳輸系統(tǒng)中。目前,許多嵌入式設備的大容量、高速度存儲器都采用sdram來實現,而且大多都是用專用芯片完成其控制電路,這不但提高了設計成本,而且使系統(tǒng)的硬件電路變得復雜。隨著fpga在嵌入式系統(tǒng)中的廣泛應用,如果我們能夠結合具體的需要,利用fpga來設計自己的sdram控制器,這些問題就迎刃而解了。然而,sdram的控制邏輯復雜、時序要求嚴格,常常困擾設計人員。有很多文章2,3,4,5詳細的介紹了sdram的工作原理、控制時序和指令特點,以及基于fpga的sdram控制器的實現方法,但是并沒有詳細的給

3、出控制器內部結構和指令時序的控制問題。因此。本文將介紹一種基于fpga的通用sdram控制器,并著重介紹設計方案中各模塊的功能和實現方法。該控制器用vhdl語言程序實現,完成了sdram指令狀態(tài)轉換、信號仲裁判斷,并巧妙的用三個移位寄存器解決了指令的邏輯和時序的問題。1. sdram簡介sdram具有空間存儲量大、讀寫速度快、價格相對便宜的特點。但其控制邏輯復雜,需要周期性刷新操作、行列管理、不同延時和命令序列等。1.1 sdram地址結構sdram的存儲地址分為頁(bank)地址,行(row)地址和列(column)地址。例如一個8mbyte的sdram,被分為4個bank,即1個bank為

4、2mbyte,每個bank包括12行8列。1.2 sdram的指令sdram的一系列指令如表1所示,每個指令最終都是通過控制ras、cas、we信號來實現。通常對sdram的操作過程如下:表1 sdram命令(1) sdram初始化操作:上電后至少等待100ns,然后至少執(zhí)行1條空操作;對所有頁執(zhí)行預充電操作;向各頁發(fā)出兩條刷新操作指令;最后執(zhí)行sdram工作模式的設定lmr命令用來配置sdram工作模式寄存器,sdram工作寄存器如表2所示。其中a11a10是用戶保留位;a9用來配置寫突發(fā)模式;a8a7是操作模式,通常為“00”,代表標準操作模式;a6a4設置cas延遲時間;a3決定突發(fā)操作

5、模式是順序還是間隔型;最后的三位a2a0用來配置突發(fā)長度。表2 sdram工作寄存器a11a10a9a8a7a6a5a4a3a2a1a0reservewrite burst modeoperating modelatency modeburst typeburst length(2) sdram讀、寫操作:根據實際應用的需要,發(fā)出讀、寫指令。sdram可實現突發(fā)式讀寫,支持的突發(fā)長度可配置為1個、2個、4個、8個數據周期或者頁模式。并且突發(fā)的模式可以配置為順序或者間隔型。對sdram進行訪問的最主要操作就是讀rd和寫wr操作。sdram在進行讀寫操作時,必須要先進行頁激活act操作,以保證存儲

6、單元是打開的,以便從中讀取地址或者寫入地址,關閉存儲單元通過預充電phc命令實現。在進行寫操作時,內部的列地址和數據就會被寄存;進行讀操作時,內部地址被寄存,等待cas 延遲時間(通常為13個時鐘周期)后,讀出的數據出現在數據總線上,具體時序詳見sdram數據手冊,此處不再贅述。(3) 操作終止:當sdram接收到讀、寫指令后,開始進行順次的讀寫操作,直到達到突發(fā)長度或者突發(fā)終止指令bt出現。2 sdram控制器方案 sdram控制器【6】針對sdram的指令操作特點,為sdram提供同步命令接口和時序邏輯控制,下面將以altera公司的cyclone系列fpga為例,主機系統(tǒng)時鐘為100mh

7、z,使用三星公司的k4s641632e,8mbyte sdram【7】,介紹sdram控制器的具體設計方法。圖1為sdram控制器的接口原理圖。圖1 sdram控制器接口原理圖接口信號介紹:(1) 與主機接口信號: clk:系統(tǒng)時鐘信號; reset::系統(tǒng)復位信號;cmd2:0:譯碼指令,如表3所示;cmdack:指令應答信號,通知主機命令已被sdram執(zhí)行;addr:地址線,根據具體情況確定位數,本例中為22位,a21、a20代表頁地址ba1,ba0;a19a8代表行地址;a7a0代表列地址;datain/dataou:輸入、輸出數據總線;dm:數據掩碼;(2) 與sdram接口信號:sa

8、ddr:12位地址線,在讀、寫操作時,地址線分時復用為行地址和列地址;ba:頁地址,ba0,ba1;cs:片選信號;cke:時鐘使能信號;ras、cas、we:命令控制信號;dqm:sdram數據掩碼;dq:雙向數據線;sdram控制器作為頂層模塊,由3個主要模塊組成:接口控制模塊、命令生成模塊、數據路徑模塊。下面將詳細的介紹各個模塊的功能和關鍵設計的vhdl實現方法。表3 cmd命令字2.1 接口控制模塊 接口控制模塊主要實現的功能包括:將cmd2:0翻譯成接口指令和對刷新計數器的控制,如圖2所示。首先通過狀態(tài)機來完成對cmd2:0的翻譯,在vhdl程序中聲明一個用戶自定義類型states,

9、根據cmd2:0輸入來決定狀態(tài)的轉移,完成對cmd2:0的解碼,如下所示:type states is(nop,reada,writea,refresh,precharge,load_mode);signal state : states ;case cmd is when 011 = state state=nop; sdram需要周期性刷新操作以保持數據,數據手冊中通常會給出在一定的時間t內,sdram至少刷新x次,如果用戶使用頻率為fr mhz的時鐘,則刷新周期tf可以通過下面的公式計算出:tf(t*fr) / x。例如,本例中數據手冊要求64ms內至少刷新4096次,系統(tǒng)時鐘周期為10

10、0mhz,則刷新周期為(64ms*100mhz)/ 4096,得出結果等于1562.5,所以至多1562個時鐘周期的時間就必須對sdram刷新一次。刷新控制在程序中通過一個計數器來完成,當到達規(guī)定的計數周期,就向sdram發(fā)出ref_req刷新請求,直到sdram完成刷新操作,發(fā)出ref_ack刷新應答信號,計數器才重新賦值開始下一次的計數。圖2 接口控制模塊2.2 命令生成模塊圖3是命令生成模塊,主要實現了對輸入的指令請求進行仲裁判斷,并將仲裁后要執(zhí)行的指令解碼成sdram需要的ras、cas等信號,從而實現對sdram的控制。圖3 命令生成模塊之所以需要仲裁機制,是因為在指令執(zhí)行之前可能會

11、發(fā)生以下情況:其它指令和刷新請求同時到來;刷新請求到來時,其它指令正在執(zhí)行。仲裁機制實現方法如下:(1) sdram在每一刻只有一個指令在執(zhí)行;(2) 先到的指令先執(zhí)行,即:如果刷新請求到來時,其它命令正在執(zhí)行中,要等到當前命令執(zhí)行完成后,才能執(zhí)行刷新指令;(3) 其它指令和刷新請求同時到來時刷新操作先執(zhí)行。經過仲裁判斷后,指令將傳入命令生成器。命令生成器不僅要把指令解碼成可控制sdram的信號,同時還要用三個移位寄存器對命令執(zhí)行的延遲時間進行控制。第一個為指令延時寄存器,用來保證sdram有充足時間完成最終指令。例如,如果命令的執(zhí)行需要8各時鐘周期的時間,則指令延時寄存器com_delay的

12、初值設為“11111111”,同時聲明一個內部信號com_done,作為指令執(zhí)行完成的標志的。在指令執(zhí)行期間,每一個時鐘上升沿到來時,移位寄存器向右移位一次,com_delay0的移入com_done,同時“0” 移入最高位com_delay7。當com_done為“0”時,就說明指令的延遲時間已到,即通過com_done的值,就可以判斷當前指令是否執(zhí)行完成。要注意的是:移位寄存器的位數和初值,應該根據sdram的數據手冊中命令完成需要的時間和系統(tǒng)的時鐘周期來確定。下面得例程僅供參考。if (do_state=refresh or do_state=reada or do_state=writ

13、ea or do_state=precharge or do_state=load_mode)then command_delay(7 downto 0)=11111111; -移位寄存器初值 command_done=1; else command_done=command_delay(0); -移位操作 command_delay(6 downto 0)= command_delay(7 downto 1); command_delay(7)=0; end if;當輸入的指令為writea和reada指令,將引發(fā)一系列指令的執(zhí)行,和其它指令相比需要附加時間。所以,聲明第二個移位寄存器rw_

14、shift,來計算這兩個指令的附加時間,其工作原理和第一個移位寄存器是一樣的。最后一個移位寄存器oe_shift用來為數據通道生成oe,即數據輸入、輸出使能信號。對于非頁模式的讀寫來說,oe保持有效的時間取決于突發(fā)長度。并且oe有效的起始時間對讀操作和寫操作時不同的:讀操作時,oe有效的起始時間取決于cas延時時間,而對于寫操作時則在寫指令開始時oe就是有效的。 23 數據路徑模塊 數據路徑模塊主要是在writea和reada命令期間處理數據的路徑操作。模塊的結構圖如圖4所示。dq是雙向數據線,用來傳輸從sdram讀出數據和向sdram寫入的數據。無論是數據在讀出還是寫入時,都是在oe有效,即

15、oe為高電平時才能進行傳輸。dm是由主機輸出的數據掩碼,通過dqm輸出到sdram的ldqm和udqm管腳,進而控制sdram i/o緩沖的低字節(jié)和高字節(jié)。 圖4 數據路徑模塊 3 總結本文結合sdram控制指令的特點,詳細的介紹了一種基于fpga的通用sdram控制器的設計方案。本文所介紹的指令狀態(tài)的轉移、仲裁機制的實現和移位寄存器控制指令延遲時間的方法,提供了一種sdram控制器的設計思想,由于sdram的控制機制比較復雜,具有多種突發(fā)讀寫的工作模式,我們可以根據實際應用中的需求情況來編寫程序,實現最基本的讀寫和刷新操作,不必要顧全到每一種情況。sdram作為高速數據緩存,在基于現場可編程門陣列fpga的控制下,將在高速、高密度、高端的數字電路領域中得到更加廣泛的應用。參考文獻1王誠,吳華,范麗珍,等. altera fpga/cpld設計(基礎篇). 人民郵電出版社,2005,7.2田豐,鄧建國,李巍,賈治華. sdram的設計與vhdl實現. 電子技術應用,2003,(31)2:74-77.3劉云清,佟首峰,姜會林. 利用fpga實現sdram控制器的設計. 長春理工大學學報.2005,28(4):47-50.4宋一鳴,謝煜,李春茂. 基于fpga的sdram控制器設計. 電子工程師, 2003,29(9):10-13.5

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論