FPGA控制DDR2程序代码 读写数据
源程序如下:
- //---------------------------------------------------------------------------
- //-- 文件名 : Project_Ddr2.v
- //-- 作者 : ZIRCON
- //-- 描述 : DDR2读写测试模块
- //-- 修订历史 : 2017-01-01
- //---------------------------------------------------------------------------
- `include "Ddr2_Param.v"
- module Project_Ddr2
- (
- /* 时钟和复位信号 */
- CLK_50M,RST_N,
- /* DDR2接口 */
- DDR2_ODT,DDR2_CS_N,DDR2_RAS_N,DDR2_CKE,DDR2_ADDR,DDR2_CLK,
- DDR2_BA,DDR2_CAS_N,DDR2_WE_N,DDR2_CLK_N,
- DDR2_DM,DDR2_DQ,DDR2_DQS
- );
- //---------------------------------------------------------------------------
- //-- 外部端口声明
- //---------------------------------------------------------------------------
- input CLK_50M; //时钟信号
- input RST_N; //复位信号
- output DDR2_ODT; //DDR2片上终结信号
- output DDR2_CS_N; //DDR2片选信号
- output DDR2_CKE; //DDR2时钟使能信号
- output [ `MEM_ADDRWIDTH-1:0] DDR2_ADDR; //DDR2地址总线
- output [ `MEM_BAWIDTH-1:0] DDR2_BA; //DDR2BANK信号
- output DDR2_RAS_N; //DDR2行地址选择信号
- output DDR2_CAS_N; //DDR2列地址选择信号
- output DDR2_WE_N; //DDR2写使能信号
- output [ `MEM_DMWIDTH-1:0] DDR2_DM; //DDR2数据掩膜信号
- inout DDR2_CLK; //DDR2时钟信号
- inout DDR2_CLK_N; //DDR2时钟反相信号
- inout [ `MEM_DQWIDTH-1:0] DDR2_DQ; //DDR2数据总线
- inout [ `MEM_DQSWIDTH-1:0] DDR2_DQS; //DDR2数据源同步信号
- //---------------------------------------------------------------------------
- //-- 内部端口声明
- //---------------------------------------------------------------------------
- wire CLK_100M; //时钟信号
- wire RST_B; //复位信号
- wire CLK_25M; //25MHz写时钟
- wire CLK_30M; //30MHz读时钟
- wire user_init_done; //初始化完成信号
- wire user_phyclk; //DDR2 IP核输出时钟,166.7MHz
- wire user_phyrst_n; //DDR2 IP核同步后的复位信号
- wire user_wren; //写使能信号
- wire user_wrreq; //写FIFO请求信号
- wire [12:0] user_wrdata; //写数据总线
- wire user_wrfull; //写FIFO满标志
- wire user_wrdone; //写完成标志,只有一拍
- wire user_rden; //读使能信号
- wire user_rdreq; //读FIFO请求信号
- wire [15:0] user_rddata; //读数据总线
- wire user_rdempty; //读FIFO空信号
- wire user_rddone; //读完成标志,只有一拍
- //---------------------------------------------------------------------------
- //-- 逻辑功能实现
- //---------------------------------------------------------------------------
- /* PLL IP核控制模块 */
- Pll_Control Pll_Control_Init
- (
- .CLK_50M (CLK_50M ), //时钟输入端口
- .RST_N (RST_N ), //复位输入端口
- .CLK_100M (CLK_100M ), //100M时钟输出
- .CLK_25M (CLK_25M ), //25M时钟输出
- .CLK_30M (CLK_30M ), //30M时钟输出
- .RST_B (RST_B ) //复位输出端口
- );
- /* 封装了Ddr2 Ip核和Fifo Ip核的DDR2控制器模块 */
- Fifo_Ddr2_Fifo fifo_ddr2_fifo_inst
- (
- /* 时钟和复位信号 */
- .CLK_DDR2 (CLK_100M ), //时钟信号
- .RST_N (RST_B ), //复位信号
- /* DDR2存储器接口 */
- .mem_odt (DDR2_ODT ), //DDR2片上终结信号
- .mem_cs_n (DDR2_CS_N ), //DDR2片选信号
- .mem_cke (DDR2_CKE ), //DDR2时钟使能信号
- .mem_addr (DDR2_ADDR ), //DDR2地址总线
- .mem_ba (DDR2_BA ), //DDR2BANK信号
- .mem_ras_n (DDR2_RAS_N ), //DDR2行地址选择信号
- .mem_cas_n (DDR2_CAS_N ), //DDR2列地址选择信号
- .mem_we_n (DDR2_WE_N ), //DDR2写使能信号
- .mem_dm (DDR2_DM ), //DDR2数据掩膜信号
- .mem_clk (DDR2_CLK ), //DDR2时钟信号
- .mem_clk_n (DDR2_CLK_N ), //DDR2时钟反相信号
- .mem_dq (DDR2_DQ ), //DDR2数据总线
- .mem_dqs (DDR2_DQS ), //DDR2数据源同步信号
- /* DDR2用户接口 */
- .user_init_done (user_init_done ), //初始化完成信号
- .user_phyclk (user_phyclk ), //DDR2 IP核输出时钟,166.7MHz
- .user_phyrst_n (user_phyrst_n ), //DDR2 IP核同步后的复位信号
- .user_wrclk (CLK_25M ), //写数据进FIFO工作时钟
- .user_rdclk (CLK_30M ), //从FIFO读数据工作时钟
- .user_wrdone (user_wrdone ), //写完成标志,只有一拍
- .user_rddone (user_rddone ), //读完成标志,只有一拍
- .user_wren (user_wren ), //写使能信号
- .user_rden (user_rden ), //读使能信号
- .user_wrfreq (user_wrreq ), //写FIFO请求信号
- .user_wrffull (user_wrfull ), //写FIFO满标志
- .user_wrfusedw (), //写FIFO中的数据个数
- .user_rdfreq (user_rdreq ), //读FIFO请求信号
- .user_rdfempty (user_rdempty ), //读FIFO空信号
- .user_rdfusedw (), //读FIFO中的数据个数
- .user_wrdata (user_wrdata ), //写数据总线
- .user_rddata (user_rddata ), //读数据总线
- .user_wrlen (10'd256 ), //写突发长度
- .user_rdlen (10'd256 ), //读突发长度
- .user_wrheadaddr (25'h0 ), //写操作首地址
- .user_wrendaddr (25'd25 ), //写操作尾地址
- .user_rdheadaddr (25'h0 ), //读操作首地址
- .user_rdendaddr (25'd25 ), //读操作尾地址
- .user_pingpongen (25'd0 ) //乒乓操作使能信号
- );
- Ddr2_Control Ddr2_Control_Init
- (
- .CLK_25M (CLK_25M ), //时钟端口
- .CLK_30M (CLK_30M ), //时钟端口
- .RST_B (RST_B ), //复位端口
- .user_phyclk (user_phyclk ), //DDR2 IP核输出时钟,166.7MHz
- .user_phyrst_n (user_phyrst_n ), //DDR2 IP核同步后的复位信号
- .user_wren (user_wren ), //写使能信号
- .user_wrreq (user_wrreq ), //写FIFO请求信号
- .user_wrdata (user_wrdata ), //写数据总线
- .user_wrfull (user_wrfull ), //写FIFO满标志
- .user_wrdone (user_wrdone ), //写完成标志,只有一拍
- .user_rden (user_rden ), //读使能信号
- .user_rdreq (user_rdreq ), //读FIFO请求信号
- .user_rddata (user_rddata ), //读数据总线
- .user_rdempty (user_rdempty ), //读FIFO空标志
- .user_rddone (user_rddone ), //读完成标志
- .rddata_cnt (rddata_cnt ) //读数据计数
- );
- endmodule
复制代码
所有资料51hei提供下载:
Project_Ddr2.zip
(52.11 KB, 下载次数: 55)
|