dram test

#include <stdio.h>
#include <stdlib.h>

#define LEVEL 5
#define RAM_TEST_PATTERNS 2


int
main (int argc, char *argv[])
{
	ulong *ptrMalloc = NULL;
	int i = 0, j = 0;
	ulong test_value;
	ulong *ptrl = NULL;
	int level = 0;


/*
	for ( i = 0; i < 10000; i++) {
		fprintf(stderr," i = %d\n", i);
		ptrMalloc = (char*) malloc(1024 * 1024 * i);
		if (!ptrMalloc) {
			fprintf(stderr,"malloc %d failed\n", i);
			break;
		}
		free(ptrMalloc);
	}
*/

    static const ulong TestPattern[LEVEL][RAM_TEST_PATTERNS] = {
		{0xFFFFFFFF, 0x00000000},
		{0x55555555, 0xAAAAAAAA},
		{0xA5A5A5A5, 0x5A5A5A5A},
		{0x96969696, 0x69696969},
		{0xCCCCCCCC, 0x33333333}
	};  



	ptrMalloc = (ulong*) malloc(1024 * 1024 * 20 * sizeof(ulong));
	if (!ptrMalloc) {
		fprintf(stderr,"malloc failed\n");
		return -1;
	}

	level = 0;
	for(i = 0; i < RAM_TEST_PATTERNS; i++) {
		test_value = TestPattern[level][i];
	
		/* Fill Test Pattern */
		for (ptrl = ptrMalloc, j = 0; j < 1024 * 1024 * 20; j++, ptrl++) {
			*ptrl = test_value;
			/*debug*/
			//fprintf(stdout,"Fill test Pattern 0x%x\n",*ptrl);
			//fprintf(stdout,"DRAM Test at address 0x%p\n",ptrl);
		}   

		/* Check Test Pattern */
		for (ptrl = ptrMalloc, j = 0; j < 1024 * 1024 * 20 ; j++, ptrl++) {
			if (*ptrl != test_value) {
				printf(" ...FAIL\n");
				printf("DRAM Test Fail at address 0x%p, read:0x%x, should:0x%x\n", ptrl, *ptrl, test_value );
				return 1;
			}    
		}    

	
	}


	return 0;
}

### 关于ZYNQ平台DRAM诊断测试的方法和工具 对于ZYNQ平台上的DRAM诊断测试,主要可以通过以下几种方法和工具来实现: #### 1. 使用SDK自带的DRM测试程序 Xilinx SDK提供了一个用于测试外部DDR3 DRAM的功能模块。该功能允许开发者通过简单的操作流程验证DRAM的工作状态。具体步骤如下: - 加载数据流到目标设备[^1]。 - 运行测试程序并打开SDK终端窗口。 - 在终端中选择特定的DRAM测试选项,例如输入`4`以启动256MB的空间测试。 - 测试完成后查看结果显示是否正常。 这种方法简单易用,适合初步确认硬件连接无误后的基本功能性检测。 #### 2. 利用JTAG接口进行深入调试 如果遇到更复杂的错误情况或者需要进一步分析问题根源时,可以借助Xilinx Vivado中的ChipScope Pro插件配合JTAG接口来进行实时监控与捕获波形数据分析。这种方式能够帮助工程师定位潜在的时间序列错配等问题[^2]。 #### 3. 实施裸机环境下的TPG生成器方案作为间接评估手段 另一种可行的办法是在不依赖操作系统的情况下编写专门的应用代码直接访问底层寄存器从而驱动视频输出端口产生已知图案(Test Pattern Generator, TPG)。比如针对某些型号如Zynq7020系列芯片而言,其内部集成了可配置成YUV色彩空间格式的支持能力;当调整好参数之后便能观察屏幕上呈现出来的稳定图像效果进而推断背后所依托的数据缓冲区即为正确分配使用的RAM单元区域[^3]。 以上便是有关如何开展基于ZYNQ架构之上对外接动态随机存储器件执行健康状况核查作业的一些常见做法介绍。 ```c // Example of a simple C program to initialize DDR memory on ZYNQ using Xilkernel APIs. #include "xparameters.h" #include "xil_cache.h" int main() { // Initialize the cache system before accessing external memories. Xil_DCacheInvalidate(); volatile int *test_addr = (volatile int *) XPAR_PS7_DDR_0_S_AXI_BASEADDR; for(int i=0;i<1024;i++) { test_addr[i]=i; // Write pattern into DDR locations. } bool pass=true; for(int j=0;j<1024 && pass==true ;j++) { if(test_addr[j]!=j){ pass=false; } } return !pass ? 1 : 0 ; } ``` 上述示例展示了怎样利用C语言脚本形式初始化并检验一小部分连续地址范围内的双倍速率同步型半导体储存组件内容一致性状况。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值