当前位置:   article > 正文

Xilinx-- 7系列--DDR3(1)_xilinx a735t ddr3 pll

xilinx a735t ddr3 pll

1调取IP核:使用软件:vivado2018.2
首先在IP Catalog中搜MIG,调出DDR IP核
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
50M是时钟是外部输入PLL模块的时钟;
200M:是由PLL分出来的上面一路是通过IP核内部的PLL给DDR3芯片产生的差分时钟
下面的一路200M,实质是参考时钟,因为IP核配置时输入的时钟为200M,而参考时钟(199~201M)可以直接选用如初IP的时钟200M,然后通过IP核内部的PLL产生两个成比例的时钟4:1(或2:1)快的400M用来作为芯片写datapath的时钟,慢的100M用来输出,作为用户时钟(ui_clk),可以用来往IP核写入数据。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
2.自建仿真
(1)将IP核例化到ddr_drive

module ddr3_drive(
		//system signals
		input					sys_clk_p			,
		input					sys_clk_n       	,
		input 					s_rst_n         	,
		//DDR3 Interference                         
		output 	wire[14:0]		ddr3_addr			,
		output 	wire[2:0]		ddr3_ba             ,
		output	wire			ddr3_cas_n          ,
		output	wire [0:0]		ddr3_ck_n           ,
		output	wire [0:0]		ddr3_ck_p           ,
		output	wire [0:0]		ddr3_cke            ,
		output	wire			ddr3_ras_n          ,
		output	wire			ddr3_reset_n        ,
		output	wire			ddr3_we_n           ,
		inout 	wire[31:0]		ddr3_dq             ,
		inout 	wire[3:0]		ddr3_dqs_n          ,
        inout 	wire[3:0]		ddr3_dqs_p          ,
												
		output 	wire[0:0]		ddr3_cs_n           ,
		output 	wire[3:0]		ddr3_dm             ,
		output 	wire[0:0]		ddr3_odt            

);     
//=====================================================================
//============Define parameter and Interference signal======
//=====================================================================
wire		init_calib_complete;
	
	
mig_7series_0 u_mig_7series_0 (

    // Memory interface ports
    .ddr3_addr                      (ddr3_addr),  			// output [14:0]		ddr3_addr
    .ddr3_ba                        (ddr3_ba),  			// output [2:0]		ddr3_ba
    .ddr3_cas_n                     (ddr3_cas_n),   		// output			ddr3_cas_n
    .ddr3_ck_n                      (ddr3_ck_n),  			// output [0:0]		ddr3_ck_n
    .ddr3_ck_p                      (ddr3_ck_p),  			// output [0:0]		ddr3_ck_p
    .ddr3_cke                       (ddr3_cke),  			// output [0:0]		ddr3_cke
    .ddr3_ras_n                     (ddr3_ras_n),  			// output			ddr3_ras_n
    .ddr3_reset_n                   (ddr3_reset_n), 		// output			ddr3_reset_n
    .ddr3_we_n                      (ddr3_we_n),    		// output			ddr3_we_n
    .ddr3_dq                        (ddr3_dq),  			// inout [31:0]		ddr3_dq
    .ddr3_dqs_n                     (ddr3_dqs_n),  			// inout [3:0]		ddr3_dqs_n
    .ddr3_dqs_p                     (ddr3_dqs_p),   		// inout [3:0]		ddr3_dqs_p
    .init_calib_complete            (init_calib_complete),  // output			init_calib_complete
			
	.ddr3_cs_n                      (ddr3_cs_n), 			// output [0:0]		ddr3_cs_n
    .ddr3_dm                        (ddr3_dm), 				// output [3:0]		ddr3_dm
    .ddr3_odt                       (ddr3_odt),  			// output [0:0]		ddr3_odt
    // Application interface ports
    .app_addr                       (app_addr),  			// input [28:0]		app_addr
    .app_cmd                        (app_cmd),  			// input [2:0]		app_cmd
    .app_en                         (app_en),  				// input			app_en
    .app_wdf_data                   (app_wdf_data), 		// input [255:0]	app_wdf_data
    .app_wdf_end                    (app_wdf_end),  		// input			app_wdf_end
    .app_wdf_wren                   (app_wdf_wren), 		// input			app_wdf_wren
    .app_rd_data                    (app_rd_data),  		// output [255:0]	app_rd_data
    .app_rd_data_end                (app_rd_data_end),  	// output			app_rd_data_end
    .app_rd_data_valid              (app_rd_data_valid),  	// output			app_rd_data_valid
    .app_rdy                        (app_rdy),  			// output			app_rdy
    .app_wdf_rdy                    (app_wdf_rdy), 			// output			app_wdf_rdy
    .app_sr_req                     (app_sr_req),  			// input			app_sr_req
    .app_ref_req                    (app_ref_req),  		// input			app_ref_req
    .app_zq_req                     (app_zq_req),  			// input			app_zq_req
    .app_sr_active                  (app_sr_active), 		// output			app_sr_active
    .app_ref_ack                    (app_ref_ack),  		// output			app_ref_ack
    .app_zq_ack                     (app_zq_ack),  			// output			app_zq_ack
    .ui_clk                         (ui_clk),  				// output			ui_clk
    .ui_clk_sync_rst                (ui_clk_sync_rst), 	    // output			ui_clk_sync_rst
    .app_wdf_mask                   (app_wdf_mask),  		// input [31:0]		app_wdf_mask
    // System Clock Ports
    .sys_clk_p                      (sys_clk_p), 			// input			sys_clk_p
    .sys_clk_n                      (sys_clk_n), 			// input			sys_clk_n
    .sys_rst                        (s_rst_n) 				// input sys_rst
    );
