昨晚找了一下,發現DDR3讀寫在工程上多是通過例化MIG,調用生成IPcore的HDL Functional Model。我說嘛,自己哪能寫出那么繁瑣的,不過DDR讀寫數據可以用到狀態機,后期再添磚加瓦吧,當下先對比一下網上找的一段程序和自己例化后的程序。
郁悶的很,大概直譯一下“對於某些端口,即使對於所選擇的配置是必需的,也不提供位置約束。 以下是提供的UCF中缺少的端口:ddr3_addr[15]”,ddr3_addr[15:0],16bit,單單最后這位的引腳配置報錯,我嘗試手動輸入這120余個引腳信息,但是IO standard又不能強行輸入,就放棄了此想法。sublime打開xilinx官網down的dxc文件,找到ddr3_addr[15]口,見下圖:
另外,仿真了十余分鍾,最后的是什么鬼?一頭霧水T.T。想着每一次要分析信號要等那么久就難受。

更重要的是分享一波關於“
Xilinx平台下DDR3設計教程”的資料。就其中的“仿真篇”而言,親測可行,還是中文版
datasheet看着親切。0.0
********************20170519更新:確定關鍵信號及學習博客********************
前天師兄確定說是利用MIG IP core進行例化,參考了幾份關於UG重點詳解:https://wenku.baidu.com/view/63e8c92d195f312b3069a5ea.html
http://blog.chinaaet.com/chinaaetwoaini/p/5100050615
更重要的是找到了“XILINX DDR3 IP核使用教程完版”http://download.csdn.net/download/kpsuwen/9374463
do sim.do仿真后加入“app_cmd、app_addr、app_en、app_rdy、app_wdf_wren、app_wdf_end、app_wdf_rdy、app_wdf_data”等用戶核心信號(下圖是UG586文檔第58頁中的“內存接口示意圖”)。我們主要關心的是左側關於寫操作的交互信號。
********************20170520更新:對用戶信號進行總結及簡單的讀寫時序********************
這幾個信號的分析總結在“XILINX DDR3 IP核使用教程完版”中都有所提及,我就稍微的總結一下:
1.寫操作由兩套系統:地址域和數據域。
1.1.地址域:在地址域上,app_rdy(controlled by DDR3)、app_en(controlled by user)同時拉高為1時地址app_addr(29bit=rank 1+bank 3+row 15+ column 10)才有效;
1.2.數據域:在數據域上,app_wdf_rdy(controlled by DDR3)、app_wdf_wren(controlled by user)同時拉高為1時數據app_wdf_data才有效。
1.3.app_wdf_data和app_rd_data[APP_DATA_WIDTH-1:0]信號都是數據信號,其中“2 * nCK_PER_CLK * PAYLOAD_WIDTH”,“nCK_PER_CLK=4”,“PAYLOAD_WIDTH = (ECC_TEST == "OFF") ? DATA_WIDTH : DQ_WIDTH”,“ECC_TEST == OFF”故“PAYLOAD_WIDTH =DATA_WIDTH=64”。2*4*64=512。數據位寬與BL有關,BL=8表示DDR3-SDRAM每次可以寫入8個64bit數據,512bit
1.4.地址和數據不一定需要同步,可提前或者滯后兩個時鍾,見下圖。另外下圖也可看出命令信號app_cmd和地址信號app_addr是對齊綁定的,而不和數據域綁定。
寫通道:
寫時序仿真結果圖:
讀時序仿真結果圖:
********************20170521更新:關於V7系列的mig例化********************
早上大致看了以下師兄給的VC709板關於mig例化仿真文檔,雙BANK,先是bank a,再是bank b,最后bank a_b,xilinx 用K7系列和V7系列例化的過程幾乎一致,只是V7的這份user guide的仿真環境是vivado,用ise應該是一樣的效果,今天中午的問題卡在了在例化過程中加入.dxc引腳文件時報錯了,見下圖:

郁悶的很,大概直譯一下“對於某些端口,即使對於所選擇的配置是必需的,也不提供位置約束。 以下是提供的UCF中缺少的端口:ddr3_addr[15]”,ddr3_addr[15:0],16bit,單單最后這位的引腳配置報錯,我嘗試手動輸入這120余個引腳信息,但是IO standard又不能強行輸入,就放棄了此想法。sublime打開xilinx官網down的dxc文件,找到ddr3_addr[15]口,見下圖:
花了40min中,按照dxc中的信息強行把管腳配置完畢,人工配置太累了,下圖是配置管腳后的:
**********20170713更新:上面遇到的問題是因為ise不支持xdc引腳文件的緣故,vivado平台下正常**********
Here is the Summary
********************20170522更新:DDR3內部核心頻率、時鍾頻率、數據傳輸頻率********************
1.核心頻率/Core Frequency/:(解釋1)內存cell陣列的工作頻率,它是內存的真實運行頻率。(解釋2)每款芯片都有其自己的極限頻率,這個極限頻率就是內存的核心頻率,或者說是它能正常工作的頻率,因此把內存的頻率稱為內存的真實頻率。
1.核心頻率/Core Frequency/:(解釋1)內存cell陣列的工作頻率,它是內存的真實運行頻率。(解釋2)每款芯片都有其自己的極限頻率,這個極限頻率就是內存的核心頻率,或者說是它能正常工作的頻率,因此把內存的頻率稱為內存的真實頻率。
2.時鍾頻率:(解釋1)I/O Buffer(輸入/輸出緩存)的傳輸頻率。(解釋2)內存作為數字邏輯芯片,本身不產生頻率,頻率是主板上的頻率發生器外加給它的,主板上產生的這個頻率稱為時鍾頻率。
3.數據傳輸頻率:內存與系統交換數據的頻率,也稱為內存的等效頻率或者接口頻率。
*****三者在內存中的關系*****
核心頻率就是內存的工作頻率,到DDR2、DDR3才有了時鍾頻率概念,時鍾頻率是將核心頻率通過倍頻技術得到的一個頻率。///DDR內存核心頻率和時鍾頻率相同,但在傳輸數據的時候在脈沖的上升沿和下降沿都傳輸了一次,所以數據傳輸頻率是核心頻率的2倍;DDR2內存將核心頻率倍頻2倍得到了時鍾頻率,同樣在上升沿和下降沿各傳輸一次數據,所以數據傳輸頻率就是核心頻率的4倍、時鍾頻率的兩倍;DDR3內存的時鍾頻率是核心頻率的4倍,同樣在上升沿和下降沿各傳輸一次數據,所以數據傳輸頻率就是核心頻率的8倍。
Following are three examples.
DDR2-800:核心頻率200MHz,時鍾頻率400MHz,數據傳輸頻率800MHz;
DDR3-800:核心頻率100MHz,時鍾頻率400MHz,數據傳輸頻率800MHz;
DDR3-1066:核心頻率166MHz,時鍾頻率533MHz,數據傳輸頻率1066MHz.
-
2.DQS是內存和內存控制器之間信號同步用的。
由DQ信號發出端發出DQS,信號接收端根據DQS的上、下沿來觸發數據的接收。
簡單點說,如果是從內存中讀取信號,那么主板北橋(內存控制器)根據內存發出的DQS來判斷在什么時候接收讀出來的數據。如果是寫的話,就正好相反,內存根據北橋發出的DQS來觸發數據的接收。
DDR2每芯片有一個讀、寫雙向的DQS,DDR3是有讀和寫兩個DQS(2個DQS的好處是,不必等待DQS反向)。
轉載:http://blog.sina.com.cn/s/blog_b5fa66e50102wx5e.html