一、DDR3基礎知識介紹
1、DDR基本原理介紹
參考文檔:《DDR3基礎知識介紹》
2、關鍵時序參數的介紹
參考文檔:《DDR3詳解(以Micron MT41J128M8 1Gb DDR3 SDRAM為例)》
1)tRCD的概念:
在實際工作中,Bank地址與相應的行地址是同時發出的,此時這個命令稱之為“行激活”(Row Active)。在此之后,將發送列地址尋址命令與具體的操作命令(是讀還是寫),這兩個命令也是同時發出的,所以一般都會以“讀/寫命令”來表示列尋址。根據相關的標准,從行有效到讀/寫命令發出之間的間隔被定義為tRCD,即RAS to CAS Delay(RAS至CAS延遲,RAS就是行地址選通脈沖,CAS就是列地址選通脈沖),我們可以理解為行選通周期。tRCD是DDR的一個重要時序參數,廣義的tRCD以時鍾周期(tCK,Clock Time)數為單位,比如tRCD=3,就代表延遲周期為兩個時鍾周期,具體到確切的時間,則要根據時鍾頻率而定,DDR3-800,tRCD=3,代表30ns的延遲。
圖中顯示的是tRCD=3
2)CL和tAC的概念
接下來,相關的列地址被選中之后,將會觸發數據傳輸,但從存儲單元中輸出到真正出現在內存芯片的 I/O 接口之間還需要一定的時間(數據觸發本身就有延遲,而且還需要進行信號放大),這段時間就是非常著名的 CL(CAS Latency,列地址脈沖選通潛伏期)。CL 的數值與 tRCD 一樣,以時鍾周期數表示。如 DDR3-800,時鍾頻率為 100MHz,時鍾周期為 10ns,如果 CL=2 就意味着 20ns 的潛伏期。不過CL只是針對讀取操作。
由於芯片體積的原因,存儲單元中的電容容量很小,所以信號要經過放大來保證其有效的識別性,這個放大/驅動工作由S-AMP負責,一個存儲體對應一個S- AMP通道。但它要有一個准備時間才能保證信號的發送強度(事前還要進行電壓比較以進行邏輯電平的判斷),因此從數據I/O總線上有數據輸出之前的一個時鍾上升沿開始,數據即已傳向S-AMP,也就是說此時數據已經被觸發,經過一定的驅動時間最終傳向數據I/O總線進行輸出,這段時間我們稱之為 tAC(Access Time from CLK,時鍾觸發后的訪問時間)。
圖中標准CL=2,tAC=1
3)DQS的概念
DQS 是DDR中的重要功能,它的功能主要用來在一個時鍾周期內准確的區分出每個傳輸周期,並便於接收方准確接收數據。每一顆芯片都有一個DQS信號線,它是雙向的,在寫入時它用來傳送由北橋發來的DQS信號,讀取時,則由芯片生成DQS向北橋發送。完全可以說,它就是數據的同步信號。
在讀取時,DQS與數據信號同時生成(也是在CK與CK#的交叉點)。而DDR內存中的CL也就是從CAS發出到DQS生成的間隔,DQS生成時,芯片內部的預取已經完畢了,由於預取的原因,實際的數據傳出可能會提前於DQS發生(數據提前於DQS傳出)。由於是並行傳輸,DDR內存對tAC也有一定的要求,對於DDR266,tAC的允許范圍是±0.75ns,對於DDR333,則是±0.7ns,有關它們的時序圖示見前文,其中CL里包含了一段DQS 的導入期。
DQS 在讀取時與數據同步傳輸,那么接收時也是以DQS的上下沿為准嗎?不,如果以DQS的上下沿區分數據周期的危險很大。由於芯片有預取的操作,所以輸出時的同步很難控制,只能限制在一定的時間范圍內,數據在各I/O端口的出現時間可能有快有慢,會與DQS有一定的間隔,這也就是為什么要有一個tAC規定的原因。而在接收方,一切必須保證同步接收,不能有tAC之類的偏差。這樣在寫入時,芯片不再自己生成DQS,而以發送方傳來的DQS為基准,並相應延后一定的時間,在DQS的中部為數據周期的選取分割點(在讀取時分割點就是上下沿),從這里分隔開兩個傳輸周期。這樣做的好處是,由於各數據信號都會有一個邏輯電平保持周期,即使發送時不同步,在DQS上下沿時都處於保持周期中,此時數據接收觸發的准確性無疑是最高的。
3、內存頻率和容量
1)關於內存頻率的介紹
參考文檔:《內存工作頻率與帶寬》
鏈接:https://wenku.baidu.com/view/065565ad9b6648d7c0c7464b.html
以DDR3 1600為例
1)顆粒核心頻率:Fcore=200Mhz
2)工作頻率:Fwork=Fcorex2 = 400Mhz
3)等效頻率:Feq=Fworkx4= 1600Mhz
2、內存容量
參考文檔《MT41K256M16 Datasheet - Micron Technology》
1)DDR型號介紹
2)尋址介紹
、
上圖中Meg的意思是M(兆,也就是1K*1K)
128 Meg x 4 x 8 banks 意思是一個BANK有128M個單元,每個單元為4bit,
總共8個bank,因此總存儲量為4Gb。
二、DDR3仿真學習
1、在ISE中仿真
參考文檔:《xilinx平台DDR3設計教程之仿真篇》
1)使用ISE新建工程ddrex,然后打開工程添加MIG ip,如教程配置.
2)然后打開ipcore文件夾下面由ISE軟件自動生成的example工程:migex
3)然后添加以下路徑的文件,使其成為一個可綜合的example工程
4)然后添加以下路徑的verilog文件,進行仿真
5)運行仿真
差不多運行1.1ms后初始化才成功,也就是init_calib_complete才拉高
2、在Vivado中仿真DDR3
1、在IP核配置界面會默認選擇AXI Interface,而且不可以被用戶取消。
2、要先配置好參數,生成IP核后,再使用open example design這樣example design才會按照你所配置的參數進行工作
3、在vivado中進行打開example design后直接就可以運行仿真,不需要手動添加文件,如下圖所示,圖片來自《米聯客ZYNQ FPGA修煉秘籍-基於MIZ7035 開發板-第七季MIG 內存控制器的使用》
三、參考資料
1、《DDR3基礎知識介紹》
2、《內存工作頻率與帶寬》
3、《MT41K256M16 Datasheet - Micron Technology》
4、《xilinx平台DDR3設計教程之仿真篇》
5、《第七季MIG 內存控制器的使用》
6、《米聯客ZYNQ FPGA修煉秘籍-基於MIZ7035 開發板-第七季MIG 內存控制器的使用》