《電子技術(shù)應(yīng)用》
您所在的位置:首頁(yè) > 其他 > 設(shè)計(jì)應(yīng)用 > 一種DDR SDRAM控制器的設(shè)計(jì)
一種DDR SDRAM控制器的設(shè)計(jì)
來(lái)源:微型機(jī)與應(yīng)用2013年第8期
金新強(qiáng)1, 白雪飛1, 張 璠2
(1. 中國(guó)科學(xué)技術(shù)大學(xué) 電子科學(xué)與技術(shù)系, 安徽 合肥230027; 2. 中國(guó)科學(xué)技術(shù)大學(xué) 信息
摘要: 在介紹DDR SDRAM控制器設(shè)計(jì)關(guān)鍵技術(shù)的基礎(chǔ)上,討論了一種DDR SDRAM控制器的設(shè)計(jì)方法。通過(guò)一種優(yōu)化的地址映射策略提高了突發(fā)訪問(wèn)效率,采用0.18 ?滋m CMOS工藝流片實(shí)現(xiàn)。所設(shè)計(jì)的DDR SDRAM控制器芯片在PCB板級(jí)測(cè)試中達(dá)到預(yù)期設(shè)計(jì)要求。
Abstract:
Key words :

摘 要: 在介紹DDR SDRAM控制器設(shè)計(jì)關(guān)鍵技術(shù)的基礎(chǔ)上,討論了一種DDR SDRAM控制器的設(shè)計(jì)方法。通過(guò)一種優(yōu)化的地址映射策略提高了突發(fā)訪問(wèn)效率,采用0.18 μm CMOS工藝流片實(shí)現(xiàn)。所設(shè)計(jì)的DDR SDRAM控制器芯片在PCB板級(jí)測(cè)試中達(dá)到預(yù)期設(shè)計(jì)要求。
關(guān)鍵詞: DDR SDRAM;控制器;突發(fā)訪問(wèn);地址映射

     雙倍數(shù)據(jù)速率同步動(dòng)態(tài)隨機(jī)存儲(chǔ)器DDR SDRAM (Double Data Rate SDRAM) 以其大容量、高速率和良好的兼容性在通用計(jì)算機(jī)系統(tǒng)和嵌入式系統(tǒng)領(lǐng)域得到了廣泛應(yīng)用,越來(lái)越多的片上系統(tǒng)(SoC)中集成了DDR SDRAM控制器。
    DDR SDRAM是電子設(shè)備工程聯(lián)合委員會(huì)JEDEC制定的內(nèi)存技術(shù)標(biāo)準(zhǔn)[1],采用差分時(shí)鐘技術(shù),具有兩倍數(shù)據(jù)預(yù)讀取,在時(shí)鐘的上升沿和下降沿各傳輸一次數(shù)據(jù),數(shù)據(jù)傳輸速率為系統(tǒng)時(shí)鐘的兩倍,從而大大提高了數(shù)據(jù)傳輸速率。
1 DDR SDRAM控制器的關(guān)鍵技術(shù)
    本文設(shè)計(jì)的DDR SDRAM控制器支持以下操作: 空操作(Nop)、激活操作(Active)、突發(fā)寫(Burst Write)、突發(fā)讀(Burst Read)、自動(dòng)刷新(Auto Refresh)、預(yù)充電(Precharge)、模式寄存器配置(Mode Register Set)等。所有的操作命令都通過(guò)信號(hào)線ras_n、cas_n和we_n共同控制[2]。DDR SDRAM控制器狀態(tài)轉(zhuǎn)換圖如圖1所示。

    初始化完成之后,控制器通過(guò)ras_n、cas_n和we_n發(fā)送Bank激活命令,然后片選和Bank尋址,同時(shí)地址線發(fā)送行地址選通行。等待tRCD后,發(fā)送突發(fā)讀寫命令,同時(shí)地址線發(fā)送起始列地址,其中A10為帶自動(dòng)預(yù)充電使能位,如果自動(dòng)預(yù)充電使能位有效,則在突發(fā)傳輸結(jié)束后自動(dòng)預(yù)充電,否則不進(jìn)行自動(dòng)預(yù)充電。預(yù)充電用來(lái)關(guān)閉某個(gè)打開的行或者所有打開的行。被預(yù)充電的行可以在tRP之后重新被訪問(wèn)[3]。
    刷新操作分為兩種:自動(dòng)刷新(Auto Refresh)與自刷新(Self Refresh)。自動(dòng)刷新命令用來(lái)周期性地刷新DDR SDRAM,以保持其內(nèi)部的數(shù)據(jù)不丟失。由于刷新是基于行進(jìn)行的,64 ms之后再次對(duì)同一行進(jìn)行刷新,如此周而復(fù)始進(jìn)行循環(huán)刷新。自刷新主要用于休眠模式低功耗狀態(tài)下的數(shù)據(jù)保存,在發(fā)出自刷新命令時(shí),將時(shí)鐘使能cke 置于無(wú)效狀態(tài)進(jìn)入自刷新模式,此時(shí)不再依靠系統(tǒng)時(shí)鐘工作,而是根據(jù)內(nèi)部的時(shí)鐘進(jìn)行刷新操作[4]。
2 DDR SDRAM控制器的設(shè)計(jì)
    DDR SDRAM控制器的功能包括:初始化DDR SDRAM,簡(jiǎn)化DDR SDRAM復(fù)雜的讀寫時(shí)序,在DDR SDRAM接口的時(shí)鐘雙邊沿觸發(fā)數(shù)據(jù)和時(shí)鐘單邊沿觸發(fā)數(shù)據(jù)之間轉(zhuǎn)換,產(chǎn)生周期性的刷新命令來(lái)維持DDR SDRAM內(nèi)的數(shù)據(jù)不丟失。本文設(shè)計(jì)的DDR SDRAM控制器包含以下幾個(gè)模塊:控制模塊、刷新模塊、初始化模塊、命令產(chǎn)生模塊、數(shù)據(jù)通路模塊和地址映射模塊。DDR SDRAM控制器的結(jié)構(gòu)框圖如圖2所示。
2.1 控制模塊
    控制模塊寄存從主機(jī)系統(tǒng)發(fā)來(lái)的命令并解碼,發(fā)送解碼過(guò)的NOP(空操作)、ACTIVE(激活)、WRITE(突發(fā)寫)、READ(突發(fā)讀)、PRE(預(yù)充電)命令給命令產(chǎn)生模塊,發(fā)送解碼過(guò)的REF(自動(dòng)刷新)給刷新模塊,發(fā)送解碼過(guò)的INIT(初始化)命令給初始化模塊,而LOAD_REG1和LOAD_REG2命令則在解碼后發(fā)送給地址映射模塊。
2.2 刷新模塊
    刷新模塊用于生成周期性的自動(dòng)刷新命令請(qǐng)求給命令產(chǎn)生模塊。刷新模塊包含一個(gè)16 bit的刷新計(jì)數(shù)器和控制電路,刷新計(jì)數(shù)器是一個(gè)16 bit的減法計(jì)數(shù)器,發(fā)送LOAD_REG2命令時(shí),在地址映射模塊中通過(guò)ADDR的相應(yīng)位加載到寄存器REG2中,然后通過(guò)信號(hào)PER[15:0]發(fā)送給刷新計(jì)數(shù)器。PER[15:0]中是一個(gè)16 bit的數(shù)值,表示控制器發(fā)出相鄰兩個(gè)自動(dòng)刷新命令之間的時(shí)間間隔,即刷新周期。刷新計(jì)數(shù)器向下計(jì)數(shù),當(dāng)計(jì)數(shù)到0時(shí),刷新請(qǐng)求信號(hào)REF_REQ被置為有效并保持直到命令產(chǎn)生模塊響應(yīng)刷新請(qǐng)求為止。之后,刷新計(jì)數(shù)器重新載入刷新周期PER[15:0],開始新一輪的計(jì)數(shù)。
2.3 初始化模塊
    初始化模塊采用初始化狀態(tài)機(jī)實(shí)現(xiàn)DDR SDRAM的初始化過(guò)程,初始化操作按照DDR SDRAM初始化的步驟進(jìn)行。采用一個(gè)由100 MHz系統(tǒng)時(shí)鐘控制的16 bit初始化計(jì)數(shù)器來(lái)控制初始化狀態(tài)機(jī)中各個(gè)狀態(tài)的執(zhí)行時(shí)間,首先等待200 ?滋s,設(shè)置初始化計(jì)數(shù)器為20 000(200 μs=20 000×1/100 MHz),然后將cke置高,同時(shí)初始化狀態(tài)機(jī)進(jìn)入了NOP(空操作)狀態(tài),發(fā)送PRE(預(yù)充電)命令預(yù)充電所有Bank;經(jīng)過(guò)tRP的預(yù)充電時(shí)間后發(fā)出兩次MRS(模式寄存器配置)命令分別設(shè)置模式寄存器和擴(kuò)展模式寄存器,等待tMRD的時(shí)間后發(fā)送PRE(預(yù)充電)對(duì)所有Bank進(jìn)行預(yù)充電;經(jīng)過(guò)tRP的時(shí)間后至少發(fā)送兩次REF(自動(dòng)刷新)命令進(jìn)行自動(dòng)刷新,之后發(fā)送MRS(模式寄存器配置)命令對(duì)模式寄存器進(jìn)行配置,至此完成初始化過(guò)程。
2.4 命令產(chǎn)生模塊
    命令產(chǎn)生模塊包含命令仲裁邏輯和命令解碼邏輯。命令仲裁邏輯用來(lái)仲裁控制模塊發(fā)送的解碼后的命令、初始化模塊發(fā)送的初始化過(guò)程所需要的命令以及刷新模塊發(fā)送的刷新請(qǐng)求。刷新模塊發(fā)來(lái)的刷新請(qǐng)求具有最高優(yōu)先級(jí),其次是初始化模塊發(fā)送的命令請(qǐng)求,控制模塊發(fā)送的命令具有最低優(yōu)先級(jí)。如果在初始化模塊或者控制模塊發(fā)送的命令執(zhí)行過(guò)程中接收到自動(dòng)刷新命令,則這個(gè)自動(dòng)刷新命令保持不被執(zhí)行直到初始化模塊或者控制模塊發(fā)送的命令操作結(jié)束。
    命令解碼邏輯將經(jīng)過(guò)命令仲裁邏輯仲裁后的命令解碼成DDR SDRAM能識(shí)別的操作命令。發(fā)送這些操作命令時(shí),時(shí)鐘使能信號(hào)cke置為高電平,片選信號(hào)cs_n置為低電平有效,具體的操作命令由信號(hào)線cas_n、ras_n和we_n來(lái)共同解碼。
2.5 數(shù)據(jù)通路模塊
    數(shù)據(jù)通路模塊為DDR SDRAM突發(fā)讀寫操作提供數(shù)據(jù)接口的時(shí)鐘域和位寬轉(zhuǎn)換。讀數(shù)據(jù)通路中,從DDR SDRAM發(fā)送的數(shù)據(jù)信號(hào)dq[7:0]的采樣時(shí)鐘為200 MHz,經(jīng)過(guò)二級(jí)寄存器后分為兩路數(shù)據(jù)進(jìn)入100 MHz時(shí)鐘域,一路在時(shí)鐘的上升沿采樣,一路在時(shí)鐘的下降沿采樣,再經(jīng)過(guò)一級(jí)寄存后同步經(jīng)過(guò)數(shù)據(jù)選擇器,調(diào)整數(shù)據(jù)順序,最后經(jīng)過(guò)兩級(jí)緩存輸出給dataout[15:0]。
    寫數(shù)據(jù)通路中,輸入數(shù)據(jù)datain[15:0]和數(shù)據(jù)屏蔽輸入信號(hào)dm[1:0]的采樣時(shí)鐘為100 MHz,先后經(jīng)過(guò)兩級(jí)緩存寄存器和數(shù)據(jù)選擇器將一倍時(shí)鐘域的數(shù)據(jù)轉(zhuǎn)換到二倍時(shí)鐘域,再經(jīng)過(guò)兩級(jí)緩存輸出到數(shù)據(jù)輸出信號(hào)dq[7:0]和數(shù)據(jù)屏蔽輸出信號(hào)dqm。
2.6 地址映射模塊及地址映射的優(yōu)化
    控制器對(duì)DDR SDRAM的訪問(wèn)尋址傳統(tǒng)上采用順序的地址映射方式,即Bank地址、行地址、列地址分別從高地址到低地址排列[5]。由于DDR SRAM的數(shù)據(jù)存儲(chǔ)具有很強(qiáng)的局部性,主機(jī)系統(tǒng)對(duì)DDR SDRAM的連續(xù)突發(fā)訪問(wèn)通常集中在相近的一塊存儲(chǔ)區(qū)域,當(dāng)采用順序的地址映射方式時(shí),先訪問(wèn)某個(gè)Bank的一行,然后訪問(wèn)該Bank中的下一行,就需要預(yù)充電關(guān)閉當(dāng)前行并激活下一行,才能突發(fā)訪問(wèn)下一行,因此內(nèi)存訪問(wèn)效率很低。
    DDR SDRAM可以同時(shí)激活多個(gè)Bank,將連續(xù)的訪存操作映射到不同的Bank中,避免對(duì)同一Bank突發(fā)訪問(wèn)而出現(xiàn)行沖突,利用多個(gè)Bank提供的行緩沖區(qū)來(lái)提高訪存性能?;谶@種思想,本設(shè)計(jì)采用行地址、Bank地址、列地址分別從高地址到低地址排列的映射方式,如圖3所示。當(dāng)訪問(wèn)下一行時(shí),由于該行在新的Bank中,不需要將原來(lái)的行關(guān)閉,只需要激活新的行;當(dāng)再次訪問(wèn)上一行時(shí),因?yàn)樵撔腥匀惶幱诩せ顮顟B(tài),只需要直接發(fā)送突發(fā)讀寫命令。

 將DDR SDRAM中已經(jīng)激活可以直接訪問(wèn)的最大存儲(chǔ)區(qū)域稱為激活區(qū),激活區(qū)越大,DDR SDRAM的局部性突發(fā)訪問(wèn)的效率越高。假設(shè)Bank地址為b bit,列地址為c bit,數(shù)據(jù)線為d bit,則優(yōu)化前采用順序地址映射方式的激活區(qū)大小為d×2c(bit), 優(yōu)化后的激活區(qū)達(dá)到d×2b+c(bit),從而大大提高了突發(fā)訪問(wèn)的效率。
