7.6 典型實例13:SDRAM讀寫控制的實現與Modelsim仿真 7.6.1 實例的內容及目標 1.實例的主要內容 本節旨在通過分析SDRAM控制器,介紹了SDRAM的基本工作模式。最后使用Modelsim對讀寫控制器進行仿真,幫助讀者進一步了解一個真實的器件模塊是如何進行Modelsim仿真的。 2.實例目標 通過本實例,讀者應達到下面的目標。 · 了解SDRAM存儲器的工作模式。 · 熟悉Modelsim仿真的基本流程。 · 可獨立使用Modelsim仿真新工程。 7.6.2 SDRAM簡介 在高速實時或者非實時信號處理系統當中,常常使用大容量存儲器實現數據緩存。而大容量存儲器的控制與使用是整個系統實現過程中的重點和難點之一。 SDRAM(同步動態隨即訪問存儲器)具有價格低廉、精密度高、讀寫速度快等優點,從而成為數據緩存器的首選存儲介質。但是SDRAM的結構與SRAM有很大的差異,其控制時序和機制也比較復雜,這就限制了SDRAM的使用范圍。 下面我們首先對SDRAM進行簡單介紹。 1.SDRAM信號 SDRAM器件的信號可以分為控制、地址和數據信號3類,具體定義如表7.2所示。 表7.2 SDRAM信號 信 號 名信 號 類 型信 號 描 述 CS輸入Chip Enable,使能 CLK輸入Clock,時鐘 CKE輸入Clock Enable,時鐘使能 RAS輸入Row Address Strobe,行地址選通 續表 信 號 名信 號 類 型信 號 描 述 CAS輸入Column Address Strobe,列地址選通 WE輸入Write Enable,寫使能 DQML、DQMH輸入Data Mask for Lower,Upper Bytes,高低字節屏蔽 BA輸入Bank Address,Bank地址 A[0:10]輸入Address,地址 DQ[0:15]雙向Data,數據 2.SDRAM工作特性 通常一個SDRAM 中包含幾個Bank,每個Bank的存儲單元是按行和列尋址的。由于這種特殊的存儲結構,SDRAM有以下幾個工作特性。 (1)SDRAM 的初始化。 SDRAM 在上電100~200μs 后,必須由一個初始化進程來配置SDRAM的模式寄存器,模式寄存器的值決定著SDRAM 的工作模式。 (2)訪問存儲單元。 為減少I/O 引腳數量,SDRAM 復用了地址線。所以在讀寫SDRAM 時,先由ACTIVE 命令激活要讀寫的Bank,并鎖存行地址,然后在讀寫指令有效時鎖存列地址。一旦Bank被激活后只有執行一次預充命令后才能再次激活同一Bank。 (3)刷新和預充。 為了提高存儲密度, SDRAM 采用硅片電容存儲數據,電容總是傾向于放電,因此必須有定時的刷新周期以避免數據丟失。刷新周期可由(最小刷新周期÷時鐘周期)計算獲得。對Bank預充電或者關閉已激活的Bank,可預充特定Bank 也可同時作用于所有Bank,A10、BA0和BA1用于選擇Bank。 (4)操作控制。 SDRAM 的具體控制命令由一些專用控制引腳和地址線輔助完成。CS、RAS、CAS 和WR 在時鐘上升沿的狀態決定具體操作動作,地址線和Bank選擇控制線在部分操作動作中作為輔助參數輸入。 由于特殊的存儲結構,SDRAM 操作指令比較多,不像SRAM 一樣只有簡單的讀寫,具體操作指令如表7.3所示。 表7.3 SDRAM命令真值表 功 能命 令 字CSRASCASWEBAA10A[0:9] 取消器件選擇DSELHXXXXXX 無操作NOPLHHHXXX 讀操作READLHLHVLV 讀等待/自動預充電READAPLHLHVHV 續表 功 能命 令 字CSRASCASWEBAA10A[0:9] 寫操作WRITELHLLVLV 寫等待/自動預充電WRITEAPLHLLVHV Bank激活ACTLLHHVVV 對指定Bank預充電PRELLHLVLX 對所有Bank預充電PALLLLHLXHX 自動刷新CBRLLLHXXX 加載模式寄存器MRSLLLLVVV 由表7.3可以看到,雖然SDRAM的容量大、速度快,但是存在存儲操作困難的問題。一般的解決方案有兩種,一是直接控制SDRAM的讀寫時序實現數據的存儲和讀取,二是編寫一個SDRAM的讀寫控制器,將SDRAM的讀寫簡化成SRAM形式,通過幾個命令完成SDRAM的讀寫。 3.SDRAM讀寫控制器 Xilinx、Altera、Lattice等較大的FPGA制造廠商都編寫了自己的SDRAM接口控制器。讀者可以到官方網站去申請相關的控制器源代碼。下面簡單介紹其中一種,如圖7.33所示是該SDRAM控制器總體設計框圖和外部接口信號。 在圖7.33中,控制器右端接口信號均為直接與SDRAM 對應管腳相連的信號,在表7.2中已做介紹,不再重復。 控制器左端的接口信號為與FPGA 相連的系統控制接口信號,定義如下。 · CLK:系統時鐘信號。 · ADDR:系統給出的SDRAM 地址信號。 · DATAIN:系統用于寫入SDRAM 的數據信號。 · DATAOUT:系統用于從SDRAM讀出的數據信號。 · CMD[1:0]、CMDACK:系統和控制器的命令交互信號,參見表7.3。 · DM:數據Mask信號。 一般來說,SDRAM的讀寫控制時序可以分為初始化、寫寄存器、自動刷新、突發模式讀、突發模式寫、整頁讀以及整頁寫等主要操作。具體的時序圖可以查閱相關的器件數據手冊,這里不再列出。 SDRAM的讀寫控制也可以由如圖7.34所示的讀寫狀態機表示。 在FPGA中,實現如圖7.34所示的狀態機,再利用已有的SDR SDRAM控制器即可實現對SDRAM器件的控制。 圖7.34 SDRAM讀寫狀態機 7.6.3 SDRAM控制器的Modelsim仿真 (1)打開ModelSim軟件。 (2)創建工程。 如圖7.35所示,在Modelsim中創建新工程,并設置工程的相關屬性。 圖7.35 創建工程 (3)添加設計輸入。 若要創建新的文件就選擇【Create New File】圖標,若要添加已經存在的文件就選擇【Add Existing File】圖標,如圖7.36所示。本實例中使用已經存在的SDRAM控制器源文件作為設計輸入,添加后,在Workspace瀏覽器中可以看到如圖7.37的設計輸入列表。 圖7.36 添加設計輸入 圖7.37 SDRAM設計輸入列表 (4)編譯設計輸入。 如圖7.38所示,在任意一個源文件上單擊右鍵,選擇“Compile”/“Compile All”,對所有的源文件進行編譯。 編譯后,若有錯誤,Modelsim會在信息欄中顯示出來。這時只要雙擊該錯誤,ModelSim就會自動打開該錯誤所在的文件,并定位到出現錯誤所在的位置附近。若編譯正確通過,源文件后面的藍色問號就替換成為綠色的對號,如圖7.39所示。 (5)仿真。 在Workspace瀏覽器中選擇“Library”復選頁,單擊Work左邊的小加號。在彈出的子菜單里面找到仿真模塊“sdram_test_tb”。雙擊或右鍵選擇“Simulate”選項,ModelSim就會自動運行仿真,如圖7.40所示。 圖7.39 編譯正確通過 圖7.40 仿真 (6)觀察波形。 在Workspace瀏覽器中選擇“Sim”復選頁,可以看到仿真模塊的實例列表,如圖7.41所示。 圖7.41 仿真模塊實例列表 如圖7.42所示,右鍵單擊頂層測試模塊,選擇“Add”/“Add to Wave”選項,將該仿真模塊的所有實例添加至波形觀察器中。 添加后,ModelSim將會自動打開一個波形觀察器,并將頂層測試模塊的所有寄存器和接口添加進去;氐組odelSim的界面,在命令輸入窗口中鍵入“run 20us”,開始執行仿真,如圖7.43所示。 圖7.42 添加實例至波形觀察器 圖7.43 執行仿真 執行仿真后,經過相應的仿真時間,就可以在波形觀察器中看見如圖7.44所示的仿真結果。這個就是通過利用已有的SDRAM控制器及SDRAM器件模型,由用戶編寫對SDRAM控制器的狀態機控制后得到的仿真結果。 圖7.44 SDRAM控制器仿真結果 7.6.4 小結 本節對數字系統中常用的存儲器SDRAM做了初步的介紹,并在Modelsim中實現了對SDRAM控制器的仿真。通過這個實例,讀者能夠掌握分立器件是如何與FPGA邏輯實現Modelsim聯合仿真的。 在大型的系統設計中,在系統硬件實現前對系統進行仿真是非常必要的。而這個仿真又不僅僅局限在FPGA等可編程邏輯器件內部,與之相關的分立器件也是系統仿真的重要組成部分。因此掌握分立器件的聯合仿真是一個非常重要的技能。 |