目前,在很多通信芯片及系統的開發中,常常需要用到存儲容量大、讀寫速度高的存儲器。在各種隨機存儲器件中,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控制器的內部結構,包括控制寄存器、初始化請求產生、刷新請求產生、指令仲裁器、指令譯碼、數據通路六個模塊。控制寄存器控制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的電路設計中去,大大縮短了產品開發周期,應該大力推廣。
編輯:jq
-
控制器
+關注
關注
112文章
16448瀏覽量
179462 -
SDRAM
+關注
關注
7文章
430瀏覽量
55370 -
寄存器
+關注
關注
31文章
5363瀏覽量
121178 -
AP
+關注
關注
0文章
106瀏覽量
48991
原文標題:SDRAM控制器軟核的Verilog設計
文章出處:【微信號:gh_9d70b445f494,微信公眾號:FPGA設計論壇】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論