基于VHDL的SDRAM控制器的實(shí)現(xiàn)
ADDR為輸入地址端口。控制器將其解析為對(duì)應(yīng)的片選、頁(yè)以及行、列地址。以一條MIT16LSDT6464A內(nèi)存條為例,其大小為512Mbyte(2 29 byte)。數(shù)據(jù)位寬為64bit(8byte),則地址線ADDR應(yīng)為26根??梢赃@樣映射地址:ADDR[25]對(duì)應(yīng)內(nèi)存芯片組號(hào);ADDR[24:23]對(duì)應(yīng)頁(yè)號(hào);ADDR[22:10]對(duì)應(yīng)行號(hào);ADDR[9:0]對(duì)應(yīng)列號(hào)。
DATAIN為寫(xiě)入數(shù)據(jù)端口,64bit位寬。
DATAOUT為讀出數(shù)據(jù)端口,64bit位寬。
RD_OE為讀出數(shù)據(jù)使能端口,當(dāng)其為1時(shí),表示從下一個(gè)時(shí)鐘起,數(shù)據(jù)將依次出現(xiàn)在DATAOUT口上。
WR_OE為寫(xiě)入數(shù)據(jù)使能端口,當(dāng)其為1時(shí),寫(xiě)入數(shù)據(jù)應(yīng)該依次出現(xiàn)在DATAIN口上。
CMD[2:0]為命令輸入端口,分別表示讀、寫(xiě)內(nèi)存等待操作。其中,CMD=“000”表示無(wú)操作,內(nèi)存條交給控制器管理,定其完成刷新工作;REFRESH命令由外部邏輯指定特刷新的內(nèi)存芯片信號(hào),組號(hào)由ADDR的低位給出;LOAD_MODE命令執(zhí)行內(nèi)存條工作寄存器初始化工作,初始化值由DATAIN的低13位決定,內(nèi)存芯片組號(hào)同樣由ADDR的低位給出;同理,ADDR的低位也決定了預(yù)充電操作所對(duì)應(yīng)的內(nèi)存芯片組號(hào)。
CMDACK為命令應(yīng)答端口,表示命令已經(jīng)被執(zhí)行,使外部邏輯可以向控制器發(fā)出下一個(gè)動(dòng)作。
4.2 狀態(tài)機(jī)
圖3是SDRAM控制器的狀態(tài)轉(zhuǎn)移圖。狀態(tài)圖中的各個(gè)狀態(tài)內(nèi)均包含一系列的子狀態(tài)轉(zhuǎn)移(對(duì)SDRAM內(nèi)存條發(fā)出連續(xù)命令),每個(gè)子狀態(tài)完成一個(gè)功能操作。初始化操作包括前面介紹的內(nèi)存條初始化全過(guò)程,工作寄存器的默認(rèn)值在VHDL程序中指定。以后可以通過(guò)LOAD_MODE命令改變內(nèi)存條的工作模式。初始化結(jié)束后,內(nèi)存條進(jìn)入Idel狀態(tài),刷新計(jì)數(shù)器開(kāi)始工作,控制器開(kāi)始響應(yīng)外部邏輯的操作請(qǐng)求。
刷新計(jì)數(shù)器操作是一個(gè)獨(dú)立的進(jìn)程(process)。刷新計(jì)數(shù)器的初值由內(nèi)存芯片要求、內(nèi)存條個(gè)數(shù)和控制器工作頻率共同決定。例如,在本次設(shè)計(jì)中,所采用的MT48LC32M8A2內(nèi)存芯片要求在64ms內(nèi)夏至少刷新8196次。而MIT16LSDT6464A型內(nèi)存條共有兩組內(nèi)存芯片,也就是要求在64ms內(nèi)要發(fā)出8196×2條自刷新(AUTO REFRESH)指令。系統(tǒng)工作時(shí)鐘為46.66MHz,因此控制單條MIT16LSDT6464A時(shí),刷新計(jì)數(shù)器初值至多為(64ms/8196/2)×6、、46.66MHz,即182.開(kāi)始工作后,每當(dāng)刷新計(jì)數(shù)器值減為0,便依次向內(nèi)存芯片組發(fā)出刷新命令,保證SDRAM中的數(shù)據(jù)不丟失。刷新請(qǐng)求是內(nèi)存請(qǐng)求;讀和寫(xiě)操作是外部請(qǐng)求。在Idel狀態(tài)中有請(qǐng)求仲裁邏輯,當(dāng)內(nèi)部和外部請(qǐng)求同時(shí)出現(xiàn)時(shí),優(yōu)先保證內(nèi)部請(qǐng)求,狀態(tài)轉(zhuǎn)移至刷新操作。當(dāng)刷新操作結(jié)束時(shí),重新返回Idel狀態(tài),開(kāi)始響應(yīng)外部請(qǐng)求。響應(yīng)外部請(qǐng)求后,應(yīng)答信號(hào)CMDBAK出現(xiàn)正脈沖。它通知外部邏輯,請(qǐng)求已經(jīng)被響應(yīng),可以撤銷(xiāo)請(qǐng)求。在刷新操作狀態(tài)中,也有許數(shù)器計(jì)數(shù),其大小等于控制器管理的內(nèi)存芯片信號(hào)。記錄并判斷此次刷新操作所對(duì)應(yīng)的內(nèi)存芯片的組號(hào),產(chǎn)生相應(yīng)的片選信號(hào)。
響應(yīng)讀、寫(xiě)請(qǐng)求后,狀態(tài)從Idel轉(zhuǎn)移到讀、寫(xiě)狀態(tài)。同時(shí)讀、寫(xiě)地址和寫(xiě)入的數(shù)據(jù)鎖存至控制器。控制器由讀寫(xiě)地址解析出CS信號(hào)、頁(yè)地址、行地址、列地址。向內(nèi)存條發(fā)出一系列命令(ACTIVE,READ/WRITE with AUTO PRECHARGE),完成讀寫(xiě)操作,為了簡(jiǎn)化,此控制器向SDRAM發(fā)出的都是帶有AUTO PRECHARGE的讀、寫(xiě)指令,然后由SDRAM內(nèi)部邏輯自動(dòng)在讀、寫(xiě)過(guò)程末期發(fā)出PRECHARGE指令(在發(fā)READ/WRITE指令時(shí),地址線A10賦值1,打開(kāi)AUTO PRECHARGE功能)。圖4和圖5分別是利用該控制器完成讀、寫(xiě)操作的時(shí)序圖。讀操作的CAS延遲為兩個(gè)時(shí)鐘。
該SDRAM控制器在中頻數(shù)據(jù)海量存儲(chǔ)系統(tǒng)中已得到應(yīng)用。數(shù)據(jù)接收邏輯將接收到的中頻采樣數(shù)據(jù)整理后(拼接成64bit),通過(guò)SDRAM控制器存入SDRAM陣列。存滿(mǎn)后,數(shù)據(jù)輸出邏輯將中頻數(shù)據(jù)通過(guò)SDRAM控制器從內(nèi)存條中取出,傳輸至上位機(jī)。其VHDL代碼在ATERA公司的FPGA--EP1C6Q240中通過(guò)了Quartus II的仿真、綜合和布局、布線。占用499個(gè)logic cellk,消耗了8%的邏輯資源。留有豐富的資源可提供給其它邏輯單元使用。
上面介紹了SDRAM的基本工作原理和一種簡(jiǎn)單的通用SDRAM控制器的實(shí)現(xiàn)。SDRAM的控制機(jī)制比較復(fù)雜,具有多種突發(fā)讀、寫(xiě)方式和工作模式(詳細(xì)內(nèi)容請(qǐng)參考SDRAM的數(shù)據(jù)手冊(cè))。但是,可以根據(jù)實(shí)現(xiàn)應(yīng)用,實(shí)現(xiàn)其中的一個(gè)子集(基本讀、寫(xiě)、刷新操作)來(lái)滿(mǎn)足實(shí)際系統(tǒng)的需要。用SDRAM實(shí)現(xiàn)大容量的高速數(shù)據(jù)緩存具有明顯的優(yōu)勢(shì),使用可編程器件實(shí)現(xiàn)SDRAM控制器則使之具有更高的靈活性,其應(yīng)用前景廣闊。
評(píng)論