[轉帖]DDR3的學習


來源:http://blog.chinaaet.com/yuwoo/p/5100018567

FPGA器件預布線,以及ddr3調試問題匯總與總結

 

2019117日星期四

DDR3的速率是800MHZ(由FPGA 7A200TFFG1156-1限制,DDR3實際是1600MHZ),DDR3的位寬是4顆*16bit=64bit,因此DDR3的帶寬如下:

64*0.8=51.2Gbit

1080P60的帶寬是1080*1920*32*60=4Gbit

6*4=24Gbit,讀6*4=24Gbit

48Gbit66出花屏,或者84出。而實際是X14的輸出板達不到4個1080P60進同時4個1080P60出。原因跟DDR3的走線有關。

來源:http://blog.csdn.net/kpsuwen/article/details/50389804

最近幾天在做XILINX FPGA DDR3調試,調用ISE中的MIG核。從網上找到了講解很詳細的資料,將需要注意的DDR3的讀寫控制信號減少到6個,還有另外兩個DDR3輸出的兩個狀態信號,即可實現DDR3的實際讀寫。

DDR3 IP核的仿真倒是好做,ISE自帶仿真測試文件,不用寫任何代碼,即可Modelsim中做仿真,查看仿真結果,不過一些標志信號還是需要看手冊了解。

實際使用時,如果是流動數據,多是跨時鍾域,一般需要在DDR3輸入輸出前后加入FIFO,然后做好相關的信號控制。

調試到現在遇到一個問題,尚未解決。讀DDR第一個地址,輸出的卻是最后存入的數據,不清楚哪里出了問題!

【補充】經過檢查發現,FIFO輸出數據與DDR3的寫入沒有對齊,修改后就好了!

 

invoke調用,scheme機制,

 1250ps--800MHZ, 1875ps--533.33MHZ

作者非常的幽默,關於DDR3共有下面幾篇介紹。

來源:http://blog.chinaaet.com/detail/35142Xilinx/Avnet Spartan-6 LX16開發平台研究之路之屢敗屢戰

——By CrazyBingo,——20140228此作者也很幽默。

SPARTAN 6的MCB最快能跑到400MHz. 如果跟DDR3一起用的話, 能達到800MB/s的帶寬.

 

來源:spartan6_MCB使用詳解,努力設置一個DDR3,希望可以在Spartan6平台上跑起來。加油!

http://wenku.baidu.com/link?url=QvRcBy-8KhlZM-xYJsBo1cMeZzcUimG7z6UvRcJ7lIEUK6a3DZNv1QL7Y8eF47FUcGxpsXg3GYlYFH9g5VHOMZsJKyj8WywsSeAXKvIV-iW

 

xilinx平台DDR3設計教程之仿真篇_中文版教程,來源如下:

 http://wenku.baidu.com/view/ac32c8bcf705cc1754270923.html 

xilinx平台DDR3設計教程之綜合篇_中文版教程,來源如下:

http://wenku.baidu.com/view/2ffa1334783e0912a3162a26.html?from_page=view&from_mod=download

xilinx平台DDR3設計教程之設計篇_中文版教程3,來源如下:

http://wenku.baidu.com/view/e42b2ac8f90f76c660371a3c.html

xilinx平台DDR3設計教程之高富帥篇_中文版教程,來源如下:

http://wenku.baidu.com/link?url=7Uz2za6DSwD8EgPaSJ3n_Kw5-LyRMlqFXZvrSO0Pty66WFmkWXOZ8x7-A4ZBN5XJ5EB7fKp7KgqcvAmpKSgkn0X_hmGmA8Cx0_ugg5hy4ea

 DDR3時序分析與設計,來源如下:

http://wenku.baidu.com/link?url=oxhorRPGbVJqnVMrMfy-AVMJ_Clj_A63Y0YR9WCwOji50xGPhIOht8SUREct1wFhpDfSH4TzJFazQmhPgMz_Cg3rP97FN3yxhF3g1wTKGle

