基于VHDL的SDRAM控制器的實(shí)現(xiàn)
在高速實(shí)時(shí)或者非實(shí)時(shí)信號處理系統(tǒng)當(dāng)中,使用大容量存儲器實(shí)現(xiàn)數(shù)據(jù)緩存是一個(gè)必不可少的環(huán)節(jié),也是系統(tǒng)實(shí)現(xiàn)中的重點(diǎn)和難點(diǎn)之一。SDRAM(同步動態(tài)隨機(jī)訪問存儲器)具有價(jià)格低廉、密度高、數(shù)據(jù)讀寫速度快的優(yōu)點(diǎn),從而成為數(shù)據(jù)緩存的首選存儲介制裁。但是SDRAM存儲體結(jié)構(gòu)與RAM有較大差異,其控制時(shí)序和機(jī)制也較復(fù)雜,限制了SDRAM的使用。目前,雖然一些能家長微處理器提供了和SDRAM的透明接口,但其可擴(kuò)展性和靈活性不夠,難以滿足現(xiàn)實(shí)系統(tǒng)的要求,限制了SDRAM的使用。
本文引用地址:http://butianyuan.cn/article/159725.htm在詳細(xì)闡讀SDRAM數(shù)據(jù)文檔的前提下,參考ALTERA公司的IP core,利用可編程器件(CPLD,FPGA)設(shè)計(jì)了一種通用的SDRAM控制器。它具有很高的靈活性,可以方便地和其它數(shù)據(jù)采集分析系統(tǒng)中,如圖1所示。在該系統(tǒng)中,以SDRAM存儲陣列緩存中頻來的高速數(shù)據(jù)。存滿后,數(shù)據(jù)被慢速讀出至數(shù)據(jù)處理模塊。下面將對SDRAM控制模塊的設(shè)計(jì)進(jìn)行詳細(xì)的描述。
1 SDRAM內(nèi)存條的結(jié)構(gòu)
SDRAM內(nèi)存條由SDRAM內(nèi)存芯片構(gòu)成,根據(jù)內(nèi)存條的容量大小決定內(nèi)存條上內(nèi)存芯片的個(gè)數(shù)。現(xiàn)以MICRON公司生產(chǎn)的TIM16LSDT6464A型SDRAM內(nèi)存條為例,簡要介紹SDRAM的結(jié)構(gòu)。
MIT16LSDT6464A內(nèi)存條容量為512M Byte,由16片容量為32M Byte的內(nèi)存芯片MT46LC32M8A2構(gòu)成。16片內(nèi)存芯片被分為兩級,每個(gè)芯片的數(shù)據(jù)位寬為8bit.8片一組,64bit數(shù)據(jù)寬度。每個(gè)內(nèi)存芯片的數(shù)據(jù)線和控制均是復(fù)用的。對內(nèi)存條的讀寫操作,是以內(nèi)存芯片組為單位的,通過內(nèi)存條的片選信號S0、S1、S2、S3決定組號。S0、S2控制芯片組1,S1、S3控制芯片組2.
SDRAM內(nèi)存芯片的主要信號有控制信號、控制信號、數(shù)據(jù)信號,均為工作時(shí)鐘同步輸入、輸出信號。
控制信號主要有:CS(片選信號),CKE(時(shí)鐘使能信號),DQM(輸入、輸出使能信號),CAS、RAS、WE(讀寫控制命令字)。通過CAS、RAS、WE的各種邏輯組合,可產(chǎn)生各種控制命令。
地址信號有:BA0和BA1頁地址選擇信號,A0~A12地址信號,行、列地址選擇信號。通過分時(shí)復(fù)用決定地址是行地址還是列地址。在讀寫操作中,在地線上依次給出頁地址、行地址、列地址,最終確定存儲單元地址。
數(shù)據(jù)信號有:DQ0~DQ7,雙向數(shù)據(jù)。其使能受DQM控制。
SDRAM的工作模式通過LOAD MODE REGISTER命令對工作模式寄存器進(jìn)行設(shè)置來選擇。設(shè)置參量有Reserved(備用的人)Write Burst Mode(WB,寫突發(fā)模式)、Operation Mode(Op Mode,工作模式)、CAS Latency(CAS延遲)、Burst Type(BT,突發(fā)類型)、Burst Length(突發(fā)長度)。
2 SDRAM的基本讀寫操作
SDRAM的基本讀操作需要控制線和地址線相配合地發(fā)出一系列命令來完成。先發(fā)出BANK激活命令(ACTIVE),并鎖存相應(yīng)的BANK地址(BA0、BA1給出)和行地址(A0~A12給出)。BANK激活命令后必須等待大于tRCD(SDRAM的RAS到CAS的延遲指標(biāo))時(shí)間后,發(fā)出讀命令字。CL(CAS延遲值)個(gè)工作時(shí)鐘后,讀出數(shù)據(jù)依次出現(xiàn)在數(shù)據(jù)總線上。在讀操作的最后,要向SDRAM發(fā)出預(yù)充電(PRECHARGE)命令,以關(guān)閉已經(jīng)激活的頁。等待tRP時(shí)間(PRECHARGE)命令,以關(guān)閉已經(jīng)激活的頁。等待tRP時(shí)間(PRECHAREG命令后,相隔tRP時(shí)間,才可再次訪問該行)后,可以開始下一次的讀、寫操作。SDRAM的讀操作只有突發(fā)模式(Burst Mode),突發(fā)長度為1、2、4、8可選。
SDRAM的基本寫操作也需要控制線和地址線相配合地發(fā)出一系列命令來完成。先發(fā)出BANK激活命令(ACTIVE),并鎖存相應(yīng)的BANK地址(BA0、BA1給出)和行地址(A0~A12給出)。BANK激活命令后必須等待大于tRCD的時(shí)間后,發(fā)出寫命令字。寫命令可以立即寫入,需寫入數(shù)據(jù)依次送到DQ(數(shù)據(jù)線)上。在最后一個(gè)數(shù)據(jù)寫入后延遲tWR時(shí)間。發(fā)出預(yù)充電命令,關(guān)閉已經(jīng)激活的頁。等待tRP時(shí)間后,可以展開下一次操作。寫操作可以有突發(fā)寫和非突發(fā)寫兩種。突發(fā)長度同讀操作。
tRCD、tRP、tWR的具體要求,詳見SDRAM廠家提供的數(shù)據(jù)手冊。所等待的工作時(shí)鐘個(gè)數(shù)由tRCD、tRP、tWR的最小值和工作時(shí)鐘周期共同決定。
由以上介紹可以得出,SDRAM的讀、寫操作均由一系列命令組成,因此讀、寫操作是有時(shí)鐘損耗的,工作時(shí)鐘速率不等于SDRAM能達(dá)到的讀、寫速率。但是由于SDRAM有突發(fā)讀、寫模式,也就是說可以讀出和寫入一串地址連續(xù)的數(shù)據(jù),從而提高了效率。當(dāng)突發(fā)長度為整頁時(shí),讀、寫速度達(dá)到最快。隨機(jī)讀、寫速度的計(jì)算公式為:
furite/read=工作時(shí)鐘頻率(HzHzHhdkkdk ss dkkdkdkd,,,m,mddddd)×數(shù)據(jù)寬度(bytes)×突發(fā)讀寫長度/操作所需的時(shí)鐘數(shù)
為了提高存儲密度,SDRAM采用硅片電容存儲信息。電容總會有漏電流流過,所以為了不使信息丟失,必須定期地給電容刷新充電。外部控制邏輯必須按要求定期向內(nèi)存條發(fā)出刷新命令,保證在規(guī)定的時(shí)間內(nèi)對每一個(gè)單元都進(jìn)行刷新。
3 初始化操作
SDRAM在上電以后必須對其進(jìn)行初始化操作,具體操作如下:
?。?)系統(tǒng)在上電后要等待100~200μs.在待時(shí)間到了以后至少執(zhí)行一條空操作或者指令禁止操作。
?。?)對所有芯片執(zhí)行PRECHARGE命令,完成預(yù)充電。
?。?)向每組內(nèi)存芯片發(fā)出兩條AUTO REFRESH命令,使SDRAM芯片內(nèi)部的刷新計(jì)數(shù)器可以進(jìn)入正常運(yùn)行狀態(tài)。
?。?)執(zhí)行LOAD MODE REGISTER命令,完成對SDRAM工作模式的設(shè)定。
完成以上步驟后,SDRAM進(jìn)入正常工作狀態(tài),等待控制器對其進(jìn)行讀、寫和刷新等操作。
4 SDRAM控制器設(shè)計(jì)
4.1 功能說明
在以SDRAM作為緩存的系統(tǒng)中,使用可編程器件對其進(jìn)行控制具有很強(qiáng)的靈活性。為了使設(shè)計(jì)具有模塊化和可重復(fù)使用的優(yōu)點(diǎn),設(shè)計(jì)了一個(gè)簡化的SDRAM接口電路。這樣就屏蔽掉了SDRAM操作的復(fù)雜性,而其它邏輯模塊可通過接口電路對SDRAM進(jìn)行訪問。此外,由于整個(gè)SDRAM控制器用VHDL語言編寫,只要對其進(jìn)行簡單的修改就可以滿足不同的需求,具有很強(qiáng)的靈活性。
參照圖2,SDRAM控制器完成的主要功能是對CMD[2:0]的命令字和ADDR端的地址進(jìn)行解析,產(chǎn)生相應(yīng)的SDRAM的控制時(shí)序。
CLK為輸入的工作時(shí)鐘端口。
評論