<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 如何玩轉(zhuǎn)DDR?要先從這五大關(guān)鍵技術(shù)下手

          如何玩轉(zhuǎn)DDR?要先從這五大關(guān)鍵技術(shù)下手

          作者: 時(shí)間:2017-06-03 來源:網(wǎng)絡(luò) 收藏

          首先小編就幾個(gè)關(guān)鍵技術(shù)再給大家介紹一下。

          本文引用地址:http://www.ex-cimer.com/article/201706/346827.htm


          技術(shù)

          的一個(gè)重要且必要的設(shè)計(jì),但大家對CK#(CKN)的作用認(rèn)識很少,很多人理解為第二個(gè)觸發(fā)時(shí)鐘,其實(shí)它的真實(shí)作用是起到觸發(fā)時(shí)鐘校準(zhǔn)的作用。


          由于數(shù)據(jù)是在CK的上下沿觸發(fā),造成傳輸周期縮短了一半,因此必須要保證傳輸周期的穩(wěn)定以確保數(shù)據(jù)的正確傳輸,這就要求CK的上下沿間距要有精確的控制。但因?yàn)闇囟?、電阻性能的改變等原因,CK上下沿間距可能發(fā)生變化,此時(shí)與其反相的CK#(CKN)就起到糾正的作用(CK上升快下降慢,CK#則是上升慢下降快),如下圖一所示。

          圖一 示意圖

          數(shù)據(jù)選取脈沖(DQS)
          就像時(shí)鐘信號一樣,DQS也是中的重要功能,它的功能主要用來在一個(gè)時(shí)鐘周期內(nèi)準(zhǔn)確的區(qū)分出每個(gè)傳輸周期,并便于接收方準(zhǔn)確接收數(shù)據(jù)。每一顆8bit 芯片都有一個(gè)DQS信號線,它是雙向的,在寫入時(shí)它用來傳送由主控芯片發(fā)來的DQS信號,讀取時(shí),則由芯片生成DQS向主控發(fā)送。完全可以說,它就是數(shù)據(jù)的同步信號。

          在讀取時(shí),DQS與數(shù)據(jù)信號同時(shí)生成(也是在CK與CK#的交叉點(diǎn))。而內(nèi)存中的CL也就是從CAS發(fā)出到DQS生成的間隔,數(shù)據(jù)真正出現(xiàn)在數(shù)據(jù)I/O總線上相對于DQS觸發(fā)的時(shí)間間隔被稱為tAC。實(shí)際上,DQS生成時(shí),芯片內(nèi)部的預(yù)取已經(jīng)完畢了,由于預(yù)取的原因,實(shí)際的數(shù)據(jù)傳出可能會提前于DQS發(fā)生(數(shù)據(jù)提前于DQS傳出)。由于是并行傳輸,DDR內(nèi)存對tAC也有一定的要求,對于66,tAC的允許范圍是±0.75ns,對于DDR333,則是±0.7ns,其中CL里包含了一段DQS的導(dǎo)入期。


          DQS 在讀取時(shí)與數(shù)據(jù)同步傳輸,那么接收時(shí)也是以DQS的上下沿為準(zhǔn)嗎?不,如果以DQS的上下沿區(qū)分?jǐn)?shù)據(jù)周期的危險(xiǎn)很大。由于芯片有預(yù)取的操作,所以輸出時(shí)的同步很難控制,只能限制在一定的時(shí)間范圍內(nèi),數(shù)據(jù)在各I/O端口的出現(xiàn)時(shí)間可能有快有慢,會與DQS有一定的間隔,這也就是為什么要有一個(gè)tAC規(guī)定的原因。而在接收方,一切必須保證同步接收,不能有tAC之類的偏差。這樣在寫入時(shí),芯片不再自己生成DQS,而以發(fā)送方傳來的DQS為基準(zhǔn),并相應(yīng)延后一定的時(shí)間,在DQS的中部為數(shù)據(jù)周期的選取分割點(diǎn)(在讀取時(shí)分割點(diǎn)就是上下沿),從這里分隔開兩個(gè)傳輸周期。這樣做的好處是,由于各數(shù)據(jù)信號都會有一個(gè)邏輯電平保持周期,即使發(fā)送時(shí)不同步,在DQS上下沿時(shí)都處于保持周期中,此時(shí)數(shù)據(jù)接收觸發(fā)的準(zhǔn)確性無疑是最高的,如下圖二所示。

          圖二 數(shù)據(jù)時(shí)序

          數(shù)據(jù)掩碼技術(shù)(DQM)

          不是DDR所特有的,但對于DDR來說也是比較重要的技術(shù),所以一并介紹下。

          為了屏蔽不需要的數(shù)據(jù),人們采用了數(shù)據(jù)掩碼(Data I/O Mask,簡稱DQM)技術(shù)。通過DQM,內(nèi)存可以控制I/O端口取消哪些輸出或輸入的數(shù)據(jù)。這里需要強(qiáng)調(diào)的是,在讀取時(shí),被屏蔽的數(shù)據(jù)仍然會從存儲體傳出,只是在“掩碼邏輯單元”處被屏蔽。

          DQM由主控芯片控制,為了精確屏蔽一個(gè)P-Bank位寬中的每個(gè)字節(jié),每個(gè)64bit位寬的數(shù)據(jù)中有8個(gè)DQM信號線,每個(gè)信號針對一個(gè)字節(jié)。這樣,對于4bit位寬芯片,兩個(gè)芯片共用一個(gè)DQM 信號線,對于8bit位寬芯片,一個(gè)芯片占用一個(gè)DQM信號,而對于16bit位寬芯片,則需要兩個(gè)DQM引腳。SDRAM 官方規(guī)定,在讀取時(shí)DQM發(fā)出兩個(gè)時(shí)鐘周期后生效,而在寫入時(shí),DQM與寫入命令一樣是立即生效,如下圖三和四分別顯示讀取和寫入時(shí)突發(fā)周期的第二筆數(shù)據(jù)被取消。

          圖三 讀取時(shí)數(shù)據(jù)掩碼操作

          圖四 寫入時(shí)數(shù)據(jù)掩碼操作

          所以DQM信號的作用就是對于突發(fā)寫入,如果其中有不想存入的數(shù)據(jù),就可以運(yùn)用DQM信號進(jìn)行屏蔽。DQM信號和數(shù)據(jù)信號同時(shí)發(fā)出,接收方在DQS的上升與下降沿來判斷DQM的狀態(tài),如果DQM為高電平,那么之前從DQS中部選取的數(shù)據(jù)就被屏蔽了。

          有人可能會覺得,DQM是輸入信號,意味著DRAM芯片不能發(fā)出DQM信號給主控芯片作為屏蔽讀取數(shù)據(jù)的參考。其實(shí),該讀哪個(gè)數(shù)據(jù)也是由主控芯片決定的,所以DRAM芯片也無需參與主控芯片的工作,哪個(gè)數(shù)據(jù)是有用的就留給主控芯片自己去選擇。


          好了,前面介紹了DQS的功能,那么我們在測試時(shí)根據(jù)DQS和DQ的波形是如何區(qū)分?jǐn)?shù)據(jù)的讀寫操作的?

          在DDRx里面經(jīng)常會被一些縮寫誤擾,如OCD、OCT和ODT,我想有同樣困擾的大有人在,現(xiàn)在筆者來介紹一下大家的這些困擾吧。

          片外驅(qū)動調(diào)校OCD(Off-Chip Driver)

          OCD是在DDR-II開始加入的新功能,而且這個(gè)功能是可選的,有的資料上面又叫離線驅(qū)動調(diào)整。OCD的主要作用在于調(diào)整I/O接口端的電壓,來補(bǔ)償上拉與下拉電阻值,從而調(diào)整DQS與DQ之間的同步確保信號的完整與可靠性。調(diào)校期間,分別測試DQS高電平和DQ高電平,以及DQS低電平和DQ高電平的同步情況。如果不滿足要求,則通過設(shè)定突發(fā)長度的地址線來傳送上拉/下拉電阻等級(加一檔或減一檔),直到測試合格才退出OCD操作,通過OCD操作來減少DQ、DQS的傾斜從而提高信號的完整性及控制電壓來提高信號品質(zhì)。具體調(diào)校如下圖五所示。

          圖五 OCD

          不過,由于在一般情況下對應(yīng)用環(huán)境穩(wěn)定程度要求并不太高,只要存在差分DQS時(shí)就基本可以保證同步的準(zhǔn)確性,而且OCD 的調(diào)整對其他操作也有一定影響,因此OCD功能在普通臺式機(jī)上并沒有什么作用,其優(yōu)點(diǎn)主要體現(xiàn)在對數(shù)據(jù)完整性非常敏感的服務(wù)器等高端產(chǎn)品領(lǐng)域。


          ODT(On-Die Termination,片內(nèi)終結(jié))

          ODT也是相對于DDR1的關(guān)鍵技術(shù)突破,所謂的終結(jié)(端接),就是讓信號被電路的終端吸收掉,而不會在電路上形成反射,造成對后面信號的影響。顧名思義,ODT就是將端接電阻移植到了芯片內(nèi)部,主板上不再有端接電路。在進(jìn)入DDR時(shí)代,DDR內(nèi)存對工作環(huán)境提出更高的要求,如果先前發(fā)出的信號不能被電路終端完全吸收掉而在電路上形成反射現(xiàn)象,就會對后面信號的影響造成運(yùn)算出錯。因此目前支持DDR主板都是通過采用終結(jié)電阻來解決這個(gè)問題。由于每根數(shù)據(jù)線至少需要一個(gè)終結(jié)電阻,這意味著每塊DDR主板需要大量的終結(jié)電阻,這也無形中增加了主板的生產(chǎn)成本,而且由于不同的內(nèi)存模組對終結(jié)電阻的要求不可能完全一樣,也造成了所謂的“內(nèi)存兼容性問題”。 而在DDR-II中加入了ODT功能,當(dāng)在DRAM模組工作時(shí)把終結(jié)電阻器關(guān)掉,而對于不工作的DRAM模組則進(jìn)行終結(jié)操作,起到減少信號反射的作用,如下圖六所示。

          圖六 ODT端接示意圖

          ODT的功能與禁止由主控芯片控制,在開機(jī)進(jìn)行EMRS時(shí)進(jìn)行設(shè)置,ODT所終結(jié)的信號包括DQS、DQS#、DQ、DM等。這樣可以產(chǎn)生更干凈的信號品質(zhì),從而產(chǎn)生更高的內(nèi)存時(shí)鐘頻率速度。而將終結(jié)電阻設(shè)計(jì)在內(nèi)存芯片之上還可以簡化主板的設(shè)計(jì),降低了主板的成本,而且終結(jié)電阻器可以和內(nèi)存顆粒的“特性”相符,從而減少內(nèi)存與主板的兼容問題的出現(xiàn)。

          重置(Reset)
          重置是DDR3新增的一項(xiàng)重要功能,并為此專門準(zhǔn)備了一個(gè)引腳。這一引腳將使DDR3的初始化處理變得簡單。當(dāng)Reset命令有效時(shí),DDR3 內(nèi)存將停止所有的操作,并切換至最少量活動的狀態(tài),以節(jié)約電力。在Reset期間,DDR3內(nèi)存將關(guān)閉內(nèi)在的大部分功能,所有數(shù)據(jù)接收與發(fā)送器都將關(guān)閉,且所有內(nèi)部的程序裝置將復(fù)位,DLL(延遲鎖相環(huán)路)與時(shí)鐘電路將停止工作,甚至不理睬數(shù)據(jù)總線上的任何動靜。這樣一來,該功能將使DDR3達(dá)到最節(jié)省電力的目的,新增的引腳如下圖七所示。


          圖七 Reset及ZQ引腳

          ZQ校準(zhǔn)
          如上圖七所示,ZQ也是一個(gè)新增的引腳,在這個(gè)引腳上接有一個(gè)240歐姆的低公差參考電阻。這個(gè)引腳通過一個(gè)命令集,通過片上校準(zhǔn)引擎(ODCE,On-Die Calibration Engine)來自動校驗(yàn)數(shù)據(jù)輸出驅(qū)動器導(dǎo)通電阻與ODT的終結(jié)電阻值。當(dāng)系統(tǒng)發(fā)出這一指令之后,將用相應(yīng)的時(shí)鐘周期(在加電與初始化之后用512個(gè)時(shí)鐘周期,在退出自刷新操作后用256時(shí)鐘周期、在其他情況下用64個(gè)時(shí)鐘周期)對導(dǎo)通電阻和ODT電阻進(jìn)行重新校準(zhǔn)。


          VREFCA VREFDQ
          對于內(nèi)存系統(tǒng)工作非常重要的參考電壓信號VREF,在DDR3系統(tǒng)中將VREF分為兩個(gè)信號。一個(gè)是為命令與地址信號服務(wù)的VREFCA,另一個(gè)是為數(shù)據(jù)總線服務(wù)的VREFDQ,它將有效的提高系統(tǒng)數(shù)據(jù)總線的信噪等級,如下圖八所示。

          圖八 VREFCA VREFDQ

          現(xiàn)在來說說DDR3和DDR4最關(guān)鍵的一些技術(shù),write leveling以及DBI功能。

          Write leveling功能與Fly_by拓?fù)?/strong>

          Write leveling功能和Fly_by拓?fù)涿懿豢煞?。Fly_by拓?fù)渲饕獞?yīng)用于時(shí)鐘、地址、命令和控制信號,該拓?fù)淇梢杂行У臏p少stub的數(shù)量和他們的長度,但是卻會導(dǎo)致時(shí)鐘和Strobe信號在每個(gè)芯片上的飛行時(shí)間偏移,這使得控制器(FPGA或者CPU)很難保持tDQSS、tDSS 和tDSH這些參數(shù)滿足時(shí)序規(guī)格。因此write leveling應(yīng)運(yùn)而生,這也是為什么在DDR3里面使用fly_by結(jié)構(gòu)后數(shù)據(jù)組可以不用和時(shí)鐘信號去繞等長的原因,數(shù)據(jù)信號組與組之間也不用去繞等長,而在里面數(shù)據(jù)組還是需要和時(shí)鐘有較寬松的等長要求的。DDR3控制器調(diào)用Write leveling功能時(shí),需要DDR3 SDRAM顆粒的反饋來調(diào)整DQS與CK之間的相位關(guān)系,具體方式如下圖九所示。


          圖九 Write leveling

          Write leveling 是一個(gè)完全自動的過程??刂破鳎–PU或FPGA)不停的發(fā)送不同時(shí)延的DQS 信號,DDR3 SDRAM 顆粒在DQS-DQS#的上升沿采樣CK 的狀態(tài),并通過DQ 線反饋給DDR3 控制器??刂破鞫朔磸?fù)的調(diào)整DQS-DQS#的延時(shí),直到控制器端檢測到DQ 線上0 到1 的跳變(說明tDQSS參數(shù)得到了滿足),控制器就鎖住此時(shí)的延時(shí)值,此時(shí)便完成了一個(gè)Write leveling過程;同時(shí)在Leveling 過程中,DQS-DQS#從控制器端輸出,所以在DDR3 SDRAM 側(cè)必須進(jìn)行端接;同理,DQ 線由DDR3 SDRAM顆粒側(cè)輸出,在控制器端必須進(jìn)行端接;

          需要注意的是,并不是所有的DDR3控制器都支持write leveling功能,所以也意味著不能使用Fly_by拓?fù)浣Y(jié)構(gòu),通常這樣的主控芯片會有類似以下的描述:


          DBI功能與POD電平
          DBI的全稱是Data Bus Inversion數(shù)據(jù)總線反轉(zhuǎn)/倒置,它與POD電平密不可分,它們也是DDR4區(qū)別于DDR3的主要技術(shù)突破。

          POD電平的全稱是Pseudo Open-Drain 偽漏極開路,其與DDR3對比簡單的示例電路如下圖十所示。


          圖十 POD示意電路

          從中可以看到,當(dāng)驅(qū)動端的上拉電路導(dǎo)通,電路處于高電平時(shí)(也即傳輸?shù)氖?ldquo;1”),此時(shí)兩端電勢差均等,相當(dāng)于回路上沒有電流流過,但數(shù)據(jù)“1”還是照樣被傳輸,這樣的設(shè)計(jì)減少了功率消耗。


          正是由于POD電平的這一特性,DDR4設(shè)計(jì)了DBI功能。當(dāng)一個(gè)字節(jié)里的“0”比特位多于“1”時(shí),可以使能DBI,將整個(gè)字節(jié)的“0”和“1”反轉(zhuǎn),這樣“1”比“0”多,相比原(反轉(zhuǎn)前)傳輸信號更省功耗,如下表一所示。


          表一 DBI示例
          以上就是DDRx的一些主要的關(guān)鍵技術(shù)介紹,可以用如下表二所示來總結(jié)下DDRx的特性對比。

          表二 DDRx SDRAM特性對比

          更多有關(guān)DDR技術(shù)文章,歡迎訪問與非網(wǎng)DDR專區(qū)



          關(guān)鍵詞: DDR 差分時(shí)鐘 DRAM DDR2

          評論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();