找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 5614|回复: 4
打印 上一主题 下一主题
收起左侧

FPGA控制DDR2 Verilog HDL程序代码

[复制链接]
跳转到指定楼层
楼主
FPGA控制DDR2程序代码   读写数据


源程序如下:
  1. //---------------------------------------------------------------------------
  2. //--        文件名                :        Project_Ddr2.v
  3. //--        作者                :        ZIRCON
  4. //--        描述                :        DDR2读写测试模块
  5. //--        修订历史        :        2017-01-01
  6. //---------------------------------------------------------------------------
  7. `include "Ddr2_Param.v"

  8. module Project_Ddr2
  9. (
  10.         /* 时钟和复位信号 */
  11.         CLK_50M,RST_N,
  12.         /* DDR2接口 */
  13.         DDR2_ODT,DDR2_CS_N,DDR2_RAS_N,DDR2_CKE,DDR2_ADDR,DDR2_CLK,
  14.         DDR2_BA,DDR2_CAS_N,DDR2_WE_N,DDR2_CLK_N,
  15.         DDR2_DM,DDR2_DQ,DDR2_DQS
  16. );

  17. //---------------------------------------------------------------------------
  18. //--        外部端口声明
  19. //---------------------------------------------------------------------------
  20. input                                                                                        CLK_50M;                                //时钟信号
  21. input                                                                                        RST_N;                                //复位信号
  22. output                                                                                  DDR2_ODT;                        //DDR2片上终结信号
  23. output                                                                                  DDR2_CS_N;                        //DDR2片选信号
  24. output                                                                                  DDR2_CKE;                        //DDR2时钟使能信号
  25. output        [        `MEM_ADDRWIDTH-1:0]                DDR2_ADDR;                        //DDR2地址总线
  26. output        [          `MEM_BAWIDTH-1:0]                DDR2_BA;                                //DDR2BANK信号
  27. output                                                                                DDR2_RAS_N;                        //DDR2行地址选择信号
  28. output                                                                                DDR2_CAS_N;                        //DDR2列地址选择信号
  29. output                                                                                DDR2_WE_N;                        //DDR2写使能信号
  30. output        [          `MEM_DMWIDTH-1:0]                DDR2_DM;                                //DDR2数据掩膜信号
  31. inout                                                                                         DDR2_CLK;                        //DDR2时钟信号
  32. inout                                                                                          DDR2_CLK_N;                        //DDR2时钟反相信号
  33. inout                [          `MEM_DQWIDTH-1:0]                DDR2_DQ;                                //DDR2数据总线
  34. inout                [         `MEM_DQSWIDTH-1:0]                DDR2_DQS;                        //DDR2数据源同步信号

  35. //---------------------------------------------------------------------------
  36. //--        内部端口声明
  37. //---------------------------------------------------------------------------
  38. wire                                                                                        CLK_100M;                        //时钟信号
  39. wire                                                                                        RST_B;                                //复位信号
  40. wire                                                                                        CLK_25M;                                //25MHz写时钟
  41. wire                                                                                        CLK_30M;                                //30MHz读时钟
  42. wire                                                                                        user_init_done;        //初始化完成信号
  43. wire                                                                                        user_phyclk;                //DDR2 IP核输出时钟,166.7MHz
  44. wire                                                                                        user_phyrst_n;                //DDR2 IP核同步后的复位信号
  45. wire                                                                                        user_wren;                        //写使能信号
  46. wire                                                                                        user_wrreq;                        //写FIFO请求信号
  47. wire                                                        [12:0]                user_wrdata;                //写数据总线
  48. wire                                                                                        user_wrfull;                //写FIFO满标志
  49. wire                                                                                        user_wrdone;                //写完成标志,只有一拍
  50. wire                                                                                        user_rden;                        //读使能信号
  51. wire                                                                                        user_rdreq;                        //读FIFO请求信号
  52. wire                                                        [15:0]                user_rddata;                //读数据总线
  53. wire                                                                                        user_rdempty;                //读FIFO空信号
  54. wire                                                                                        user_rddone;                //读完成标志,只有一拍

  55. //---------------------------------------------------------------------------
  56. //--        逻辑功能实现
  57. //---------------------------------------------------------------------------
  58. /* PLL IP核控制模块 */
  59. Pll_Control                                                Pll_Control_Init
  60. (
  61.         .CLK_50M                                         (CLK_50M                                        ),                //时钟输入端口
  62.         .RST_N                                                (RST_N                                        ),                //复位输入端口
  63.         .CLK_100M                                     (CLK_100M                                ),                //100M时钟输出
  64.         .CLK_25M                                                (CLK_25M                                        ),                //25M时钟输出
  65.         .CLK_30M                                                (CLK_30M                                        ),                //30M时钟输出
  66.         .RST_B                                                (RST_B                                        )                //复位输出端口
  67. );

  68. /* 封装了Ddr2 Ip核和Fifo Ip核的DDR2控制器模块 */
  69. Fifo_Ddr2_Fifo fifo_ddr2_fifo_inst
  70. (
  71.         /* 时钟和复位信号 */
  72.         .CLK_DDR2                                        (CLK_100M                                ),                //时钟信号
  73.         .RST_N                                                (RST_B                                        ),                //复位信号
  74.         /* DDR2存储器接口 */
  75.         .mem_odt                                                (DDR2_ODT                                ),                //DDR2片上终结信号
  76.         .mem_cs_n                                        (DDR2_CS_N                                ),                //DDR2片选信号
  77.         .mem_cke                                                (DDR2_CKE                                ),                //DDR2时钟使能信号
  78.         .mem_addr                                        (DDR2_ADDR                                ),                //DDR2地址总线
  79.         .mem_ba                                                (DDR2_BA                                        ),                //DDR2BANK信号
  80.         .mem_ras_n                                        (DDR2_RAS_N                                ),                //DDR2行地址选择信号
  81.         .mem_cas_n                                        (DDR2_CAS_N                                ),                //DDR2列地址选择信号
  82.         .mem_we_n                                        (DDR2_WE_N                                ),                //DDR2写使能信号
  83.         .mem_dm                                                (DDR2_DM                                        ),                //DDR2数据掩膜信号
  84.         .mem_clk                                                (DDR2_CLK                                ),                //DDR2时钟信号
  85.         .mem_clk_n                                        (DDR2_CLK_N                                ),                //DDR2时钟反相信号
  86.         .mem_dq                                                (DDR2_DQ                                        ),                //DDR2数据总线
  87.         .mem_dqs                                                (DDR2_DQS                                ),                //DDR2数据源同步信号
  88.         /* DDR2用户接口 */
  89.         .user_init_done                        (user_init_done                ),                //初始化完成信号
  90.         .user_phyclk                                (user_phyclk                        ),                //DDR2 IP核输出时钟,166.7MHz
  91.         .user_phyrst_n                                (user_phyrst_n                        ),                //DDR2 IP核同步后的复位信号
  92.         .user_wrclk                                        (CLK_25M                                        ),                //写数据进FIFO工作时钟
  93.         .user_rdclk                                        (CLK_30M                                        ),                //从FIFO读数据工作时钟
  94.         .user_wrdone                                (user_wrdone                        ),                //写完成标志,只有一拍
  95.         .user_rddone                                (user_rddone                        ),    //读完成标志,只有一拍
  96.         .user_wren                                        (user_wren                                ),                //写使能信号
  97.         .user_rden                                        (user_rden                                ),                //读使能信号
  98.         .user_wrfreq                                (user_wrreq                                ),                //写FIFO请求信号
  99.         .user_wrffull                                (user_wrfull                        ),    //写FIFO满标志
  100.         .user_wrfusedw                                (),                                                                //写FIFO中的数据个数
  101.         .user_rdfreq                                (user_rdreq                                ),                //读FIFO请求信号
  102.         .user_rdfempty                                (user_rdempty                        ),                //读FIFO空信号
  103.         .user_rdfusedw                                (),                        //读FIFO中的数据个数
  104.         .user_wrdata                                (user_wrdata                        ),                //写数据总线
  105.         .user_rddata                                (user_rddata                        ),                //读数据总线
  106.         .user_wrlen                                        (10'd256                                        ),                //写突发长度
  107.         .user_rdlen                                        (10'd256                                        ),                //读突发长度
  108.         .user_wrheadaddr                        (25'h0                                        ),                //写操作首地址
  109.         .user_wrendaddr                        (25'd25                                        ),                //写操作尾地址
  110.         .user_rdheadaddr                        (25'h0                                        ),                //读操作首地址
  111.         .user_rdendaddr                        (25'd25                                        ),                //读操作尾地址
  112.         .user_pingpongen                        (25'd0                                        )                //乒乓操作使能信号
  113. );

  114. Ddr2_Control                                        Ddr2_Control_Init
  115. (
  116.         .CLK_25M                                                (CLK_25M                                        ),                //时钟端口
  117.         .CLK_30M                                                (CLK_30M                                        ),                //时钟端口
  118.         .RST_B                                                (RST_B                                        ),                //复位端口
  119.         .user_phyclk                                (user_phyclk                        ),                //DDR2 IP核输出时钟,166.7MHz
  120.         .user_phyrst_n                                (user_phyrst_n                        ),                //DDR2 IP核同步后的复位信号
  121.         .user_wren                                        (user_wren                                ),                //写使能信号
  122.         .user_wrreq                                        (user_wrreq                                ),                //写FIFO请求信号
  123.         .user_wrdata                                (user_wrdata                        ),                //写数据总线
  124.         .user_wrfull                                (user_wrfull                        ),                //写FIFO满标志
  125.         .user_wrdone                                (user_wrdone                        ),                //写完成标志,只有一拍
  126.         .user_rden                                        (user_rden                                ),                //读使能信号               
  127.         .user_rdreq                                        (user_rdreq                                ),                //读FIFO请求信号
  128.         .user_rddata                                (user_rddata                        ),                //读数据总线
  129.         .user_rdempty                                (user_rdempty                        ),                //读FIFO空标志
  130.         .user_rddone                                (user_rddone                        ),                //读完成标志
  131.         .rddata_cnt                                        (rddata_cnt                                )                //读数据计数
  132. );

  133. endmodule
复制代码

所有资料51hei提供下载:
Project_Ddr2.zip (52.11 KB, 下载次数: 55)


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:223257 发表于 2018-9-12 16:32 | 只看该作者

赞一个
回复

使用道具 举报

板凳
ID:92829 发表于 2018-9-21 06:02 | 只看该作者
赞一个!!赞一个
回复

使用道具 举报

地板
ID:499649 发表于 2019-3-28 10:01 | 只看该作者
谢谢!!!!
回复

使用道具 举报

5#
ID:670755 发表于 2019-12-22 22:12 | 只看该作者
赞一个!!!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表