如何實現(xiàn)SDRAM接口電路的設(shè)計?
存儲器是容量數(shù)據(jù)處理電路的重要組成部分。隨著數(shù)據(jù)處理技術(shù)的進(jìn)一步發(fā)展,對于存儲器的容量和性能提出了越來越高的要求。同步動態(tài)隨機(jī)存儲器SDRAM(Synchronous Dynamic Random Access Memory)因其容量大、讀寫速度快、支持突發(fā)式讀寫及相對低廉的價格而得到了廣泛的應(yīng)用。SDRAM的控制比較復(fù)雜,其接口電路設(shè)計是關(guān)鍵。
RAM又分動態(tài)存儲器(DRAM,DYNAMIC RAM)和靜態(tài)存儲器(SRAM,STATIC RAM)。SRAM是利用雙穩(wěn)態(tài)觸發(fā)器來保存信息的,只要不斷電,信息是不會丟失的,所以謂之靜態(tài);DRAM利用MOS (金屬氧化物半導(dǎo)體)電容存儲電荷來儲存信息,大家都知道,電容是會漏電的,所以必須通過不停的給電容充電來維持信息,這個充電的過程叫再生或刷新(REFRESH)。由于電容的充放電是需要相對較長的時間的,DRAM的速度要慢于SRAM。但SRAM免刷新的優(yōu)點需要較復(fù)雜的電路支持,如一個典型的SRAM的存儲單元需要六個晶體管(三極管)構(gòu)成,而DRAM的一個存儲單元最初需要三個晶體管和一個電容,后來經(jīng)過改進(jìn),就只需要一個晶體管和一個電容了。由此可見,DRAM的成本、集成度、功耗等明顯優(yōu)于SRAM。
(一) DRAM
DRAM就是我們常說的內(nèi)存,這顯然就是狹義的內(nèi)存概念了。后面我們說的內(nèi)存也是這個狹義的概念--DRAM。常見的DRAM有許多規(guī)格,如FPM DRAM 、EDO DRAM、BEDO DRAM、SDRAM、DDR SDRAM、SLDRAM、RDRAM、DIRECT RDRAM等。
1. FPM DRAM(FAST PAGE MODE DRAM,快速頁模式DRAM)
傳統(tǒng)的DRAM在存取一個BIT的數(shù)據(jù)時,必須送出行地址和列地址各一次才能讀寫數(shù)據(jù)。FRM DRAM對此做了改進(jìn),在觸發(fā)了行地址后,如果CPU需要的地址在同一行內(nèi),則可以連續(xù)輸出列地址而不必再輸出行地址了。由于一般的程序和數(shù)據(jù)在內(nèi)存中排列的地址是連續(xù)的,這種情況下輸出行地址后連續(xù)輸出列地址就可以得到所需要的數(shù)據(jù)。因此FPM DRAM的設(shè)計可以提高內(nèi)存的傳輸速率。在96年以前,在486時代和PENTIUM時代的初期,F(xiàn)PM DRAM被大量使用。
2. EDO DRAM(EXTENDED DATA OUT DRAM,擴(kuò)充數(shù)據(jù)輸出DRAM)
傳統(tǒng)的DRAM和FPM DRAM 在存取每一BIT 數(shù)據(jù)時必須輸出行地址和列地址并使其穩(wěn)定一段時間,然后才能讀寫有效的數(shù)據(jù)。而下一個BIT的地址必須等待這次讀寫操作完成才能輸出。EDO DRAM對FPM DRAM 的改進(jìn)主要是縮短等待輸出地址的時間。EDO DRAM不必等待資料的讀寫操作是否完成,只要規(guī)定的有效時間一到就可以準(zhǔn)備輸出下一個地址,由此可以減小等待時間。從另一個角度說,EDO DRAM 在讀寫數(shù)據(jù)的同時進(jìn)行下一地址的準(zhǔn)備工作,提高了工作效率。后期的486系統(tǒng)開始支持EDO DRAM,到96年后期,EDO DRAM開始執(zhí)行。
3. BEDO DRAM (BURST EDO DRAM ,突發(fā)式EDO DRAM)
BEDO DRAM是突發(fā)式的讀取方式,也就是當(dāng)一個數(shù)據(jù)地址被送出后,剩下的三個數(shù)據(jù)每一個都只需要一個周期就能讀取。BEDO 的主要加強(qiáng)之處是在芯片上增加了一個地址計數(shù)器來追蹤下一個地址。BEDO DRAM可以一次存取一批數(shù)據(jù)而EDO DRAM只能存取一組數(shù)據(jù),所以BEDO DRAM比EDO DRAM更快。但BEDO DRAM 在內(nèi)存市場上只是曇花一現(xiàn),只有很少的主板支持(如VIA APOLLO VP2),很快就被DRAM替代了。
4. SDRAM(SYNCHRONOUS DRAM)
SDRAM 的最大特點就是可以與CPU的外頻同步,可以取消等待周期,減少了數(shù)據(jù)傳輸?shù)难舆t。而此前的DRAM 都使用異步方式工作,由于沒有與系統(tǒng)的外頻同步,在存取數(shù)據(jù)時,系統(tǒng)必須等待若干時序才能接受和送出數(shù)據(jù),如SDRAM可以使存儲器控制器知道在哪一個時鐘脈沖周期使數(shù)據(jù)請求使能,因此數(shù)據(jù)可在脈沖沿來到之前便開始傳輸,而EDO DRAM每隔2時鐘才開始傳輸,F(xiàn)PM DRAM每隔3個時鐘脈沖周期才開始傳輸,從而制約了傳輸率。當(dāng)CPU的頻率越來越高后,異步DRAM的數(shù)據(jù)傳輸率就成為系統(tǒng)的瓶頸,而且,隨著頻率的提高,異步DRAM與SDRAM的性能差距會越來越大。
對DRAM而言,除了容量,最重要的指標(biāo)就是速度了。一般FPM DRAM和EDO DRAM的速度在0~70ns之間,SDRAM的速度在10 ns左右。由于SDRAM的工作速度與系統(tǒng)的外頻保持一致,所以SDRAM的速度標(biāo)識可以換算成工作頻率,如100 ns的SDRAM的頻率是1 s/10 ns=100 MHz,同理,8 ns的SDRAM的工作頻率是125 MHz,12 ns的SDRAM 的工作頻率是83 MHz,15ns的SDRAM的工作頻率是66 MHz。由于目前流行的是PC100的SDRAM,讀者在采購內(nèi)存時絕大多數(shù)希望選購符合PC100規(guī)范的SDRAM。PC100規(guī)格非常復(fù)雜,我們應(yīng)該了解的部分主要是內(nèi)存條上應(yīng)帶SPD,內(nèi)存工作頻率為100 MHz時,CL應(yīng)為2或3個clk,最好為2 clk,tAC必須不超過6 ns等。
除了以上PC100規(guī)范要求的一些性能指標(biāo)外,一個真正的發(fā)燒友還應(yīng)該關(guān)心一下SDRAM芯片其他幾個很重要的指標(biāo):如芯片的輸出位寬、功耗(電壓)等,因為這些指標(biāo)也決定了內(nèi)存的超頻潛力--給內(nèi)存超頻的時候還是很多的,即使不超頻,性能好的內(nèi)存也意味著更高的穩(wěn)定裕度和更好的升級潛力。
(二) SRAM
SRAM的速度快但昂貴,一般用小容量的SRAM作為更高速CPU和較低速DRAM 之間的緩存(cache).SRAM也有許多種,如AsyncSRAM (Asynchronous SRAM,異步SRAM)、Sync SRAM (Synchronous SRAM,同步SRAM)、PBSRAM (Pipelined Burst SRAM,管道突發(fā)SRAM),還有INTEL沒有公布細(xì)節(jié)的CSRAM等。
SRAM是英文Static RAM的縮寫,它是一種具有靜止存取功能的內(nèi)存,不需要刷新電路即能保存它內(nèi)部存儲的數(shù)據(jù)。不像DRAM內(nèi)存那樣需要刷新電路,每隔一段時間,固定要對DRAM刷新充電一次,否則內(nèi)部的數(shù)據(jù)即會消失,因此SRAM具有較高的性能,但是SRAM也有它的缺點,即它的集成度較低,相同容量的DRAM內(nèi)存可以設(shè)計為較小的體積,但是SRAM卻需要很大的體積,所以在主板上SRAM存儲器要占用一部分面積,在主板上哪些是SRAM呢?
一種是置于CPU與主存間的高速緩存,它有兩種規(guī)格:一種是固定在主板上的高速緩存(Cache Memory );另一種是插在卡槽上的COAST(Cache On A Stick)擴(kuò)充用的高速緩存,另外在CMOS芯片1468l8的電路里,它的內(nèi)部也有較小容量的128字節(jié)SRAM,存儲我們所設(shè)置的配置數(shù)據(jù)。還有為了加速CPU內(nèi)部數(shù)據(jù)的傳送,自80486CPU起,在CPU的內(nèi)部也設(shè)計有高速緩存,故在Pentium CPU就有所謂的L1 Cache(一級高速緩存)和L2Cache(二級高速緩存)的名詞,一般L1 Cache是內(nèi)建在CPU的內(nèi)部,L2 Cache是設(shè)計在CPU的外部,但是Pentium Pro把L1和L2 Cache同時設(shè)計在CPU的內(nèi)部,故Pentium Pro的體積較大。最新的Pentium II又把L2 Cache移至CPU內(nèi)核之外的黑盒子里。SRAM顯然速度快,不需要刷新的*作,但是也有另外的缺點,就是價格高,體積大,所以在主板上還不能作為用量較大的主存?,F(xiàn)將它的特點歸納如下:
◎優(yōu)點,速度快,不必配合內(nèi)存刷新電路,可提高整體的工作效率。
◎缺點,集成度低,功耗較大,相同的容量體積較大,而且價格較高,少量用于關(guān)鍵性系統(tǒng)以提高效率。
◎SRAM使用的系統(tǒng):
○CPU與主存之間的高速緩存。
○CPU內(nèi)部的L1/L2或外部的L2高速緩存。
○CPU外部擴(kuò)充用的COAST高速緩存。
○CMOS 146818芯片(RT&CMOS SRAM)。
廣義的內(nèi)存分為隨機(jī)存儲器(RAM,RANDOM ACCESS MEMORY)和只讀存儲器(ROM,READ ONLY MEMORY)。
SDRAM(synchronous dynamic random-access memory)即同步動態(tài)隨機(jī)存取內(nèi)存。在介紹SDRAM前,我們先了解下DRAM(Dynamic random-access memory),DRAR中文譯為動態(tài)隨機(jī)存取內(nèi)存,也叫動態(tài)隨機(jī)存取器,為什么叫動態(tài)隨機(jī)存取器,原因是它的實現(xiàn)原理跟靜態(tài)存儲器SRAM不一樣,DRAM是在芯片里集成很多個陣列的電容,DRAM存儲二進(jìn)制數(shù)據(jù)0和1就是通過給這些陣充放電荷實現(xiàn)。一個簡單的單個DRAM存儲單元示例圖如下圖所示。
單個DRAM單元實現(xiàn)電容充放電原理
電容C用來存儲電荷,信號WRITE 1、WRITE 0控制開關(guān)晶體管Q1和Q2給電容充電和放電,實現(xiàn)二進(jìn)制1和0存儲。信號READ控制開關(guān)晶體管打開把電容C接到數(shù)據(jù)線DATA上,芯片內(nèi)部處理電路通過讀取DATA線上的電壓信號來判斷DRAM存儲單元存儲的數(shù)據(jù)為二進(jìn)制1還是0。
從原理上去看DRAM實現(xiàn)數(shù)據(jù)存取很完美,但實際芯片按照上面的原理做好電路后,開關(guān)晶體管和電容本身都會有漏電流。漏電流會導(dǎo)致一個特別糟糕的情況,電容存儲的電荷會慢慢通過漏電流方式流失掉,當(dāng)電荷流失到一定的量后,內(nèi)部電路讀取電容的電壓去判斷數(shù)據(jù)時,就不能正確判斷為二進(jìn)制1了,這種情況下數(shù)據(jù)是錯誤。這樣的錯誤肯定是不允許發(fā)生的,解決辦法是通過定時刷新方式給電容充電,保證電容存儲的電荷量穩(wěn)定在理想的狀態(tài)。因為這樣的過程是一個一直的動態(tài)過程,動態(tài)隨機(jī)存取器的名稱由此而來。而SDRAM是DRAM的一種操作方式,如下圖所示,SDRAM讀寫數(shù)據(jù)時,是通過在時鐘的上升沿同步獲取控制、數(shù)據(jù)信號,所以叫做同步動態(tài)隨機(jī)存取器。
SDRAM在時鐘CLK上升沿時同步獲取控制、數(shù)據(jù)信號
DRAM和SRAM優(yōu)缺點:
1. SRAM讀寫速度快,DRAM讀寫速度慢。
2. SRAM耗電量低,DRAM耗電量大。
3. SRAM制造成本高,容量低,DRAM制造成本低,容量大。
SDRAM接口信號
SDRAM主要信號如下(256Mb容量示例):
A0-A11: 地址信號。
BA0-BA1: Bank選擇信號。
DQM0-DQM3: 讀寫數(shù)據(jù)掩碼控制信號。
DQ0-DQ31: 數(shù)據(jù)信號。
CKE: 時鐘使能信號。
CLK: 時鐘信號。
CS: 片選信號。
CAS: 列地址選通控制信號。
RAS: 行地址選通控制信號。
WE: 寫使能信號。
在上述羅列的信號中,A0-A11、BA0-BA1、CKE、CS、CAS、RAS、WE的不同組合,可以構(gòu)成不同的Command如下圖所示。
DRAM Commad真值表
從上圖可以看到,DQ0-DQ31和DQM0-DQM3不參與組合成Command。這里說明下,DQMx是讀寫數(shù)據(jù)掩碼信號,用于控制數(shù)據(jù)讀寫使能對應(yīng)Byte的。它們的控制關(guān)系是DQM0控制DQ0-DQ7,DQM1控制DQ8-DQ15,以此類推。知道數(shù)據(jù)信號DQ0-DQ31不參與組合成Command后,在硬件設(shè)計的Layout階段時,有時數(shù)據(jù)線不好走線,可以通過調(diào)換組內(nèi)數(shù)據(jù)線來解決數(shù)據(jù)線Layout難度大問題。注意這里說的組內(nèi)調(diào)換是單個Byte內(nèi)的信號,DQ0-DQ7為一組,DQ8-DQ15為一組,以此類推,不能跨組調(diào)換,跨組調(diào)換讀寫數(shù)據(jù)就錯誤了。
這里介紹的組內(nèi)數(shù)據(jù)線調(diào)換不影響數(shù)據(jù)的正確性,可能會有很多人困惑,我做了個圖如下說明解釋。如下圖中,左側(cè)為主控信號,右側(cè)為DRAM。主控要寫數(shù)據(jù)0x0F到DRAM中,因為數(shù)據(jù)線在DRAM端被調(diào)換了,所以實際到DRAM內(nèi)的數(shù)據(jù)變?yōu)?x1D。這樣看像是數(shù)據(jù)錯了,但我們再看主控從DRAM讀數(shù)據(jù)的情況,主控讀數(shù)據(jù)時,DRAM內(nèi)的0x1D順著信號線原路返回,變成了0x0F,錯錯得正。所以DRAM信號線組內(nèi)調(diào)線序不影響數(shù)據(jù)讀寫錯誤,但不能跨組調(diào),不能跨組調(diào)的原因是即使有錯錯得正的邏輯,但是如果DQM信號沒有使能對應(yīng)的Byte,那就會導(dǎo)致數(shù)據(jù)缺失,所以必然出錯。
在DRAM端做數(shù)據(jù)組內(nèi)調(diào)換,不影響主控讀寫數(shù)據(jù)的正確性
當(dāng)然,組內(nèi)數(shù)據(jù)可調(diào)的這個思路,放在DDR3、DDR4等都可以的,但還是要先看DRAM規(guī)格書,確定數(shù)據(jù)線不參與任何Command組合,如果參與了就不能調(diào),比如有的廠家的LPDDR就用了數(shù)據(jù)線來做Command。
STM32上的SDRAM電路設(shè)計
參考ST評估板MB1219的SDRAM部分電路如下,STM32使用SDRAM的目的是擴(kuò)充芯片內(nèi)存,由FMC接口控制,電路沒什么復(fù)雜的,設(shè)計時注意了解各個信號的作用,然后參考規(guī)格書把信號一一對應(yīng)連接上即可。評估板MB1219使用的主控是STM32F769NI,參考STM32F7xx規(guī)格書第86頁的Table 12. FMC pin definition的SDRAM欄,有詳細(xì)的信號定義。下圖中的BA0和BA1接的信號為A14和A15,這里沒有錯,是ST工程師在設(shè)計評估板時,F(xiàn)MC總線上還掛了SRAM和Nor Flash,而A14和A15是SRAM和Nor Flash的,但對應(yīng)SDRAM實際為BA0和BA1。
SDRAM參考設(shè)計電路
完成原理圖設(shè)計,后面剩下的是大家比較關(guān)心的Layout要不要做信號線等長的問題,這個問題在網(wǎng)上一直是很多人熱衷討論的一個問題,各有說法。其實對于SDRAM,只要走線不會長度差得特別離譜,比如差不多十幾個厘米這樣的,不等長影響不會很大,但如果PCB空間資源足夠的話建議按照500mil的規(guī)則做等長。如下圖ST的評估板MB1219就做了等長。