赞
踩
在 Xilinx 的vivado软件配置好 DDR3的控制器后,官方会提供一个相应的设计样板(这个样板的目的是,比较DDR3的写入和输出数据是否一致,一致则输出标识。)。这个样板包括设计代码和验证代码,可以通过添加这个样板到自己的设计模块,实现自己需要的功能。
example_top 是官方提供的设计模块,这个模块的目的是比较写入DDR3的数据和读出DDR3的数据,如果不一样,则输出信号 tg_compare_error 为高。输出信号 init_calib_complete 为DDR3初始化完成的标志,它为高,则代表DDR3初始化完成。这两个信号通过开发板的 led 来显示。
图中还有一个 PLL 模块,这是为了产生 DDR3控制器所需要的 时钟和复位信号。
FPGA的外部是 50M的时钟,经过 PLL后,输出 200M的时钟给 DDR3控制器模块使用。
PLL的输出信号 locked 信号用作 DDR3控制器的复位信号。
于是 DDR3控制器先有稳定的时钟信号,然后再把复位取消,这样便可以开始工作。
1、配置DDR3控制器、2、打开官方DDR3设计模板,3、生成PLL时钟管理单元
4、添加自己的设计模块ddr_test,并且把 ddr_test 设置为顶层模块(“set as top”)
5、综合后,进行引脚配置
6、下载到板子,发现 led[1] 是一直暗的,表示 DDR3控制器的写入和读出的数据一致。
led[0]是亮的,表示DDR3的初始化完成。
创建一个我自己设计的顶层模块,ddr_test,它里面例化了两个模块,一个是官方的设计样板(example_top),另外一个是 PLL时钟管理单元。
module ddr_test( inout [15:0] ddr3_dq, inout [1:0] ddr3_dqs_n, inout [1:0] ddr3_dqs_p, output [13:0] ddr3_addr, output [2:0] ddr3_ba, output ddr3_ras_n, output ddr3_cas_n, output ddr3_we_n, output ddr3_reset_n, output [0:0] ddr3_ck_p, output [0:0] ddr3_ck_n, output [0:0] ddr3_cke, output [0:0] ddr3_cs_n, output [1:0] ddr3_dm, output [0:0] ddr3_odt, input clk50m, input reset_n, output [1:0] led ); //ddr_test 的端口声明剔除了 example_top 模块的 两个输入端口(sys_clk_i、sys_rst) 因为这两个输入端口由 PLL模块的输出提供,所以它们不是 ddr_test 的端口。剔除了 example_top 的两个输出端口(tg_compare_error,init_calib_complete)因为这两个端口用 led 这个端口代替了。其他的example_top 端口都保留。 此外,还加了两个PLL的输入端口 clk50m,reset_n 和输出端口 led wire pll_locked; wire sys_clk_i; // 把PLL的输出时钟sys_clk_i(200M)用作 example_top模块的输入时钟sys_clk_i // 把PLL的输出时钟pll_locked信号用作 example_top模块的输入复位sys_rst clk_wiz_0 instance_name ( .clk_out1(sys_clk_i), .resetn(reset_n), .locked(pll_locked), .clk_in1(clk50m) ); //将 tg_compare_error init_calib_complete 这两个信号用来显示led assign led = {tg_compare_error,init_calib_complete}; //tg_compare_error为1,表示DDR3的写入和读出的数据不一样。 //init_calib_complete 为1,表示DDR3的初始化完成。 example_top example_top ( .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), .sys_clk_i (sys_clk_i), .tg_compare_error (tg_compare_error), .init_calib_complete(init_calib_complete), .sys_rst(pll_locked) ); endmodule
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。