01 結(jié)構(gòu)概述
在此之前,曾經(jīng)通過一篇文章從SDRAM的內(nèi)部芯片框圖出發(fā),分析過SDRAM的功能實(shí)現(xiàn),本文開始繼續(xù)分析DDR、DDR2、DDR3的芯片內(nèi)部框圖,從而認(rèn)識他們各自的區(qū)別,便于后續(xù)使用。 下圖時鎂光的128Mb的SDRAM內(nèi)存芯片,前文已經(jīng)對該框圖做了詳細(xì)講解。
圖1 SDRAM框圖
在計(jì)算機(jī)運(yùn)算速度發(fā)展的過程中,需要提高內(nèi)存的讀寫速率,只能通過提高時鐘頻率來提高SDRAM的讀寫速率。由于溫度等因素的影響,SDRAM的內(nèi)核時鐘頻率受限,無法進(jìn)一步提升。SDRAM只在時鐘上升沿傳輸數(shù)據(jù),為了提高數(shù)據(jù)傳輸速率,DDR的IO端口在時鐘的上升沿和下降沿都傳輸數(shù)據(jù),而內(nèi)核還是只在時鐘上升沿傳輸數(shù)據(jù)。為了匹配內(nèi)核(上升沿傳輸)和IO端口(雙沿傳輸)數(shù)據(jù)傳輸?shù)乃俾?,?nèi)核的數(shù)據(jù)位寬變?yōu)镮O數(shù)據(jù)位寬的2倍,即2n預(yù)取,這就是DDR器件的設(shè)計(jì)原理。 下圖是鎂光DDR芯片的內(nèi)部框圖,型號為MT46V32M16P-6T。該芯片數(shù)據(jù)位寬也是16位,容量為512Mb,忽略容量大小,兩者的區(qū)別在于紅框部分,DDR采用差分時鐘信號。
圖2 DDR內(nèi)部結(jié)構(gòu)框圖 在數(shù)據(jù)寫入過程中,接收器(RCVRS)接收到的數(shù)據(jù)(DQ0~15)和數(shù)據(jù)掩膜信號(LDM/UDM)被暫存于接收寄存器中。該寄存器的功能類似于IDDR,它將DQS雙沿傳輸?shù)?6位數(shù)據(jù)轉(zhuǎn)換為DQS單沿傳輸?shù)?2位數(shù)據(jù)。同時,接收寄存器將2位的DM信號轉(zhuǎn)換為4位MASK信號。 隨后,這32位的DQS單沿?cái)?shù)據(jù)和4位的MASK信號被送入寫FIFO。寫FIFO的作用是處理異步時鐘,將DQS時鐘下的DATA和MASK信號同步到內(nèi)核時鐘CK下,確保數(shù)據(jù)在正確的時序下被寫入內(nèi)部存儲陣列。
注意輸入寄存器和寫FIFO的輸入端都是把DQS作為數(shù)據(jù)的時鐘信號,因?yàn)樵撔盘柕倪呇嘏c寫入數(shù)據(jù)DQ和數(shù)據(jù)掩膜信號DM的中心對齊。
此處可能會有人有疑問,DQ不應(yīng)該是在CK的雙沿下傳輸?shù)?,為什么這里是在DQS的雙沿采集DQ的數(shù)據(jù)?
DQS是數(shù)據(jù)選通信號,在讀數(shù)據(jù)時,DQS的邊沿與DQ的邊沿對齊,在寫數(shù)據(jù)時,DQS的邊沿與寫數(shù)據(jù)DQ的中心對齊。所以寫數(shù)據(jù)的時候在DQS的邊沿采集DQ的數(shù)據(jù)就比較穩(wěn)定。
在讀取時,L-Bank 在內(nèi)部時鐘信號的觸發(fā)下,一次傳送 32位的數(shù)據(jù)給讀取鎖存器(READ LATCH),再分成兩路16位數(shù)據(jù)傳給數(shù)據(jù)選擇器(MUX),數(shù)據(jù)選擇器(MUX)選擇其中一路,然后由發(fā)送器(DQS GENERATCR)在DQS的控制下在外部時鐘上升、下降沿分兩次傳輸16位的數(shù)據(jù)給主控芯片。
如果時鐘頻率為100MHz,那么在I/O端口處,由于在時鐘上升、下降沿傳輸數(shù)據(jù),那么傳輸頻率就是200MHz。現(xiàn)在基本明白DDR SDRAM的工作原理了吧,這種內(nèi)部存儲單元容量(芯片內(nèi)部總線位寬)= 2×芯片位寬(芯片I/O總線位寬)的設(shè)計(jì),就是所謂的兩位預(yù)?。?-bit Prefetch),有的公司稱之為 2-n Prefetch(n代表芯片位寬)。
上述框圖其實(shí)還有一個區(qū)別,SDRAM的框圖中,12根地址線作為模式寄存器的數(shù)據(jù)信號,而DDR框圖中,卻有15根線連接到模式寄存器,其中13根是地址線,2根bank地址線,這是因?yàn)镈DR除了模式寄存器(MR),還增加了一個擴(kuò)展模式寄存器(EMR),配置時bank地址線作為MR和EMR的地址線,區(qū)分A12~A0的數(shù)據(jù)是配置MR還是EMR的數(shù)據(jù)。
02 功能及結(jié)構(gòu)差異
DDR SDRAM和SDRAM的很多功能和指令都是一樣,比如激活指令,自動預(yù)充電等指令,但是功能也有一些區(qū)別,本文不對兩者相同的地方做講解了,僅對不同的地方進(jìn)行講解。 PART ? 2.1 時鐘 SDRAM采用單個時鐘信號,而DDR采用差分時鐘,CK#起到觸發(fā)時鐘校準(zhǔn)的作用。由于數(shù)據(jù)在時鐘CK的上升、下降沿傳輸,傳輸周期縮短了一半,因此必須要保證傳輸周期的穩(wěn)定以確保數(shù)據(jù)的正確傳輸,這就要求CK的上升沿與下降沿的間距要精確控制。 由于溫度、電阻性能的改變等影響,CK上升沿與下降沿的間距可能發(fā)生變化,此時與其反相的CK#就起到糾正的作用(CK上升快下降慢,CK#則是上升慢下降快)。
圖3 時鐘信號 在CK與CK#交叉時采集數(shù)據(jù)就能解決上述間距變化問題,這就是CK#的糾正思路。 由于數(shù)據(jù)在時鐘的上升沿和下降沿傳輸,CL可以取1.5和2.5。數(shù)據(jù)DQ相關(guān)信號在時鐘的雙沿傳輸,而指令相關(guān)信號依舊是在時鐘上升沿傳輸。 PART ? 2.2 模式寄存器和初始化時序 DDR與SDRAM一樣,在開機(jī)時需要進(jìn)行MRS(模式寄存器設(shè)置),因?yàn)镈DR的操作功能增加,相比SDRAM多了一個EMRS階段(擴(kuò)展模式寄存器設(shè)置),這個擴(kuò)展模式寄存器控制著DLL的有效、輸出驅(qū)動強(qiáng)度、QFC有效等。 下圖是SDRAM的模式寄存器,各位的含義前文已經(jīng)做過詳細(xì)講解,此處就不再贅述。
圖4 SDRAM模式寄存器 下圖是DDR的模式寄存器,模式寄存器的內(nèi)容相對SDRAM也有一些變化,突發(fā)長度不支持全頁突發(fā)了,CL的長度也發(fā)生了一些變化。 DDR中存在MRS和EMRS,那如何分辨這兩個寄存器的呢? 在配置時,可以理解為在配置模式寄存器時,bank地址線就是模式寄存器的地址線。當(dāng)BA1~BA0為00時,此時地址線An~A0的內(nèi)容就是配置模式寄存器,為01時配置擴(kuò)展模式寄存器。
圖5 DDR模式寄存器 下圖是該芯片的擴(kuò)展模式寄存器,包含DLL的啟用/禁止,QFC的啟用/禁止,其中DLL的作用在后文會講解。
圖6 DDR擴(kuò)展模式寄存器 QFC是指FET Switch Controllar (FET開關(guān)控制),低電平有效。用于借助外部FET開關(guān)控制內(nèi)存模組上芯片在沒有讀、寫操作時進(jìn)入隔離狀態(tài),以確保芯片間不受相互干擾。 QFC是一個特選功能,廠商在接到芯片買家的指定要求后,才在芯片中加入此功能,并且需要在模組裝配時進(jìn)行相關(guān)的設(shè)計(jì)改動(如增加VddQ的上拉電阻),所以市場上很少見到支持這一功能的DDR。在JEDEC最新發(fā)布的DDR規(guī)范中,已經(jīng)不在有QFC的定義,這顆芯片的手冊中也表示不支持QFC功能,作為了解即可。 既然DDR增加了擴(kuò)展模式寄存器,那相應(yīng)的初始化時序也相應(yīng)的有所改變。相比SDRAM多了一個配置擴(kuò)展模式寄存器的狀態(tài),初始化時序圖如下所示,當(dāng)上電電源穩(wěn)定后,經(jīng)過200us延時后把時鐘使能,然后對所有bank進(jìn)行預(yù)充電,之后依次配置擴(kuò)展模式寄存器、模式寄存器,之后再次預(yù)充電,最后進(jìn)行兩次自刷新操作,就可以進(jìn)入正常工作狀態(tài)了。
圖7 DDR初始化時序
PART ? 2.3 突發(fā)長度與寫入掩碼
由前文知SDRAM突發(fā)讀寫的長度有1、2、4、8、全頁,而DDR的突發(fā)長度只有2、4、8。注意SDRAM突發(fā)長度是指連續(xù)尋址的存儲單元數(shù)量,而DDR的突發(fā)長度是指連續(xù)的傳輸數(shù)據(jù)個數(shù),每個數(shù)據(jù)寬度就是芯片IO的數(shù)據(jù)寬度。 因?yàn)镈DR每次存儲兩倍芯片IO寬度的數(shù)據(jù),芯片每次至少傳輸兩次數(shù)據(jù),所以不存在長度為1的讀寫操作。全頁突發(fā)在圖像領(lǐng)域可能會比較常用,但是在PC內(nèi)存中一般不會被使用,畢竟DDR當(dāng)時主要被用作PC內(nèi)存,所以被砍掉了。 DDR在突發(fā)寫入數(shù)據(jù)時,如果其中有不想存入的數(shù)據(jù),可以像SDRAM一樣使用掩膜信號DM進(jìn)行屏蔽。通過下圖知,掩膜信號DM與數(shù)據(jù)信號DQ同時發(fā)出,DDR芯片在DQS的上升沿和下降沿來檢測DM的狀態(tài),如果DM為高電平,則此時的數(shù)據(jù)DQ就被丟棄了,不會寫入DDR內(nèi)部。
圖8 DDR寫時序 SDRAM對于讀操作也是有掩膜信號的,但是DDR讀操作就沒有掩膜功能了,原因在于需要讀哪個數(shù)據(jù)是由主控芯片控制的,如果不想讀哪個地址的數(shù)據(jù),完全可以主控芯片自己控制。
PART ? 2.4 延遲鎖定回路(DLL)
這部分的功能講解來自“電腦高手”的一篇文章,鑒于是別人的文章內(nèi)容,圖片中的LOGO保留,講的很簡單,也推翻了很多網(wǎng)絡(luò)上對DDR中DLL(Delay Locked Loop)的錯誤理解。 DDR對時鐘精確性要求極高,DDR有兩個時鐘:外部總線時鐘和內(nèi)部工作時鐘。理想情況下,這兩個時鐘應(yīng)保持同步,但由于溫度和電壓波動等因素,實(shí)際中很難實(shí)現(xiàn)完美的同步。此外,時鐘頻率本身的不穩(wěn)定性也增加了同步的難度。SDRAM也有內(nèi)部時鐘,由于SDRAM工作頻率較低,其內(nèi)部時鐘與外部時鐘的同步問題不那么顯著。 在實(shí)際應(yīng)用中,時鐘不同步可能表現(xiàn)為正向或負(fù)向的延遲。為應(yīng)對這種情況,可以設(shè)定一個固定的延遲值,例如一個時鐘周期,那么內(nèi)外時鐘的上升沿和下降沿仍然保持同步。由于外部時鐘周期并非絕對一致,DDR需要動態(tài)調(diào)整內(nèi)部時鐘的延遲,以匹配外部時鐘,這一過程由延遲鎖定環(huán)路(DLL)負(fù)責(zé),它能夠?qū)崟r監(jiān)測并調(diào)整內(nèi)部時鐘,確保與外部時鐘的精確同步。 DLL不涉及頻率與電壓轉(zhuǎn)換,而是生成一個延遲量給內(nèi)部時鐘。目前DLL有時鐘頻率測量法(CFM)和時鐘比較法(CC)兩種實(shí)現(xiàn)方法。 CFM(Clock Frequency Monitor)負(fù)責(zé)監(jiān)測外部時鐘的頻率,并據(jù)此調(diào)整內(nèi)部時鐘的延遲,確保內(nèi)外時鐘之間僅相差一個周期,實(shí)現(xiàn)同步。DLL通過不斷測量和調(diào)整延遲值,動態(tài)地維持內(nèi)部時鐘與外部時鐘的精確同步。CFM的校正速度快,僅用兩個時鐘周期,但容易受到噪音干擾,如果測量失誤,則內(nèi)部的延遲就會永遠(yuǎn)錯下去。
圖9 時鐘頻率測量法 CC(Clock Correction)方法通過比較內(nèi)外時鐘周期的差異來調(diào)整內(nèi)部時鐘。當(dāng)檢測到內(nèi)部時鐘周期短于外部時鐘時,會在下一個內(nèi)部時鐘周期中補(bǔ)充缺失的延遲,反之則減少多余的延遲。這一過程不斷循環(huán),直至內(nèi)外時鐘達(dá)到同步。 CC的優(yōu)勢在于其穩(wěn)定性和可靠性,即使在比較過程中出現(xiàn)偏差,也僅影響單個數(shù)據(jù)點(diǎn),不會對后續(xù)的延遲修正產(chǎn)生連鎖反應(yīng)。然而,CC的調(diào)整過程相對較慢,需要更多時間來完成同步。
圖10 時鐘比較法 DDR在排錯與評估操作時中可以禁用DLL功能,正常工作狀態(tài)是自動有效的。DLL的功能很簡單,就是通過延時同步DDR內(nèi)部和外部時鐘。
PART ? 2.5 數(shù)據(jù)選通脈沖(DQS)
DDR SDRAM芯片增加了DQS選通脈沖信號,該信號在SDRAM中是不存在的。每個字節(jié)的數(shù)據(jù)對應(yīng)一個DQS信號,對于16位數(shù)據(jù)線的芯片來說,每次傳輸兩個字節(jié)數(shù)據(jù),所以就有LDQS和UDQS信號。主要用來在一個時鐘周期內(nèi)準(zhǔn)確區(qū)分出每個傳輸周期,并便于接收方準(zhǔn)確接收數(shù)據(jù)。 DQS是雙向信號,與DQ數(shù)據(jù)信號雙向同步。從圖2的框圖分析知,在讀取DDR數(shù)據(jù)時,DQS與數(shù)據(jù)信號同時生成(在CK與CK#的交叉點(diǎn))。而DDR中的CL指從CAS發(fā)出到DQS生成的間隔,如下圖所示,數(shù)據(jù)真正出現(xiàn)在數(shù)據(jù)I/O總線上相對于DQS觸發(fā)的時間間隔被稱為tAC。注意,DDR的tAC與SDRAM的tAC含義不同。
圖11 讀時序 實(shí)際上,DQS生成時,芯片內(nèi)部的預(yù)取已經(jīng)完畢了,tAC指圖2中紅框部分的數(shù)據(jù)輸出時間,由于預(yù)取的原因,實(shí)際的數(shù)據(jù)傳出可能會提前于DQS產(chǎn)生(數(shù)據(jù)提前于DQS傳出)。 如下圖所示,向DDR寫入數(shù)據(jù)時,DQS的邊沿與DQ的中部對齊,此時數(shù)據(jù)線上的數(shù)據(jù)會比較穩(wěn)定,DDR可以在DQS的邊沿將DQ的數(shù)據(jù)存儲。
圖12 寫時序
PART ? 2.6 寫入延遲(tDQSS)
下圖是SDRAM芯片的寫時序,發(fā)出寫數(shù)據(jù)和寫命令同時出現(xiàn)在數(shù)據(jù)線上,沒有延時。
圖13 SDRAM寫時序 在看圖12中DDR的寫入時序,在發(fā)出寫命令之后需要經(jīng)過tDQSS,DQS、寫入數(shù)據(jù)DQ、數(shù)據(jù)掩膜才會出現(xiàn),這段時間被稱為DQS相對寫入命令的延時時間(tDQSS, WRITE Command to the first corresponding rising edge of DQS)。 這個延遲設(shè)計(jì)的作用也是在于同步,一個時鐘周期傳兩次數(shù)據(jù),控制精度要求較高,必須讓接收方做好充分準(zhǔn)備才能傳輸數(shù)據(jù)。
tDQSS是DDR寫入操作的一個重要參數(shù),太短可能造成接受錯誤,太長則會造成總線空閑。tDQSS 大于等于0.75個時鐘周期,小于等于1.25個時鐘周期。 經(jīng)過上面的延時,芯片內(nèi)部的時鐘很可能與DQS信號不同步了。一般情況下,tDQSS是一個時鐘周期,DDR的時鐘信號一般只用來同步控制命令。在前文分析過寫入的數(shù)據(jù)DQ完全通過DQS進(jìn)行同步,后面通過一個寫FIFO將數(shù)據(jù)從DQS下同步到時鐘CK下,所以DQS與CK不同步對數(shù)據(jù)的寫入是沒有影響的。 注意數(shù)據(jù)在時鐘的雙沿傳輸,但是指令指令在時鐘的上升沿傳輸,因此當(dāng)CL為2.5時,讀操作完成后,下一個指令需要延遲半個時鐘周期后才能發(fā)出。如下圖所示,讀后寫操作延遲的增加,如果CL=2.5,還要在tDQSS基礎(chǔ)上加入半個時鐘周期。
圖13 DDR讀寫時序 另外,DD內(nèi)存的數(shù)據(jù)真正寫入由于要經(jīng)過更多步驟的處理,寫入時間(tWR)也明顯延長,一般在3個時鐘周期左右,在DDR-Ⅱ規(guī)范中將tWR列為模式寄存器的一項(xiàng)。 03 總結(jié) ? 經(jīng)過上面的講述,對DDR與SDRAM的區(qū)別稍微總結(jié)一下:
1、由于DDR采用雙沿傳輸數(shù)據(jù),每個時鐘周期傳輸2次IO寬度的數(shù)據(jù),而SDRAM只在上升沿傳輸數(shù)據(jù),每個時鐘只傳輸一次數(shù)據(jù)。
2、由于DDR在雙沿傳輸數(shù)據(jù),對時鐘精確度的要求較高,采用差分時鐘,時鐘不支持掛起操作。
3、DDR的數(shù)據(jù)IO在雙沿傳輸數(shù)據(jù),而內(nèi)部數(shù)據(jù)只在上升沿傳輸,就需要將IO雙沿傳輸?shù)臄?shù)據(jù)轉(zhuǎn)換為單沿傳輸?shù)臄?shù)據(jù),所以內(nèi)部傳輸數(shù)據(jù)位寬是IO傳輸數(shù)據(jù)位寬的2倍,即兩位預(yù)取。
4、DDR不支持單次突發(fā)和全頁突發(fā)傳輸,在讀取數(shù)據(jù)時也不支持?jǐn)?shù)據(jù)掩膜功能。
5、由于采用雙沿傳輸,所以讀潛伏期支持2.5這種兩個半的時鐘周期延時。SDRAM在寫入數(shù)據(jù)時沒有延時,寫命令和寫數(shù)據(jù)同時有效,而DDR發(fā)出寫命令后,需要經(jīng)過tDQSS延時后,數(shù)據(jù)DQ、數(shù)據(jù)掩膜DM、數(shù)據(jù)選通信號DQS才會有效。
6、DDR采用雙沿傳輸數(shù)據(jù),增加了數(shù)據(jù)選通信號DQS,讀數(shù)據(jù)時DQS邊沿與讀出數(shù)據(jù)DQ邊沿對齊,寫入數(shù)據(jù)時,DQS的邊沿與寫入數(shù)據(jù)DQ的中心對齊,DDR可以在DQS的邊沿采集數(shù)據(jù)DQ,前文詳細(xì)分析過寫入數(shù)據(jù)的過程。
7、延時鎖存回路(DLL),由于DDR對時鐘精度要求較高,增加了DLL來調(diào)節(jié)內(nèi)部時鐘與外部時鐘延時,確保兩個時鐘同步。
8、另外SDRAM采用3.3V的LVTTL電平,而DDR采用2.5V的SSTL_2電平,DDR的功耗更低。SDRAM采用TSOP-II封裝,而DDR有TSOP-II封裝和BGA封裝兩種。
本文主要參考DDR與SDRAM的手冊以及電腦高手的一篇文章,在使用過IDDR之后就會發(fā)現(xiàn)雙沿傳輸數(shù)據(jù)轉(zhuǎn)換為單沿傳輸數(shù)據(jù)其實(shí)也比較簡單, 分析數(shù)據(jù)的讀寫也就不難了。 FPGA使用DDR3這些器件來說,可以很簡單,直接調(diào)用DDR IP即可,連DDR怎么工作都可以不用了解,只需要寫一下IP的用戶接口時序即可。但如果DDR的核心板是自家公司設(shè)計(jì)的,下載程序之后就是不允許,如果對DDR如何工作都不了解,如何確定問題出在FPGA還是硬件? DDR最初是作為PC的內(nèi)存出現(xiàn),所以了解很多內(nèi)容要結(jié)合一下PC端,比如全頁突發(fā)為什么會被砍掉等。
本文只對DDR與SDRAM的區(qū)別做了講解,相同部分就不做介紹了,畢竟內(nèi)容挺多的,DDR就把SDRAM的單沿傳輸變?yōu)殡p沿傳輸就引發(fā)了這么多改變。下一節(jié)繼續(xù)分析DDR如何升級成DDR2。
審核編輯:黃飛
?
評論
查看更多