• Xilinx DDR4 MIG 的调试


    平台:Vivado2021.1

    芯片:xcku115-flva1517-2-i (active)

    语言:VerilogHDL

    参考文件:pg150.下载地址

    pg150-ultrascale-memory-ip.pdf • 查看器 • AMD 自适应计算文档门户 (xilinx.com)

    DDR4介绍

    DDR4,即第四代双倍数据率同步动态随机存储器SDRAM。前面我们学习过DDR3,DDR2。那么DDR4相比他们又提升在哪里呢?

    新建BD工程:此部分为搭建PCIE控制DDR4的工程。

    关于xilinx的DDR4的IP核,我们用户可以使用两种方式建立,第一种就是使用XILINX提供的标准的用户侧接口,也就是我们所熟悉的User interface。如下所示。

    还有一种就是直接使用AXI接口的DDR控制器,使用AXI模式下的DDR4接口,我们不需要熟悉复杂的DDR4协议。也不需要使用用户侧接口来自己搭建。在 XILINX提供的BD原理图中我们可以直接调用IP核,然后选择一键连接就可以将整个系统搭建完毕。

    如上图所示,我们使用一个标准的PCIE+DDR的存储模式。我们知道PCIE的XDMAIP核拥有三个接口,分别是AXI_MM,AXI_LITE,AXI_STREAM模式。其每一个接口也代表了不同的使用方法,比如我们AXI_MM接口,他拥有完整的AXI4协议。AXI协议包含读地址,读数据,写地址,写数据,写响应这几种。所以往往我们使用该接口来区分数据通道或者带有数据存储如BRAM,DDR等。而AXI_LITE就是AXI协议的基础版,对于PCIE来说我们一般用它来实现点到点的读写功能。而AXI_STREAM模式就是只包含数据流的AXI总线,由于该总线不含地址,所以速度上也是会快一点,我们往往用该总线传说不包含地址的数据流。例如FIFO等。

    上图中我们在AXI_MM分别连接了DDR4的IP核,与内部存储的BRAM。而AXI_LITE上可以忽略掉。

    本文章主要介绍DDR4IP核的配置和PCIE加DDR4的功能验证。

    关于PCIE的设置。

    这里选择GEN3*8模式,采用100mhz的参考时钟,使用AXI_MM接口,AXI数据位宽为256bit。

    关于地址分配。

    使用64位AXI地址。

    C000_0000上挂BRAM。

    8000_0000上挂DDR4。

    测试的过程也很简单通过DMA模式向DDR4IP上写入数据和读出数据。

    关于DDR4的IP核,在Ultra系列上DDR4的IP核与以往的DDR3DDR2的配置有一定的差异。

    关于我们使用的这款DDR4内存条,根据其数据手册,DDR4支持的最高频率为1200MHZ,使用上下边沿传输数据也就是2400MHZ。这里我们来简单算一算DDR4的速率,这里我们使用一片,即数据位宽为16bit。所以理论上的数据率为2400MHZ*16bit=4800MB/S。如果使用内存模组最高可以达到64bit的数据位宽, 这时理论上的数据率为2400mhz*64bit=19200MB/S。速度还是相当的给力的。这里还需要关注一个地方,我们选择接口速率为1.2GHZ的时候,这里的参考时钟我们看到可以选择的范围为200.08mhz,而我们实际使用的参考时钟是200mhz的,这里我们实际测试下来并不会影响数据收发。

    接下来四DDR4型号选择,这里要和你们原理图上的硬件型号相对应。关于数据位宽,如果原理图上设置的一组几片就选择多少。我们这里只使用了一片,就设置为16位。前面提到过64bit的数据位宽,按照这里就是使用了四片DDR,他们级联起来就是64bit的数据位宽。后面的突发位宽这里可以保持默认。

    AXI选项页

    AXI数据位宽支持选择。我们选择32位。

    时钟配置界面

    可以看到你的参考时钟和你第一页配置的一致。

    高级选项

    默认就好

    I/O Planning and Design Checklist Tab

    默认就好。

    这里我们就新建好了。

    工程测试。

    由于我们是通过PCIE直连DDR4的模式。我们可以直接使用xilinx提供的测试函数取读写DDR4的数据。

    在下载成功后,会自带的有个这个界面。我们在此界面上可以看到绿色的CAI PASS。表明DDR4初始化成功。此外在调试的过程中,会存在很多问题在此界面中。可以看到DDR4初始化到哪一个步骤下失败。从而取考虑硬件上的设计错误。

    使用PCIE 下发数据。

    分别测试了向0x8000_0000写入数据。(即向DDR4写入)

    从0x8000_0000读出数据。(即从DDR4读出)

    写入了4K的bin文件。后读出。数据一致。表明读写正常。

    DDR4的测试完成,是不是发现xilinx把这些IP做的越来越简单。

  • 相关阅读:
    C语言高级教程-C语言数组(三)
    LeetCode每日一题(1770. Maximum Score from Performing Multiplication Operations)
    2023年第十六届山东省职业院校技能大赛高职组“软件测试”赛项样题
    19. 机器学习——朴素贝叶斯
    Spring Boot获取客户端的IP地址
    16-k8s阶段性总结01-wordpress案例
    Java循环结构:一件事重复做才能有效果。
    OPT-001
    如何获取mysql数据库中所有数据类型
    关于#python#的问题:二维数组去重保留最后一行满足条件的数据(相关搜索:数组去重)
  • 原文地址:https://blog.csdn.net/hy_520520/article/details/133931887