DDR3 SRAM存儲器目標速率已達到1600Mbps,大大提高了傳輸帶寬和傳輸效率。顆粒指bank,內存bank之間DQS與clk信號的時延偏差。

片上端接電阻ODT

基於FPGA的DDR3SDRAM控制器設計及實現,來源如下:

http://wenku.baidu.com/link?url=guDCfZ9JTj4FN79ostKNrekN4YDl1eiaI6HDi7m_0lFmNGJdmajkMSHdKt88DzWceiDTZlasvNL8pB--3enDac5H2oBCQWmSYS9HGVZF8yO

 ===================================================================

來源:http://wenku.baidu.com/view/e42b2ac8f90f76c660371a3c.html

地址的算法,記得每個地址可以存64bit數據,若按字節運算還要除以8。

2^(rank+bank+row+column)。其中rank是DIMM的排列方式,可以單面排列也可以雙面排列。

來源:http://blog.163.com/fpga_ip/blog/static/20444302420129161139165/

 

造成隨機存取效率較低的原因主要有:1.同Bank行切換;2.同時打開的Bank數只能是4個;3.讀寫切換。

八.解決辦法

1.將Xilinx的DDR3控制器的同時能打開的bank數改為8;

2.調整DDR3訪問(讀或寫)的順序,避免同Bank行切換以及讀寫切換  

是的,當app_wdf_rdy為高時表示能夠寫入數據,反壓信號的意思是當后面的邏輯處理不過來寫入的數據時,通過一個信號告訴前面的邏輯,這個反壓信號為1時,表示后面邏輯已經busy了,前面邏輯就要停止發送讀寫命令了。

DIMM全稱是Dual-Inline-Memory-Modules,即雙列直插式存儲模塊。這是在奔騰CPU推出后出現的新型內存條,DIMM提供了64位的數據通道。就是通常所說的內存條。

        如果用的是Xilinx的FPGA與DIMM對接,他們的MIG生成的DDR控制器中同時只能打開4個bank。如果需要打開第五個bank,控制器就會把前4個先關掉,這個過程也是比較浪費DIMM帶寬的。而DDR控制器同時打開的bank數是可以通過參數修改的,建議通過改參數將同時打開bank數調整為8。

 

來源:http://bbs.eetop.cn/thread-378689-1-1.html

ISE14.x的MIG做DDR3控制器的討論:

我記得ise的ip向導生成ddr3的ip核時,會讓你選地址bank,數據bank,時鍾bank,你先看看畫原理圖的人把地址引腳、數據引腳、時鍾引腳分別給你放在了哪個bank里,生成的時候直接改進去。

你是手動 gvim example.ucf文件,並自己手動填寫的吧;DDR3的引腳是有專用的高速邏輯區域的,你要在
生成過程中添加約束的時候,選擇下面的那個選項;然后自己填寫相應引腳名稱就可以了。這樣你會發現和你自己手動打開再去寫,文件內容是不一樣的。

指定了DDR3的 BANK 就固定了DDR3的相關引腳。 PCB要連對了才行。

 

來源:http://www.altera.com.cn/support/kdb/solutions/rd01112011_972.html

http://www.doc88.com/p-91390067599.html 采用外部存儲器解決方案提高系統性能。

http://wenku.baidu.com/view/d5e126f69e31433239689395.html終極內存技術指南

http://wenku.baidu.com/view/acfdfed733d4b14e8524687f.html高手進階,終極內存技術指南——完整    寫得非常好。

Physical layer interface (PHY)物理層接口,AFI = Altera PHY interface,intellectual property (IP)[專利] 知識產權。

Bandwidth and speed 帶寬和速度,Cost成本,Data storage size and capacity數據存儲大小和容量,Latency延遲,Power consumption功耗。

DRAM動態隨機存取存儲器(Dynamic Random Access Memory)是一種低帶寬和低速度,低成本,高數據存儲大小和高容量,高延遲,高功耗的存儲器。

SRAM靜態隨機存儲器(Static Random Access Memory)是一種高帶寬和高速度,高成本,低數據存儲大小和低容量,低延遲,低功耗的存儲器。是一種常用的存儲器,因為速度比容量更重要。

