[资料分享] 分享控制DDR2 Verilog HDL程序代码

fish001   2018-11-10 20:13 楼主
源程序如下:
//---------------------------------------------------------------------------
//--        文件名                :        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

回复评论

暂无评论,赶紧抢沙发吧
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复