FPGA系統(tǒng)設(shè)計(jì)的仿真驗(yàn)證之:SDRAM讀寫(xiě)控制的實(shí)現(xiàn)與Modelsim仿真
1.實(shí)例的主要內(nèi)容
本節(jié)旨在通過(guò)分析SDRAM控制器,介紹了SDRAM的基本工作模式。最后使用Modelsim對(duì)讀寫(xiě)控制器進(jìn)行仿真,幫助讀者進(jìn)一步了解一個(gè)真實(shí)的器件模塊是如何進(jìn)行Modelsim仿真的。
2.實(shí)例目標(biāo)
通過(guò)本實(shí)例,讀者應(yīng)達(dá)到下面的目標(biāo)。
· 了解SDRAM存儲(chǔ)器的工作模式。
· 熟悉Modelsim仿真的基本流程.
· 可獨(dú)立使用Modelsim仿真新工程。
SDRAM簡(jiǎn)介
在高速實(shí)時(shí)或者非實(shí)時(shí)信號(hào)處理系統(tǒng)當(dāng)中,常常使用大容量存儲(chǔ)器實(shí)現(xiàn)數(shù)據(jù)緩存。而大容量存儲(chǔ)器的控制與使用是整個(gè)系統(tǒng)實(shí)現(xiàn)過(guò)程中的重點(diǎn)和難點(diǎn)之一。
SDRAM(同步動(dòng)態(tài)隨即訪問(wèn)存儲(chǔ)器)具有價(jià)格低廉、精密度高、讀寫(xiě)速度快等優(yōu)點(diǎn),從而成為數(shù)據(jù)緩存器的首選存儲(chǔ)介質(zhì)。但是SDRAM的結(jié)構(gòu)與SRAM有很大的差異,其控制時(shí)序和機(jī)制也比較復(fù)雜,這就限制了SDRAM的使用范圍。
下面我們首先對(duì)SDRAM進(jìn)行簡(jiǎn)單介紹。
1.SDRAM信號(hào)
SDRAM器件的信號(hào)可以分為控制、地址和數(shù)據(jù)信號(hào)3類,具體定義如下表所示。
SDRAM信號(hào)
2.SDRAM工作特性
通常一個(gè)SDRAM 中包含幾個(gè)Bank,每個(gè)Bank的存儲(chǔ)單元是按行和列尋址的。由于這種特殊的存儲(chǔ)結(jié)構(gòu),SDRAM有以下幾個(gè)工作特性。
(1)SDRAM 的初始化。
SDRAM 在上電100~200μs 后,必須由一個(gè)初始化進(jìn)程來(lái)配置SDRAM的模式寄存器,模式寄存器的值決定著SDRAM 的工作模式。
(2)訪問(wèn)存儲(chǔ)單元。
為減少I/O 引腳數(shù)量,SDRAM 復(fù)用了地址線。所以在讀寫(xiě)SDRAM 時(shí),先由ACTIVE 命令激活要讀寫(xiě)的Bank,并鎖存行地址,然后在讀寫(xiě)指令有效時(shí)鎖存列地址。一旦Bank被激活后只有執(zhí)行一次預(yù)充命令后才能再次激活同一Bank。
(3)刷新和預(yù)充。
為了提高存儲(chǔ)密度, SDRAM 采用硅片電容存儲(chǔ)數(shù)據(jù),電容總是傾向于放電,因此必須有定時(shí)的刷新周期以避免數(shù)據(jù)丟失。刷新周期可由(最小刷新周期÷時(shí)鐘周期)計(jì)算獲得。對(duì)Bank預(yù)充電或者關(guān)閉已激活的Bank,可預(yù)充特定Bank 也可同時(shí)作用于所有Bank,A10、BA0和BA1用于選擇Bank。
(4)操作控制。
SDRAM 的具體控制命令由一些專用控制引腳和地址線輔助完成。CS、RAS、CAS 和WR 在時(shí)鐘上升沿的狀態(tài)決定具體操作動(dòng)作,地址線和Bank選擇控制線在部分操作動(dòng)作中作為輔助參數(shù)輸入。
由于特殊的存儲(chǔ)結(jié)構(gòu),SDRAM 操作指令比較多,不像SRAM 一樣只有簡(jiǎn)單的讀寫(xiě),具體操作指令如下表所示。
SDRAM命令真值表
由表可以看到,雖然SDRAM的容量大、速度快,但是存在存儲(chǔ)操作困難的問(wèn)題。一般的解決方案有兩種,一是直接控制SDRAM的讀寫(xiě)時(shí)序?qū)崿F(xiàn)數(shù)據(jù)的存儲(chǔ)和讀取,二是編寫(xiě)一個(gè)SDRAM的讀寫(xiě)控制器,將SDRAM的讀寫(xiě)簡(jiǎn)化成SRAM形式,通過(guò)幾個(gè)命令完成SDRAM的讀寫(xiě)。
3.SDRAM讀寫(xiě)控制器
Xilinx、Altera、Lattice等較大的FPGA制造廠商都編寫(xiě)了自己的SDRAM接口控制器。讀者可以到官方網(wǎng)站去申請(qǐng)相關(guān)的控制器源代碼。下面簡(jiǎn)單介紹其中一種,如下圖所示是該SDRAM控制器總體設(shè)計(jì)框圖和外部接口信號(hào)。
在上圖中,控制器右端接口信號(hào)均為直接與SDRAM 對(duì)應(yīng)管腳相連的信號(hào)
控制器左端的接口信號(hào)為與FPGA 相連的系統(tǒng)控制接口信號(hào),定義如下。
· CLK:系統(tǒng)時(shí)鐘信號(hào)。
· ADDR:系統(tǒng)給出的SDRAM 地址信號(hào)。
· DATAIN:系統(tǒng)用于寫(xiě)入SDRAM 的數(shù)據(jù)信號(hào)。
· DATAOUT:系統(tǒng)用于從SDRAM讀出的數(shù)據(jù)信號(hào)。
· CMD[1:0]、CMDACK:系統(tǒng)和控制器的命令交互信號(hào),參見(jiàn)表7.3。
· DM:數(shù)據(jù)Mask信號(hào)。
一般來(lái)說(shuō),SDRAM的讀寫(xiě)控制時(shí)序可以分為初始化、寫(xiě)寄存器、自動(dòng)刷新、突發(fā)模式讀、突發(fā)模式寫(xiě)、整頁(yè)讀以及整頁(yè)寫(xiě)等主要操作。具體的時(shí)序圖可以查閱相關(guān)的器件數(shù)據(jù)手冊(cè),這里不再列出。
SDRAM的讀寫(xiě)控制也可以由如圖7.34所示的讀寫(xiě)狀態(tài)機(jī)表示。
在FPGA中,實(shí)現(xiàn)如下圖所示的狀態(tài)機(jī),再利用已有的SDR SDRAM控制器即可實(shí)現(xiàn)對(duì)SDRAM器件的控制。
SDRAM控制器的Modelsim仿真
(1)打開(kāi)ModelSim軟件。
(2)創(chuàng)建工程。
如下圖所示,在Modelsim中創(chuàng)建新工程,并設(shè)置工程的相關(guān)屬性。
(3)添加設(shè)計(jì)輸入。
若要?jiǎng)?chuàng)建新的文件就選擇【Create New File】圖標(biāo),若要添加已經(jīng)存在的文件就選擇【Add Existing File】圖標(biāo),如圖7.36所示。本實(shí)例中使用已經(jīng)存在的SDRAM控制器源文件作為設(shè)計(jì)輸入,添加后,在Workspace瀏覽器中可以看到如下圖的設(shè)計(jì)輸入列表。
(4)編譯設(shè)計(jì)輸入。
如下圖所示,在任意一個(gè)源文件上單擊右鍵,選擇“Compile”/“Compile All”,對(duì)所有的源文件進(jìn)行編譯。
編譯后,若有錯(cuò)誤,Modelsim會(huì)在信息欄中顯示出來(lái)。這時(shí)只要雙擊該錯(cuò)誤,ModelSim就會(huì)自動(dòng)打開(kāi)該錯(cuò)誤所在的文件,并定位到出現(xiàn)錯(cuò)誤所在的位置附近。若編譯正確通過(guò),源文件后面的藍(lán)色問(wèn)號(hào)就替換成為綠色的對(duì)號(hào),如上圖所示。
(5)仿真。
在Workspace瀏覽器中選擇“Library”復(fù)選頁(yè),單擊Work左邊的小加號(hào)。在彈出的子菜單里面找到仿真模塊“sdram_test_tb”。雙擊或右鍵選擇“Simulate”選項(xiàng),ModelSim就會(huì)自動(dòng)運(yùn)行仿真,如下圖所示。
(6)觀察波形。
在Workspace瀏覽器中選擇“Sim”復(fù)選頁(yè),可以看到仿真模塊的實(shí)例列表,如下圖所示。
如下圖所示,右鍵單擊頂層測(cè)試模塊,選擇“Add”/“Add to Wave”選項(xiàng),將該仿真模塊的所有實(shí)例添加至波形觀察器中。
添加后,ModelSim將會(huì)自動(dòng)打開(kāi)一個(gè)波形觀察器,并將頂層測(cè)試模塊的所有寄存器和接口添加進(jìn)去。回到ModelSim的界面,在命令輸入窗口中鍵入“run 20us”,開(kāi)始執(zhí)行仿真,如下圖所示。
執(zhí)行仿真后,經(jīng)過(guò)相應(yīng)的仿真時(shí)間,就可以在波形觀察器中看見(jiàn)如圖7.44所示的仿真結(jié)果。這個(gè)就是通過(guò)利用已有的SDRAM控制器及SDRAM器件模型,由用戶編寫(xiě)對(duì)SDRAM控制器的狀態(tài)機(jī)控制后得到的仿真結(jié)果。
小結(jié)
本節(jié)對(duì)數(shù)字系統(tǒng)中常用的存儲(chǔ)器SDRAM做了初步的介紹,并在Modelsim中實(shí)現(xiàn)了對(duì)SDRAM控制器的仿真。通過(guò)這個(gè)實(shí)例,讀者能夠掌握分立器件是如何與FPGA邏輯實(shí)現(xiàn)Modelsim聯(lián)合仿真的。
在大型的系統(tǒng)設(shè)計(jì)中,在系統(tǒng)硬件實(shí)現(xiàn)前對(duì)系統(tǒng)進(jìn)行仿真是非常必要的。而這個(gè)仿真又不僅僅局限在FPGA等可編程邏輯器件內(nèi)部,與之相關(guān)的分立器件也是系統(tǒng)仿真的重要組成部分。因此掌握分立器件的聯(lián)合仿真是一個(gè)非常重要的技能。
溫馨提示:明德?lián)P2023推出了全新課程——邏輯設(shè)計(jì)基本功修煉課,降低學(xué)習(xí)FPGA門檻的同時(shí),增加了學(xué)習(xí)的趣味性,并組織了考試贏積分活動(dòng)
http://www.cqqtmy.cn/ffkc/415.html
(點(diǎn)擊→了解課程詳情?)
明德?lián)P除了培訓(xùn)學(xué)習(xí)還有項(xiàng)目承接業(yè)務(wù),擅長(zhǎng)的項(xiàng)目主要包括的方向有以下幾個(gè)方面:
1. MIPI視頻拼接
2. SLVS-EC轉(zhuǎn)MIPI接口(IMX472 IMX492)
3. PCIE采集系統(tǒng)
4. 圖像項(xiàng)目
5. 高速多通道ADDA系統(tǒng)
6. 基于FPGA板卡研發(fā)
7. 多通道高靈敏電荷放大器
8. 射頻前端
需要了解相關(guān)信息可以聯(lián)系:易老師13112063618(微信同號(hào))