SDRAM同步動態隨機存儲器Synchronous Dynamic Random Access Memory。同步是指 Memory工作需要同步時鍾,內部的命令的發送與數據的傳輸都以它為基准;動態是指存儲陣列需要不斷的刷新來保證數據不丟失;隨機是指數據不是線性依次存儲,而是自由指定地址進行數據讀寫。

DDR3 SDRAM中DQS, DQSn, and DQ ports是雙向的。讀寫操作共享地址端口。1.5V電壓,深度從512MB到8GB,內部8塊,允許塊交叉訪問,預取值是8,速度從300到1066MHZ。

ODT終端電阻,DQ  DQS   DQSn   DM信號線。CAS latency,   Burst length觸發長度,Posted CAS:前置CAS

     物理Bank 也叫行(Rank),物理塊(P-Bank)定義:內存總線的數據位寬與CPU數據總線的位寬相等,因此P-Bank的位寬是固定的。

     芯片組是由物理塊組成的,其中物理塊=芯片位寬*芯片數量。

     物理塊(P-Bank)-->邏輯塊L-Bank(存儲陣列)類似表格-->存儲單元Word(用行、列進行尋址) 類似單元格。位寬的變化會引起存儲單元的變化。

     若內存芯片的容量為128Mbit(M*W,其中M為芯片中存儲單元總數,W為存儲單元的容量即芯片的位寬),當DIMM采用2個P-Bank+16bit芯片設計,則只能容納8顆芯片。此時,DIMM的容量是8*128Mbit=128MB。如果DIMM用2個P-Bank+4bit,則只能容納32顆芯片。此時,DIMM的容量是32*128Mbit=512MB。(1個P-Bank的固定位寬為64bit,則2個P-Bank的固定位寬為128bit。當芯片位寬為16bit時,芯片數量為8顆,當芯片位寬為4bit時,芯片數量為32顆),因此在芯片容量相同時,DIMM的容量肯定比不上采用低位寬芯片的模組,因為后者在一個P-Bank中可以容納更多的芯片。

     SDRAM 的引腳包含電源和時鍾引腳。針對2個P-Bank要有1個片選信號,確定物理塊。針對SDRAM最多有4個L-Bank,因此要有2個地址信號用於L-Bank尋址,確定芯片。行/列尋址確定存儲單元,在相同容量下,行數不變,只有列數會根據位寬的而變化,位寬越大,列數越少,因為所需的存儲單元減少了。相同位寬數據總線引腳。

 128Mbit = 2M*4Banks*16bit。(8M*16)

 128Mbit = 4M*4Banks*8bit。(16M*8)

 128Mbit = 8M*4Banks*4bit。(32M*4)      

The 1Gb chip is organized as 16Mbit x 8 I/Os x 8 banks or 8Mbit x 16 I/Os x 8 bank devices

  • DDR3 SDRAM x32
    • Micron MT41J64M16LA-15E DDR3 SDRAM 8MX16X8      兩片DDR3就是32位 256MB
    • Two devices: 2 x16 width = x32
    • BTS DDR3 SDRAM GUI using Uniphy and high performance (HP) controller II

其中n取0,1,2,...

SDRAM 的內部基本操作與工作時序

1、芯片初始化:模式寄存器(MR,Mode Register)的設置,簡稱MRS(MR Set)(操作模式,CAS潛伏期CL,BT突發傳輸方式,突發長度BL)第10/68頁。

2、行有效(L-Bank 有效):在CS#、L-Bank 定址的同時,RAS(Row Address Strobe,行地址選通脈沖)也處於有效狀態。此時An 地址線則發送具體的行地址。第11/68頁。

3、列讀寫:WE#無效時是讀取命令 ,有效時是寫入命令。列尋址信號與讀寫命令是同時發出的。

時鍾頻率、tRCD、數據傳輸頻率、CL間的關系是倍數。

4、 數據輸出(讀)

tRCD是行選通周期即RAS to CAS Delay(RAS 至CAS 延遲)。

