Xilinx 7系列例化MIG IP core DDR3讀寫


昨晚找了一下,發現DDR3讀寫在工程上多是通過例化MIG,調用生成IPcore的HDL Functional Model。我說嘛,自己哪能寫出那么繁瑣的,不過DDR讀寫數據可以用到狀態機,后期再添磚加瓦吧,當下先對比一下網上找的一段程序和自己例化后的程序。
另外,仿真了十余分鍾,最后的是什么鬼?一頭霧水T.T。想着每一次要分析信號要等那么久就難受。
Xilinx <wbr>7系列例化MIG <wbr>IP <wbr>core <wbr>DDR3讀寫

更重要的是分享一波關於“ 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 <wbr>7系列例化MIG <wbr>IP <wbr>core <wbr>DDR3讀寫
這幾個信號的分析總結在“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是對齊綁定的,而不和數據域綁定。
Xilinx <wbr>7系列例化MIG <wbr>IP <wbr>core <wbr>DDR3讀寫
寫通道:
Xilinx <wbr>7系列例化MIG <wbr>IP <wbr>core <wbr>DDR3讀寫
讀通道:
Xilinx <wbr>7系列例化MIG <wbr>IP <wbr>core <wbr>DDR3讀寫

  2.讀操作
 
寫時序仿真結果圖:
Xilinx <wbr>7系列例化MIG <wbr>IP <wbr>core <wbr>DDR3讀寫
分析:以clk為基礎時鍾,“app_en=1、app_rdy=1”時“app_addr”有效,四個時鍾,寫入了四個地址,另外需要強調一點的是:  app_addr[ADDR_WIDTH – 1:0] 是ddr3的地址,精確到每個col地址,但是因為實際突發長度(Burst Length)要求8所以每個數據都是第4位開始。因此第四位開始app_addr進行二進制增加。
 
讀時序仿真結果圖:
Xilinx <wbr>7系列例化MIG <wbr>IP <wbr>core <wbr>DDR3讀寫
分析:暫時擱置
 
********************20170521更新:關於V7系列的mig例化********************
早上大致看了以下師兄給的VC709板關於mig例化仿真文檔,雙BANK,先是bank a,再是bank b,最后bank a_b,xilinx 用K7系列和V7系列例化的過程幾乎一致,只是V7的這份user guide的仿真環境是vivado,用ise應該是一樣的效果,今天中午的問題卡在了在例化過程中加入.dxc引腳文件時報錯了,見下圖:
Xilinx <wbr>7系列例化MIG <wbr>IP <wbr>core <wbr>DDR3讀寫
郁悶的很,大概直譯一下“對於某些端口,即使對於所選擇的配置是必需的,也不提供位置約束。 以下是提供的UCF中缺少的端口:ddr3_addr[15]”,ddr3_addr[15:0],16bit,單單最后這位的引腳配置報錯,我嘗試手動輸入這120余個引腳信息,但是IO standard又不能強行輸入,就放棄了此想法。sublime打開xilinx官網down的dxc文件,找到ddr3_addr[15]口,見下圖:
Xilinx <wbr>7系列例化MIG <wbr>IP <wbr>core <wbr>DDR3讀寫
對比了一下ddr3_addr[15]和ddr3_addr[14:0]之間的差別,沒發現有毛病。難道我思考方向錯了?!
 
花了40min中,按照dxc中的信息強行把管腳配置完畢,人工配置太累了,下圖是配置管腳后的:
Xilinx <wbr>7系列例化MIG <wbr>IP <wbr>core <wbr>DDR3讀寫
輸入完后系統會識別IO標准:
Xilinx <wbr>7系列例化MIG <wbr>IP <wbr>core <wbr>DDR3讀寫
終於又可以繼續了... ...
**********20170713更新:上面遇到的問題是因為ise不支持xdc引腳文件的緣故,vivado平台下正常**********
 
Here is the Summary
Xilinx <wbr>7系列例化MIG <wbr>IP <wbr>core <wbr>DDR3讀寫
 
********************20170522更新:DDR3內部核心頻率、時鍾頻率、數據傳輸頻率********************
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.
 
 

3

0

 
閱讀 (1836)┊ 評論 (3)收藏(0) 轉載(1) ┊ 喜歡 打印舉報
已投稿到:
 
 
 
  • 文鋒若風

     
    1.SDRAM的內部是一個個存儲陣列。這些存儲陣列就代表了一個個的Logical-Bank(L-Bank)。每個陣列中的小單元就是最小的存儲單元,其位數即為Bank的位數。當前的SDRAM多為4 bank.

    5月16日 20:28回復(0)

  • 文鋒若風

    2.DQS是內存和內存控制器之間信號同步用的。 
    由DQ信號發出端發出DQS,信號接收端根據DQS的上、下沿來觸發數據的接收。 
    簡單點說,如果是從內存中讀取信號,那么主板北橋(內存控制器)根據內存發出的DQS來判斷在什么時候接收讀出來的數據。如果是寫的話,就正好相反,內存根據北橋發出的DQS來觸發數據的接收。 
    DDR2每芯片有一個讀、寫雙向的DQS,DDR3是有讀和寫兩個DQS(2個DQS的好處是,不必等待DQS反向)。 
轉載:http://blog.sina.com.cn/s/blog_b5fa66e50102wx5e.html


免責聲明!

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



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