歡迎您光臨本站 登入註冊首頁

SDRAM控制器軟核的Verilog設計

admin @ 2014-03-26 , reply:0

概述

   目前,在很多通信晶元及系統的開發中,常常需要用到存儲容量大、讀寫速度高的存儲器。在各種隨機存儲器件中,SDRAM的價格低、體積小、速度快、容量大,是比較理想的器件。……

    目前,在很多通信晶元及系統的開發中,常常需要用到存儲容量大、讀寫速度高的存儲器。在各種隨機存儲器件中,SDRAM 的價格低、體積小、速度快、容量大,是比較理想的器件。但是,與SRAM相比較,SDRAM的控制邏輯複雜,使用很不方便。為了解決這個矛盾,需要設計專用的SDRAM控制器,使系統用戶象使用SRAM一樣方便的使用SDRAM是十分必要的。考慮到控制器的通用性,本文提出了一種通用的SDRAM控制器的 Verilog設計,並給出了實現結果。

1   SDRAM的工作原理
    通常一個SDRAM中包含2個或4個BANK,每個BANK的存儲單元是按行和列定址的。由於這種特殊的存儲結構,與SRAM比較而言,SDRAM在工作的原理上有以下幾個特點:
    第一,SDRAM在上電100us-200us 后,必須由一個初始化過程來配置SDRAM的工作模式。初始化過程是由啟動指令流完成:首先由一個Precharge all bank指令完成對所有BANK的預充,然後是兩個或多個Auto Refresh指令,最後在模式配置指令下完成SDRAM內部模式設置寄存器的配置。模式寄存器的值控制著SDRAM的工作方式,詳細描述如表1所示。
 
     SDRAM模式寄存器:
    第二,SDRAM行列地址採用復用的方式減少了地址匯流排的密度。這樣以來,SDRAM在每次讀寫操作時,行列地址要鎖存。具體的,由ACTIVE命令激活要讀寫BANK,並鎖存行地址,然後在讀寫指令有效時鎖存列地址。
    第三,SDRAM的操作是通過 AP信號的組合指令字完成的。由於特殊的存儲結構,SDRAM操作指令比較多,不像SRAM一樣只有簡單的讀寫,其主要的指令字見表2。
 

2   通用SDRAM控制器的設計
2.1   總體設計框圖
    SDRAM控制器的內部結構如圖1所示,包括控制寄存器、初始化請求產生、刷新請求產生、指令仲裁器、指令解碼、數據通路六個模塊。控制寄存器控制SDRAM的各種工作模式,其值可以通過MCU介面配置。指令仲裁器對系統的讀寫請求信號sdram*rd*n、sdram*wr*n及初始化請求和刷新請求進行仲裁。仲裁的結果由指令解碼器解碼產生 SDRAM的操作指令字。用Sdram*busy信號指示SDRAM匯流排的閑忙,sdramready為SDRAM控制器對系統讀寫請求的響應指示,指示對數據有效的讀寫操作。
 
2.2   各模塊的設計
2.2.1   控制寄存器模塊
    包含控制工作模式的各種寄存器。系統用戶可以根據實際需要配置SDRA的工作模式。可以通過MCU介面來配置,也可以省去MCU介面而通過預設參數來配置。寄存器主要包括兩類:一是初始化模式控制寄存器,用於控制SDRAM初始化指令流的產生方式;二是SDRAM模式控制寄存器,用於SDRAM的刷新及其它操作指令參數的控制。
2.2.2   初始化請求產生模塊
    上電后初始化請求信號的產生延遲控制。由於系統上電100us-200us 后時鐘才能穩定,之後,SDRAM才可以開始初始化操作。為防止解碼毛刺的出現,採用格雷碼計數器來實現這一延遲的控制。系統複位結束后,啟動計數器,當計數器計到設定的值後計數值保持,同時解碼產生初始化的請求信號,在SDRAM初始化完成後請求變為無效。
2.2.3 刷新請求產生模塊
    根據模式寄存器的配置的頻率產生SDRAM的刷新請求信號。這部分電路也是採用格雷碼計數器實現的。計數器計到設定的值后產生刷新請求信號,同時返回到初值繼續計數。
2.2.4   指令仲裁器模塊
    對初始化請求、刷新請求和系統的讀寫請求進行優先順序仲裁,產生初始化響應initial*hold、刷新響應ref*hold和讀寫響應sdram*wr*hold。初始化操作只在上電時進行一次,它是SDRAM正常工作的基礎,所以它的優先順序最高。刷新請求的優先順序次高,讀寫請求的優先順序最低。當某一種操作正在執行時不會響應後來的請求。
2.2.5   指令解碼器模塊
    根據指令仲裁器的結果和SDRAM控制器模式寄存器對工作模式參數的設置,分別對初始化指令、刷新指令、讀寫指令進行解碼。解碼的結果就是輸出的控制指令字。當initial*hold=1時,解碼產生SDRAM的初始化指令流;當ref*hold=1時,解碼產生刷新指令;當sdram*wr*hold=1並且讀有效(Sdram*rd*n=0)或寫有效 (Sdram*wr*n=0)時,根據寄存器設置的指令參數解碼輸出BANK激活指令、讀指令及預充指令。此外,在SDRAM執行任何一種操作時,都用 sdram*busy=1來指示SDRAM忙;用sdram*busy=0來指示SDRAM空閑。用sdram*ready=1指示系統對SDRAM數據有效的讀寫操作。解碼模塊採用Verilog結合狀態機的設計方法,直觀清晰,提高了電路的設計周期。
     SDRAM控制器軟核設計的狀態機實現原理如圖2所示,包含了10個狀態,其中從Power on到Mode reg set為上電后SDRAM的初始化過程。其餘狀態為SDRAM的正常讀寫及刷新操作過程。
 
2.2.6   數據通路模塊
    是根據寄存器的設置及指令解碼的結果對把系統非復用的地址處理為SDRAM復用的地址,使得SDRAM的地址及數據和相應的操作指令在時序上同步。

3 介面時序
3.1 寫時序(Burst=1)
 
3.2 讀時序(CAS=3,Burst=1)
 

4   實現及應用
    本設計用Candence公司的 Ncverilog模擬工具進行了功能模擬。在模擬過程中,外部的SDRAM採用了Micron公司網上提供的1M×16、2M×2、4M×2的模擬模型,結果正確。最後,該控制器軟核作為SDRAM的介面電路嵌在了西安深亞公司EOS0121晶元設計中,採用Actel公司的Designer R1-2002工具進行了綜合布線,在ProASIC A500K180 208Pin的FPGA上得到了實現。目前該晶元已被多家公司採用,反映良好。從而也說明了該SDRAM控制器軟核性能可靠,工作穩定。
    由於採用了IP核的設計思想,只要修改少量的參數配置就可以支持多個廠家多種型號的SDRAM器件。對特定容量的SDRAM的特定工作模式而言,只要根據其器件參數進行設定,控制器就可以適用特定SDRAM的特定工作模式。

5   結束語
    Verilog硬體描述語言已越來越廣泛地應用於EDA領域,大多數EDA設計工程師都用它來進行ASIC設計和FPGA開發。用高級語言進行電路設計,可以靈活的修改參數,增加了電路設計的通用性和可移植性。最後,需要指出的是採用IP核的方法設計電路,既可以單獨使用,也可以嵌入到ASIC或FPGA的電路設計中去,大大縮短了產品開發周期,應該大力推廣。


[admin via 研發互助社區 ] SDRAM控制器軟核的Verilog設計已經有4283次圍觀

http://cocdig.com/docs/show-post-43153.html