当前位置:   article > 正文

FPGA-DDR3在电路板上全地址读写测试_ddr3读写测试

ddr3读写测试

        前面学习了使用Xilinx自带的DDR3示例工程进行DDR3读写测试,利用这个工程又按照应用层和接口层进行了拆分,相对于之前的示例工程来说,有一些难度,经过仿真调试后,实现了读写测试。后面找到一块电路板,上面有一片FPGA芯片和2片DDR3,准备对DDR3进行全地址测试。
        本文就对如何实现电路板上DDR3测试进行讲解,电路板资源可以根据自己手上的资源进行FPGA型号,DDR3型号进行调整,DDR3管脚信号等根据自己手上资源进行匹配。
        在此感谢我的朋友们对我的指点和帮助。因作者水平有限,工程中和文档中难免会有疏漏之处,欢迎读者批评指正。

目录

1:使用器件

2:开发环境

3:工程创建

4:功能实现

5:结束语        


1:使用器件

        a):FPGA器件型号:xc7z100ffg900-2;

        b):DDR3器件型号:MT41K512M16XX-125 (2片);

2:开发环境

        a):开发环境:Vivado 2018.2

        b):开发语言:Verilog

3:工程创建

         a):工程文件结构图:

        b):创建一个新的工程,添加下图所示IP核:

         clk_wiz_0:产生时钟,输入25MHz时钟,输出200MHz时钟;

                ila_0:通过仿真器抓取观察信号;

                   vio:下发启动测试信号;

        mig_7series_pl:DDR3IP核(创建方式按照上一期文章中示例);

        c):在工程中添加文件,如下图所示:

