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中查看:

相关推荐
幻智星科技5 小时前
多通道数据采集DMA设计详解
fpga开发·udp·硬件架构
泡泡糖的中文规格书10 小时前
HDLbits 1.4 学习笔记
fpga开发
智感子1 天前
FPGA触发采集:预触发、多通道同步与软硬件分工怎么落地
fpga开发
156082072192 天前
关于AGC性能测试
fpga开发
威嵌神州2 天前
国产化加固计算机项目选型笔记|板卡、整机、平板与定制模块评估要点
笔记·fpga开发·电脑
泡泡糖的中文规格书2 天前
HDLbits 1.2 学习笔记
fpga开发·学习笔记·verilog
樱木花道長2 天前
AMD Ross 深度系列 5:实战演示 —— MATLAB 到 FPGA,edge-detection 边缘检测全流程
fpga开发
吉他英雄一里3 天前
FPGA--RAM
fpga开发
szxinmai主板定制专家3 天前
储能 EMS、微网控制器选型:RK3588、RK3576、RK3568+FPGA 怎么选?多网、多 CAN、EMC 设计权衡
人工智能·深度学习·机器学习·fpga开发·工业网关·rk3576·电力网关