CAS 潛伏期(CAS Latency)即CL:從CAS 與讀取命令發出到第一筆數據輸出的一段時間。只在讀取時出現,也叫RL讀取潛伏期。CL 的單位與tRCD 一樣,為時鍾周
期數,具體耗時由時鍾頻率決定。

tAC(AccessTime from CLK,時鍾觸發后的訪問時間)。tAC 的單位是ns,對於不同的頻率各有不同的明確規定,但必須要小於一個時鍾周期,否則會因訪問時過長而使效
率降低。

5、數據輸入(寫):數據寫入的操作也是在tRCD 之后進行,但此時沒有了CL(記住,CL 只出現在讀取操作中)。

寫入/校正時間(tWR,Write Recovery Time),也稱為寫回(Write Back)。tWR 至少占用一個時鍾周期或再多一點(時鍾頻率越高,tWR 占用周期越多)。

6、突發長BL

突發(Burst)是指在同一行中相鄰的存儲單元連續進行數據傳輸的方式,連續傳輸所涉及到存儲單元(列)的數量就是突發長度(Burst Lengths,簡稱BL)。

只要指定起始列地址與突發長度,內存就會依次地自動對后面相應數量的存儲單元進行讀/寫操作而不再需要控制器連續地提供列地址。這樣,除了第一筆數據的傳輸需要若干個周
期(主要是之前的延遲,一般的是tRCD+CL)外,其后每個數據只需一個周期即可獲得。

4QWORD是指BL=4,QWORD=64bit。P-Bank-->L-Bank-->Row

突發讀/突發寫,表示讀與寫操作都是突發傳輸的,每次讀/寫操作持續BL 所設定的長度,這也是常規的設定。

突發讀/單一寫,表示讀操作是突發傳輸,寫操作則只是一個個單獨進行。

突發傳輸模式代表着突發周期內所涉及到的存儲單元的傳輸順序。

順序傳輸是指從起始單元開始順序讀取。假如BL=4,起始單元編號是n,順序就是n、n+1、n+2、n+3。

交錯傳輸就是打亂正常的順序進行數據傳輸(比如第一個進行傳輸的單元是n,而第二個進行傳輸的單元是n+2 而不是n+1)。

7、預充電

由於SDRAM 的尋址具有獨占性,所以在進行完讀寫操作后,如果要對同一L-Bank 的另一行進行尋址,就要將原來有效(工作)的行關閉,重新發送行/列
地址。L-Bank 關閉現有工作行,准備打開新行的操作就是預充電(Precharge)。 

在發出預充電命令之后,要經過一段時間才能允許發送RAS 行有效命令打開新的工作行,這個間隔被稱為tRP(Precharge command Period,預充電有效周期)。和tRCD、CL 一樣,tRP 的單位也是時鍾周期數,具體值視時鍾頻率而定。

以內存最主要的操作——讀取為例。tRCD 決定了行尋址(有效)至列尋址(讀/寫命令)之間的間隔,CL 決定了列尋址到數據進行真正被讀取所花費的時間,tRP 則決定了相同L-Bank 中不同工作行轉換的速度。

在單獨的預充電命令中,A10 則控制着是對指定的L-Bank 還是所有的L-Bank(當有多個L-Bank 處於有效/活動狀態時)進行預充電,前者需要提供L-Bank 的地址,后者只需將A10 信號置於高電平。

預充電可以通過命令控制,也可以通過輔助設定讓芯片在每次讀寫操作之后自動進行預充電。

8、刷新:SDRAM需不斷地進行刷新(Refresh)才能保留住數據。

 刷新操作與預充電中重寫的操作一樣,都是用S-AMP 先讀再寫。由於預充電是對一個或所有L-Bank 中的工作行操作,並且是不定期的,而刷新則是有固定的周期,依次對所有行進行操作,以保留那些久久沒經歷重寫的存儲體中的數據。但與所有L-Bank 預充電不同的是,這里的行是指所有L-Bank 中地址相同的行,而預充電中各L-Bank 中的工作行地址並不是一定是相同的。