4:功能实现

        a):首先在TOP模块中写入对应输入输出端口,这部分内容按照硬件原理图上定义的管脚信息编写,一一对应;

  1. module TOP(
  2. input CLK_25MHZ_FPGA_PL_REF2,
  3. //---------------------------DDR3-----------------------------------------------------
  4. inout [ 31 : 0 ] FPGA_PL_C0_DDR3_D,
  5. inout [ 3 : 0 ] FPGA_PL_C0_DDR3_DQS_P,
  6. inout [ 3 : 0 ] FPGA_PL_C0_DDR3_DQS_N,
  7. output [ 15 : 0 ] FPGA_PL_C0_DDR3_A,
  8. output [ 2 : 0 ] FPGA_PL_C0_DDR3_BA,
  9. output FPGA_PL_C0_DDR3_RASZ,
  10. output FPGA_PL_C0_DDR3_CASZ,
  11. output FPGA_PL_C0_DDR3_WEZ,
  12. output FPGA_PL_C0_DDR3_RESETZ,
  13. output FPGA_PL_C0_DDR3_CLK_P,
  14. output FPGA_PL_C0_DDR3_CLK_N,
  15. output FPGA_PL_C0_DDR3_CKE,
  16. output FPGA_PL_C0_DDR3_CSZ,
  17. output [ 3 : 0 ] FPGA_PL_C0_DDR3_DQM,
  18. output FPGA_PL_C0_DDR3_ODT
  19. );

        这些接口对应到ddr3_module模块中DDR3-IP核的Memory interface ports部分,如下所示:

  1. ddr3_module # (
  2. .ADDR_WIDTH ( 30 ),
  3. .APP_DATA_WIDTH ( 256 )
  4. ) u_ddr3_module(
  5. .sys_clk_i ( sys_clk ),
  6. .sys_rst_i ( sys_rst ),
  7. .ddr3_addr ( FPGA_PL_C0_DDR3_A ),
  8. .ddr3_ba ( FPGA_PL_C0_DDR3_BA ),
  9. .ddr3_cas_n ( FPGA_PL_C0_DDR3_CASZ ),
  10. .ddr3_ck_n ( FPGA_PL_C0_DDR3_CLK_N ),
  11. .ddr3_ck_p ( FPGA_PL_C0_DDR3_CLK_P ),
  12. .ddr3_cke ( FPGA_PL_C0_DDR3_CKE ),
  13. .ddr3_ras_n ( FPGA_PL_C0_DDR3_RASZ ),
  14. .ddr3_reset_n ( FPGA_PL_C0_DDR3_RESETZ ),
  15. .ddr3_we_n ( FPGA_PL_C0_DDR3_WEZ ),
  16. .ddr3_dq ( FPGA_PL_C0_DDR3_D ),
  17. .ddr3_dqs_n ( FPGA_PL_C0_DDR3_DQS_N ),
  18. .ddr3_dqs_p ( FPGA_PL_C0_DDR3_DQS_P ),
  19. .init_calib_complete ( init_calib_complete ),
  20. .ddr3_cs_n ( FPGA_PL_C0_DDR3_CSZ ),
  21. .ddr3_dm ( FPGA_PL_C0_DDR3_DQM ),
  22. .ddr3_odt ( FPGA_PL_C0_DDR3_ODT )
  23. );

        b):在ddr3_module模块中分为2个部分,一部分是连接DDR3-IP核Memory interface ports,一部分是连接Application interface ports部分。IP核的定义部分可以查看IP核生成文件中veo文件,如图所示:

  1. mig_7series_pl u_mig_7series_pl (
  2. // Memory interface ports
  3. .ddr3_addr (ddr3_addr), // output [15:0] ddr3_addr
  4. .ddr3_ba (ddr3_ba), // output [2:0] ddr3_ba
  5. .ddr3_cas_n (ddr3_cas_n), // output ddr3_cas_n
  6. .ddr3_ck_n (ddr3_ck_n), // output [0:0] ddr3_ck_n
  7. .ddr3_ck_p (ddr3_ck_p), // output [0:0] ddr3_ck_p
  8. .ddr3_cke (ddr3_cke), // output [0:0] ddr3_cke
  9. .ddr3_ras_n (ddr3_ras_n), // output ddr3_ras_n
  10. .ddr3_reset_n (ddr3_reset_n), // output ddr3_reset_n
  11. .ddr3_we_n (ddr3_we_n), // output ddr3_we_n
  12. .ddr3_dq (ddr3_dq), // inout [31:0] ddr3_dq
  13. .ddr3_dqs_n (ddr3_dqs_n), // inout [3:0] ddr3_dqs_n
  14. .ddr3_dqs_p (ddr3_dqs_p), // inout [3:0] ddr3_dqs_p
  15. .init_calib_complete (init_calib_complete), // output init_calib_complete
  16. .ddr3_cs_n (ddr3_cs_n), // output [0:0] ddr3_cs_n
  17. .ddr3_dm (ddr3_dm), // output [3:0] ddr3_dm
  18. .ddr3_odt (ddr3_odt), // output [0:0] ddr3_odt
  19. // Application interface ports
  20. .app_addr (app_addr), // input [29:0] app_addr
  21. .app_cmd (app_cmd), // input [2:0] app_cmd
  22. .app_en (app_en), // input app_en
  23. .app_wdf_data (app_wdf_data), // input [255:0] app_wdf_data
  24. .app_wdf_end (app_wdf_end), // input app_wdf_end
  25. .app_wdf_wren (app_wdf_wren), // input app_wdf_wren
  26. .app_rd_data (app_rd_data), // output [255:0] app_rd_data
  27. .app_rd_data_end (app_rd_data_end), // output app_rd_data_end
  28. .app_rd_data_valid (app_rd_data_valid), // output app_rd_data_valid
  29. .app_rdy (app_rdy), // output app_rdy
  30. .app_wdf_rdy (app_wdf_rdy), // output app_wdf_rdy
  31. .app_sr_req (app_sr_req), // input app_sr_req
  32. .app_ref_req (app_ref_req), // input app_ref_req
  33. .app_zq_req (app_zq_req), // input app_zq_req
  34. .app_sr_active (app_sr_active), // output app_sr_active
  35. .app_ref_ack (app_ref_ack), // output app_ref_ack
  36. .app_zq_ack (app_zq_ack), // output app_zq_ack
  37. .ui_clk (ui_clk), // output ui_clk
  38. .ui_clk_sync_rst (ui_clk_sync_rst), // output ui_clk_sync_rst
  39. .app_wdf_mask (app_wdf_mask), // input [31:0] app_wdf_mask
  40. // System Clock Ports
  41. .sys_clk_i (sys_clk_i),
  42. .sys_rst (sys_rst) // input sys_rst
  43. );

         c):Memory interface ports部分向上层连接TOP层的信号,Application interface ports连接应用层,就是我们自己实现数据读写功能,数据读写功能和上一篇文章中实现的读写功能相似,在ddr3_control模块中及包含的ddr3_interface_control、ddr3_app_control两个模块中都是实现应用层功能,下发启动测试命令后进行读写,写入数据会读出进行数据校验,如出现错误会记录错误,可以监测测试完成后的错误计数。

        d):在ddr3_interface_control模块中添加了一个ila监测模块和一个命令下发模块vio,配置如下:

        vio:只设置一个输出信号;

         ila:设置2个监测端口,深度为8192;

        这里probeo0设置为trigger模式(触发器),probeo1设置为data模式(监测数据)。

        e):在ddr3_interface_control模块中vio和ila实例模块中添加需要监测的信号:

  1. vio_0 u_vio_0 (
  2. .clk ( i_sys_clk ), // input wire clk
  3. .probe_out0 ( test ) // output wire [0 : 0] probe_out0
  4. );
  5. ila_0 u_ila_0 (
  6. .clk ( i_sys_clk ), // input wire clk
  7. .probe0 ( {init_calib_complete,sync_rst,cp_erro, // input wire [1023:0] probe0
  8. frist_start,ddr3_wr_done,ddr3_rd_done,i_wr_rddata_en}),
  9. .probe1 ( {read_data,cp_erro_cnt,o_write_addr,i_read_data}) // input wire [511:0] probe1
  10. );

5:结束语        

       文章讲述的内容下载到硬件上测试,DDR3全地址测试正常,错误计数器为0。 实现流程到这里讲解结束,跨度可能比较大,主要是不想一步一步贴代码,后面附免费下载工程文件的接,可以下载结合本文进行查看。

工程文件下载链接:

https://download.csdn.net/download/ForeveryMissYou/21713494

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

闽ICP备14008679号