endmodule
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77

(2)用ip和提供的仿真模板,建立tb文件
在这里插入图片描述

 tb_ddr3_drive();
parameter      CLKIN_PERIOD = 5000;
localparam      RESET_PERIOD = 200000; //in pSec
parameter      CS_WIDTH     = 1;  
parameter      DQ_WIDTH     = 32;
localparam      MEMORY_WIDTH = 16;
localparam      NUM_COMP     = DQ_WIDTH/MEMORY_WIDTH;
parameter      DM_WIDTH     = 4;
parameter      DQS_WIDTH    = 4;


reg             sys_clk_i;
wire            sys_clk_p;
wire            sys_clk_n;
reg             s_rst_n;



initial begin
    s_rst_n <= 1'b0;
    #RESET_PERIOD
    s_rst_n <= 1'b1;
end
   
initial
  sys_clk_i = 1'b0;
always
  sys_clk_i = #(CLKIN_PERIOD/2.0) ~sys_clk_i;
  
assign          sys_clk_p = sys_clk_i;
assign          sys_clk_n = ~sys_clk_i;

//--------------------------------------------------
wire [1-1:0]                 ddr3_ck_p_sdram;
wire [1-1:0]                 ddr3_ck_n_sdram;
wire [1-1:0]                 ddr3_cke_sdram;
wire [(CS_WIDTH*1)-1:0]      ddr3_cs_n_sdram;
wire                         ddr3_ras_n_sdram;
wire                         ddr3_cas_n_sdram;
wire                         ddr3_we_n_sdram;
wire [DM_WIDTH-1:0]          ddr3_dm_sdram;
wire [3-1:0]                 ddr3_ba_sdram;
wire [15-1:0]                ddr3_addr_sdram;
wire [DQ_WIDTH-1:0]          ddr3_dq_sdram;
wire [4-1:0]                 ddr3_dqs_p_sdram;
wire [4-1:0]                 ddr3_dqs_n_sdram;
wire [2-1:0]                 ddr3_odt_sdram;
wire                         ddr3_reset_n;




ddr3_drive  ddr3_drive(
           //system signals
           .sys_clk_p           (sys_clk_p        ),
           .sys_clk_n           (sys_clk_n        ),
           . s_rst_n            ( s_rst_n         ),
           //DDR3 Interference                         
           .ddr3_addr          (ddr3_addr_sdram   ),
           .ddr3_ba            (ddr3_ba_sdram     ),
           .ddr3_cas_n         (ddr3_cas_n_sdram  ),
           .ddr3_ck_n          (ddr3_ck_n_sdram   ),
           .ddr3_ck_p          (ddr3_ck_p_sdram   ),
           .ddr3_cke           (ddr3_cke_sdram    ),
           .ddr3_ras_n         (ddr3_ras_n_sdram  ),
           .ddr3_reset_n       (ddr3_reset_n),
           .ddr3_we_n          (ddr3_we_n_sdram   ),
           .ddr3_dq            (ddr3_dq_sdram     ),
           .ddr3_dqs_n         (ddr3_dqs_n_sdram  ),
           .ddr3_dqs_p         (ddr3_dqs_p_sdram  ),
                       
           .ddr3_cs_n          (ddr3_cs_n_sdram   ),
           .ddr3_dm            (ddr3_dm_sdram     ),
           .ddr3_odt           (ddr3_odt_sdram    )
   );   

genvar i;
  generate
        for (i = 0; i < NUM_COMP; i = i + 1) begin: gen_mem
          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),
             .cs_n    (ddr3_cs_n_sdram),
             .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):(2*i)]),
             .ba      (ddr3_ba_sdram),
             .addr    (ddr3_addr_sdram),
             .dq      (ddr3_dq_sdram[16*(i+1)-1:16*(i)]),
             .dqs     (ddr3_dqs_p_sdram[(2*(i+1)-1):(2*i)]),
             .dqs_n   (ddr3_dqs_n_sdram[(2*(i+1)-1):(2*i)]),
             .tdqs_n  (),
             .odt     (ddr3_odt_sdram)
             );
        end
  endgenerate 
endmodule
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94
  • 95
  • 96
  • 97
  • 98
  • 99
  • 100
  • 101

将这两个仿真文件添加到工程中的仿真模块,然后仿真
在这里插入图片描述
仿真结果:
观察到init_calib_complete拉高,则初始化成功。
在这里插入图片描述

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/从前慢现在也慢/article/detail/615882
推荐阅读
相关标签
  

闽ICP备14008679号