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