A7 DDR3的ip核建立與初始化

2021-10-03 22:44:14 字數 4422 閱讀 2322

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...