找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 4991|回復: 1
收起左側

ddr2 ip core的定制(altera)

[復制鏈接]
ID:104287 發(fā)表于 2016-1-31 03:48 | 顯示全部樓層 |閱讀模式
分為兩種IP core : UNIPHY 和ALTMEMPHY
比較 UNIPHY 性能更好一點不支持cyclone系列芯片,,ALTEMPHY 支持所有altera支持DDR2的芯片
其實兩種IP 使用方法相同
http://www.altera.com.cn/literature/hb/external-memory/emi_rldram_ii_ug.pdf
uniphy:IP核設置步驟:
Memory clock frequency:給DDR的時鐘頻率
1、對FPGA PHY設置
PLL reference clock frequency:FPGA時鐘引腳輸入的時鐘,供DDR的PLL使用時鐘頻率(關鍵設置)
Full or half rate on Avalon-MM interface: FULL---verilog邏輯部分數(shù)據(jù)位寬X2,速度/2,,達到了降頻的目的(關鍵設置)
Additional address/command clock phase:是否允許地址、控制信號有相位的移動(一般要設置,否則時鐘采樣有問題)
PLL sharing mode:指是否與IP核外部的PLL共用,如果共用的話會有相應的引腳從IP核引出----一般選擇NO SHARE 不共用,使用單獨的
PLL sharing mode:同上
OCT sharing mode:同上
2、對DDR 設置
memory vendor:廠家
memory format:discrete 分立器件(設計為單片DDDR) DIMM 內存條()
memory device speed grade :DDR2:速度等級,根據(jù)DDR 手冊
total interface with:數(shù)據(jù)位寬度(根據(jù)設計填寫)
DQ/DQS groups:一般8
number of chip selects  CS: 片選的個數(shù) 一般為1個
ROW address width:行地址個數(shù) 13 (根據(jù)DDR 手冊)
column address width:列地址個數(shù)(根據(jù)DDR 手冊)
bank-address width:bank個數(shù)(根據(jù)DDR 手冊)
ddr寄存器設置
mode register 0
burst length:突發(fā)長度
read bust type:突發(fā)類型--sequence順序的--interle斷續(xù)的 一般為sequence
CAS latency :CAS延時參數(shù)設置
mode register 1
output drive strength :輸出電流強度(對信號的阻抗匹配有幫助)
memory ODT:設置DDR2的片上電阻值
到此-----------------------------------------------------------------
自己定制的DDR2/DDR3控制器就完成了-----------可以進行編譯了-------------其中紅色為關鍵設置
注意:隨著IP核會產生很多tcl文件--------------必須運行引腳分配約束的TCL 否則無法編譯通過
------------------
最后經過調試:心得
  DDR2的IP使用調試非常簡單,也非常穩(wěn)定---------注意參考IP核的LOCAL信號的時序要求
DDR2
(
// inputs:
.pll_ref_clk(CLOCK_50),//input 輸入給DDR2pll的時鐘
.global_reset_n(rst_n),//input復位
// inputs:
.local_ready(local_ready),//output                為高時可以進行寫--為低時DDR2忙
.local_burstbegin(local_burstbegin),//input    突發(fā)寫開始--一個時鐘周期
.local_address(local_address),//input [22:0]  讀寫的地址---包括行列bank地址的排列位數(shù)和
// read
.local_read_req(local_read_req),//input          讀請求
.local_rdata(local_read_data),//output  [63:0] 數(shù)據(jù)輸出
.local_rdata_valid(local_rdata_valid),//output   輸出數(shù)據(jù)的有效信號
// write
.local_write_req(data_en),//input  data_en1,local_write_req 寫請求
.local_wdata(local_wdata),//input [63:0]                             寫數(shù)據(jù)
//
.local_be(8'hff),///input [7:0]                       是否屏蔽字節(jié),8位 一位為一個字節(jié)
.local_size(4),//input [2:0]                           突發(fā)長度1---7
.soft_reset_n(rst_n),//input         
//output  
.local_refresh_ack(),//output  
.local_init_done(),//output  
.reset_phy_clk_n(),//output

.aux_full_rate_clk(),//output  
.aux_half_rate_clk(),//output
.phy_clk(phy_clk),//output                               外部邏輯使用時鐘
.reset_request_n(),//output
//outputs:
.mem_addr(mem_addr),
.mem_ba(mem_ba),
.mem_cas_n(mem_cas_n),
.mem_cke(mem_cke),
.mem_clk(mem_clk),
.mem_clk_n(mem_clk_n),
.mem_cs_n(mem_cs_n),
.mem_dm(mem_dm),
.mem_dq(mem_dq),
.mem_dqs(mem_dqs),
.mem_odt(mem_odt),
.mem_ras_n(mem_ras_n),
.mem_we_n(mem_we_n)
   );
時序-----------------
寫:突發(fā)為4--8個時鐘周期延時較好
    時鐘:    1            2                  3                       4                        5                   6                 7
        給地址    寫請求=1    寫請求=1     寫請求=1          寫請求=1      寫請求=0         地址加4
          突發(fā)請求=1  突發(fā)請求=0   突發(fā)請求=0      突發(fā)請求=0      突發(fā)請求=0
          數(shù)據(jù)1     數(shù)據(jù)2      數(shù)據(jù)3      數(shù)據(jù)4      
寫:突發(fā)為4--8個時鐘周期延時較好
    時鐘:    1            2                 3                     4                       
        給地址    讀請求=1    讀請求=0        地址加4                 
          突發(fā)請求=1  突發(fā)請求=0 
                  
                 同有效信號一起出來4個64位數(shù)據(jù)                 
 數(shù)據(jù)1     數(shù)據(jù)2      數(shù)據(jù)3      數(shù)據(jù)4 




回復

使用道具 舉報

ID:581247 發(fā)表于 2020-4-5 09:55 | 顯示全部樓層
想請教一下樓主 我想從ddr中讀取數(shù)據(jù)交給DAC,DAC工作頻率200MHz;那Memory clock frequency是應該設置100MHz嗎
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表