3 設(shè)計(jì)實(shí)現(xiàn)結(jié)果
    本設(shè)計(jì)經(jīng)過(guò)邏輯綜合和布局布線之后,采用0.18 μm CMOS工藝流片。在PCB板上,使用Altera 公司Stratix II 系列FPGA發(fā)出測(cè)試激勵(lì)給DDR SDRAM控制器,連接Micron公司型號(hào)為MT46V64M8的512 Mbit的DDR SDRAM內(nèi)存芯片,對(duì)DDR SDRAM控制器芯片進(jìn)行測(cè)試。
   DDR SDRAM控制器測(cè)試工作時(shí)鐘達(dá)到200 MHz,使用FPGA內(nèi)置邏輯分析儀SignalTap II截取突發(fā)寫數(shù)據(jù),如圖4所示。命令信號(hào)cmd[2:0]輸入0x2,表示突發(fā)寫命令,地址信號(hào)addr[25:0]為0x0000000,0x0000002,0x0000004,0x0000006,0x0000008,0x000000A,0x000000C,0x000000E,0x0000010,0x0000012,0x0000014依次遞增。此時(shí)突發(fā)寫入的數(shù)據(jù)信號(hào)datain[15:0]依次為0x0000,0x0001,0x0002,0x0003,0x0004,0x0005,0x0006,0x0007,0x0008,0x0009,0x000A。

  使用FPGA內(nèi)置邏輯分析儀SignalTap II截取突發(fā)讀數(shù)據(jù),如圖5所示。命令信號(hào)cmd[2:0]輸入0x1,表示突發(fā)讀命令,地址信號(hào)addr[25:0]為0x0000000,0x0000002,0x0000004,0x0000006,0x0000008,0x000000A,0x000000C,0x000000E,0x0000010,0x0000012,0x0000014依次遞增。 addr[25:0]信號(hào)經(jīng)過(guò)地址映射后輸出sa[12:0]和ba[1:0]給DDR SDRAM,經(jīng)過(guò)tRCD和CL的延時(shí)后,突發(fā)讀出的數(shù)據(jù)信號(hào)dataout[15:0]依次為0x0000,0x0001,0x0002,0x0003,0x0004,0x0005,0x0006,0x0007,0x0008,0x0009,0x000A。

    本文給出了一種DDR SDRAM控制器芯片的設(shè)計(jì)方法,采用一種優(yōu)化的地址映射策略提高了突發(fā)訪問(wèn)的效率,且流片實(shí)現(xiàn)后測(cè)試其功能良好,工作頻率達(dá)到200 MHz,支持的DDR SDRAM數(shù)據(jù)信號(hào)位寬為8 bit,連續(xù)突發(fā)讀寫數(shù)據(jù)傳輸速率為1.6 Gb/s,能滿足系統(tǒng)帶寬要求。
參考文獻(xiàn)
[1] JEDEC Standard. DDR SDRAM specification[DB/OL].(2005-xx-xx)[2013-01-13].http://www.jedec.org.
[2] Micron Technology Inc. DDR SDRAM MT46V64M8 datasheet [DB/OL].(2002-xx-xx)[2013-01-13]. http://www.micron.com.
[3] Elpida Memory Inc. How to use DDR SDRAM[DB/OL].(2007-xx-xx)[2013-01-13].http://www.elpida.com.
[4] Micron Technology Inc.General DDR SDRAM functionality[DB/OL].(2001-xx-xx)[2013-01-13].http://www.micron.com.
[5] 韋喜波.DDR SDRAM 控制器的設(shè)計(jì)與驗(yàn)證[D].哈爾濱:哈爾濱工業(yè)大學(xué),2009.

此內(nèi)容為AET網(wǎng)站原創(chuàng),未經(jīng)授權(quán)禁止轉(zhuǎn)載。