9.读写DDR测试

DDR信息:

从链接文件中,可以看到DDR的起始地址和大小。

编写代码进行测试:

复制代码
#include <stdio.h>
#include <stdint.h>
#include "xil_printf.h"

/**
 * @brief DDR读写测试函数
 * @param start_addr 测试起始地址(建议传入 0x100000)
 * @param test_len   测试总字节数,注意不要超出ps7_ddr_0范围
 * @param block_size 单次读写块大小,建议4/8/32,4=按u32测试
 * @return 0:全部通过,非0:错误数量
 */
uint32_t ddr_test(uint32_t start_addr, uint32_t test_len, uint32_t block_size)
{
    uint32_t err_cnt = 0;
    uint32_t *p32 = (uint32_t *)start_addr;
    uint32_t test_words = test_len / sizeof(uint32_t);

    xil_printf("===== DDR Test Start =====\r\n");
    xil_printf("Start Addr: 0x%08X, Words: %d\r\n", start_addr, test_words);

    // 1. 写入测试pattern:递增数字 0,1,2,3...
    for(uint32_t i = 0; i < test_words; i++)
    {
        p32[i] = i;
    }

    // 2. 回读校验
    for(uint32_t i = 0; i < test_words; i++)
    {
        uint32_t exp = i;
        uint32_t got = p32[i];
        if(got != exp)
        {
            err_cnt ++;
            xil_printf("ERR @0x%08X : Exp=0x%08X, Got=0x%08X\r\n",
                       (uint32_t)&p32[i], exp, got);
            // 出错太多可以注释下面break,一次性跑完所有
            // if(err_cnt > 10) break;
        }
    }

    // 3. 再测反码pattern 0xFFFFFFFF - i,抓数据线粘连
    xil_printf("Run invert pattern test...\r\n");
    for(uint32_t i = 0; i < test_words; i++)
    {
        p32[i] = ~i;
    }
    for(uint32_t i = 0; i < test_words; i++)
    {
        uint32_t exp = ~i;
        uint32_t got = p32[i];
        if(got != exp)
        {
            err_cnt ++;
            xil_printf("ERR @0x%08X : Exp=0x%08X, Got=0x%08X\r\n",
                       (uint32_t)&p32[i], exp, got);
        }
    }

    xil_printf("===== DDR Test End, Error Count: %d =====\r\n", err_cnt);
    return err_cnt;
}

int main(void)
{
    uint32_t err;
    // 从ld里ps7_ddr_0起点0x100000开始,测试16MB(0x1000000字节)
    err = ddr_test(0x100000, 0x1000000, 4);
    if(err == 0)
    {
        xil_printf("DDR TEST OK!\r\n");
    }
    while(1);
    return 0;
}

实测,发现,如果从0x100000开始测试,容易卡死。

修改从0x200000开始测试,现象:

串口打印:

debug中查看:

相关推荐
花月mmc15 小时前
【FPGA】神经网络内容简介预告
嵌入式硬件·深度学习·神经网络·fpga开发
LabVIEW开发3 天前
LabVIEW FPGA 编程:少编译几次的办法(系列 04/05)
fpga开发·labview
cmc10283 天前
318.关于在ip内部封装PLL,MMCM的注意事项
fpga开发
LabVIEW开发3 天前
LabVIEW CompactRIO 编程模式怎么选(系列 02/05)
fpga开发·labview
FPGA小迷弟4 天前
FPGA 与千兆以太网校验和:从原理到 Verilog 实现
嵌入式硬件·fpga开发·无人机·ai编程·fpga
码农小韩4 天前
FPGA学习(二)——LED闪烁
fpga开发·verilog·fpga·led·组合逻辑·分频设计
9527华安5 天前
FPGA纯verilog实现DP视频接口,支持2K60帧分辨率,提供3套工程源码和技术支持
fpga开发·音视频·dp
ChaseVLSI6 天前
FPGA与ASIC的区别详解:内部结构、开发成本与适用场景,项目选型到底该选哪个
嵌入式硬件·fpga开发·硬件架构·硬件工程
9527华安6 天前
FPGA实现ARINC818总线协议,基于GT Transceivers Wizard高速收发器,提供7套工程源码和技术支持
fpga开发·transceivers·arinc818
小蘇的FPGA7 天前
fpga-wide-data-crc32
fpga开发