刷新操作分為兩種:自動刷新(Auto Refresh,簡稱AR)與自刷新(SelfRefresh,簡稱SR)。由於刷新是針對一行中的所有存儲體進行,所以無需列尋址,或者說CAS 在RAS 之前有效。所以,AR 又稱CBR(CAS Before RAS,列提前於行定位)式刷新。SR 則主要用於休眠模式低功耗狀態下的數據保存。在SR 期間除了CKE 之外的所有外部信號都是無效的(無需外部提供刷新指令),只有重新使CKE 有效才能退出自刷新模式並進入正常操作狀態。

9、數據掩碼

在講述讀/寫操作時,我們談到了突發長度。如果BL=4,那么也就是說一次就傳送4×64bit 的數據。但是,如果其中的第二筆數據是不需要的,怎么辦?還都傳輸嗎?為了屏蔽不需要的數據,人們采用了數據掩碼(Data I/O Mask,簡稱DQM)技術。通過DQM,內存可以控制I/O 端口取消哪些輸出或輸入的數據。這里需要強調的是,在讀取時,被屏蔽的數據仍然會從存儲體傳出,只是在“掩碼邏輯單元”處被屏蔽。

SDRAM 官方規定,在讀取時DQM 發出兩個時鍾周期后生效,而在寫入時,DQM與寫入命令一樣是立即成效。

DDR SDRAM雙倍數據流SDRAM(Double Data Rate SDRAM)

DLL=Delayed Locked Loop(延遲鎖定環路)。DQS= DQ Strobe(數據選取脈沖)。

SDRAM 中L-Bank 存儲單元的容量與芯片位寬相同,而DDR SDRAM 中L-Bank 存儲單元的容量是芯片位寬的一倍。即芯片內部總線位寬=2*芯片I/O總線位寬,也叫2位預取(2-bit Prefetch)。

DDR SDRAM 在MRS 之前還多了一EMRS 階段(Extended Mode Register Set,擴展模式寄存器設置),這個擴展模式寄存器控制着DLL 的有效/禁止、輸出驅動強度、QFC 有效/無效等。

1、 差分時鍾:它是DDR 的一個必要設計,起到觸發時鍾校准的作用,用CK#去校准CK。

2、 數據選取脈沖(DQS):它是DDR SDRAM 中的重要功能,它的功能主要用來在一個時鍾周期內准確的區分出每個傳輸周期,並便於接收方准確接收數據。

DQS是雙向的,在寫入時它用來傳送由北橋發來的DQS 信號,讀取時,則由芯片生成DQS 向北橋發送。完全可以說,它就是數據的同步信號。在讀取時,DQS 與數據信號同時生成。在寫入時,芯片不再自己生成DQS,而以發送方傳來的DQS 為基准,並相應延后一定的時間,在DQS 的中部為數據周期的選取分割點(在讀取時分割點就是上下沿),從這里分隔開兩個傳輸周期。這樣做的好處是,由於各數據信號都會有一個邏輯電平保持周期,即使發送時不同步,在DQS 上下沿時都處於保持周期中,此時數據接收觸發的准確性
無疑是最高的。

3、 寫入延遲

在上面的DQS 寫入時序圖中,可以發現寫入延遲已經不是0 了,在發出寫入命令后,DQS 與寫入數據要等一段時間才會送達。這個周期被稱為DQS 相對於寫入命令的延遲時間(tDQSS, WRITE Command to the first corresponding rising edge of DQS)。

               當CL=2.5 時,讀后寫的延遲將為tDQSS+0.5 個時鍾周期(圖中BL=2)

4、突發長度與寫入掩碼

在DDR SDRAM 中,突發長度只有2、4、8 三種選擇,沒有了隨機存取的操作(突發長度為1)和全頁式突發。

5、 延遲鎖定回路(DLL):它的作用是使內部時鍾與外部時鍾保持同步。有兩種方法:時鍾頻率測量法(CFM)和時鍾比較法(CC)

DLL 不同於主板上的PLL,它不涉及頻率與電壓轉換,而是生成一個延遲量給內部時鍾。

第51/68頁介紹:

第64/68頁介紹:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM