a7_ddr3的ip核建立與初始化
1、 a7_ddr3的ip核建立
連續單擊next,直至generate,完成ip核的生產。
2、 建立pll,產生200mhz時鐘。
直至完成,生產pll鎖相環時鐘。
3、 新建原始檔作為top層。
4、 例項化pll
//-----------instantiate pll---------------
clk_wiz_0 clk_wiz_0_inst
(// clock out ports
.clk_200m(clk_200m), // output clk_200m
// clock in ports
.clk_50m(sclk)); // input clk_50m
5、 例項化a7_ddr3 的ip核。
可copy此檔案的例化模板和輸入輸出埠。
mig_7series_0 mig_7series_0_inst (
// memory inte***ce ports
.ddr3_addr (ddr3_addr),
.ddr3_ba (ddr3_ba),
.ddr3_cas_n (ddr3_cas_n),
.ddr3_ck_n (ddr3_ck_n),
.ddr3_ck_p (ddr3_ck_p),
.ddr3_cke (ddr3_cke),
.ddr3_ras_n (ddr3_ras_n),
.ddr3_reset_n (ddr3_reset_n),
.ddr3_we_n (ddr3_we_n),
.ddr3_dq (ddr3_dq),
.ddr3_dqs_n (ddr3_dqs_n),
.ddr3_dqs_p (ddr3_dqs_p),
.init_calib_complete (init_calib_complete),
.ddr3_cs_n (ddr3_cs_n), //without cs,initial error
.ddr3_dm (ddr3_dm),
.ddr3_odt (ddr3_odt),
.ui_clk (ui_clk),
.ui_clk_sync_rst (ui_clk_sync_rst),
// system clock ports
.sys_clk_i (sclk),
.sys_rst (rst_n) // input sys_rst
);
6、 top層的輸入輸出介面
module a7_ddr3_ctrl(
input wire sclk,
input wire rst_n,
// inouts
9、 在tb中例化top層檔案埠
a7_ddr3_ctrl a7_ddr3_ctrl_inst(
.sclk (sclk ),
.rst_n (rst_n ),
.ddr3_dq (ddr3_dq ),
.ddr3_dqs_n (ddr3_dqs_n ),
.ddr3_dqs_p (ddr3_dqs_p ),
.ddr3_addr (ddr3_addr ),
.ddr3_ba (ddr3_ba ),
.ddr3_ras_n (ddr3_ras_n ),
.ddr3_cas_n (ddr3_cas_n ),
.ddr3_we_n (ddr3_we_n ),
.ddr3_reset_n (ddr3_reset_n ),
.ddr3_ck_p (ddr3_ck_p ),
.ddr3_ck_n (ddr3_ck_n ),
.ddr3_cke (ddr3_cke ),
.ddr3_cs_n (ddr3_cs_n ),
.ddr3_dm (ddr3_dm ),
.ddr3_odt (ddr3_odt )
);10、 例化model檔案(參考模型檔案)
將**檔案放入sim資料夾路徑下
ddr3_model u_comp_ddr3
(.rst_n (ddr3_reset_n),
.ck (ddr3_ck_p_sdram),
.ck_n (ddr3_ck_n_sdram),
.cke (ddr3_cke_sdram[r]),
.cs_n (ddr3_cs_n_sdram[r]),
.ras_n (ddr3_ras_n_sdram),
.cas_n (ddr3_cas_n_sdram),
.we_n (ddr3_we_n_sdram),
.dm_tdqs (ddr3_dm_sdram[(2*(i+1)-1):(2i)]),
.ba (ddr3_ba_sdram[r]),
.addr (ddr3_addr_sdram[r]),
.dq (ddr3_dq_sdram[16(i+1)-1:16*(i)]),
.dqs (ddr3_dqs_p_sdram[(2*(i+1)-1):(2i)]),
.dqs_n (ddr3_dqs_n_sdram[(2(i+1)-1):(2*i)]),
.tdqs_n (),
.odt (ddr3_odt_sdram[r])
);修改上述例化模板得到:
////
// memory models instantiations
//
//ddr3_model ddr3_model_inst
(.rst_n (ddr3_reset_n),
.ck (ddr3_ck_p),
.ck_n (ddr3_ck_n),
.cke (ddr3_cke),
.cs_n (ddr3_cs_n),
.ras_n (ddr3_ras_n),
.cas_n (ddr3_cas_n),
.we_n (ddr3_we_n),
.dm_tdqs (ddr3_dm),
.ba (ddr3_ba),
.addr (ddr3_addr),
.dq (ddr3_dq),
.dqs (ddr3_dqs_p),
.dqs_n (ddr3_dqs_n),
.tdqs_n (),
.odt (ddr3_odt)
);11、 tb中定義變數:
reg sclk;
reg rst_n;
wire [15:0] ddr3_dq;
wire [1:0] ddr3_dqs_n;
wire [1:0] ddr3_dqs_p;
// outputs
wire [13:0] ddr3_addr;
wire [2:0] ddr3_ba;
wire ddr3_ras_n;
wire ddr3_cas_n;
wire ddr3_we_n;
wire ddr3_reset_n;
wire [0:0] ddr3_ck_p;
wire [0:0] ddr3_ck_n;
wire [0:0] ddr3_cke;
wire [0:0] ddr3_cs_n;
wire [1:0] ddr3_dm;
wire [0:0] ddr3_odt;
12、 初始化時鐘復位生成時鐘
initial
begin
sclk = 0;
rst_n <= 0;
#200
rst_n <= 1;
endalways #10 sclk = ~sclk;
13、 在vivado工程中新增ddr3**模型和ddr3**模型的初始化引數檔案。
14、 啟動**觀察init_calib_complete訊號是否拉高(0.11ms左右),如果拉高說明初始化成功。
Vivado定製DDR3 IP核注意事項
1 本節目錄 2 本節引言 3 fpga簡介 4 vivado定製ddr3 ip核注意事項 5 結束語。不積跬步,無以至千里 不積小流,無以成江海。就是說 不積累一步半步的行程,就沒有辦法達到千里之遠 不積累細小的流水,就沒有辦法匯成江河大海。fpga field programmable gate...
DDR掃盲 DDR與DDR2 DDR3的區別
from ddr2與ddr的區別 1 速率與預取量 ddr2的實際工作頻率是ddr的兩倍,ddr2記憶體擁有兩倍於標準ddr記憶體的4bit預期能力。2 封裝與電壓 ddr封裝為tsopii,ddr2封裝為fbga ddr的標準電壓為2.5v,ddr2的標準電壓為1.8v。3 bit pre fet...
DDR3與DDR4的區別
1 ddr4的ras cas we與a16 a15 a4復用埠,通過actn區分 2 ddr3的io電壓1.5v,ddr4的io電壓1.2v 3 ddr3只有3個mr暫存器,ddr4有6個mr 暫存器,4 ddr3不可讀顆粒資訊,ddr4可讀出mr的基本資訊 5 ddr3的讀訓練mpr只有一種pat...