ZYNQ测试DDR读写速度的裸机程序
时间: 2023-09-13 18:02:48 浏览: 339
以下是一个简单的ZYNQ测试DDR读写速度的裸机程序,使用Vivado和Xilinx SDK进行开发:
```c
#include <stdio.h>
#include "xparameters.h"
#include "xil_printf.h"
#include "xtime_l.h"
#define DDR_BASEADDR 0x00100000
#define DATA_SIZE (1024*1024) // 1MB
int main()
{
int i;
u32 *src = (u32*)DDR_BASEADDR;
u32 *dst = (u32*)(DDR_BASEADDR + DATA_SIZE);
XTime tStart, tEnd;
// 初始化数据
for (i = 0; i < DATA_SIZE / sizeof(u32); i++) {
src[i] = i;
}
// 测试写入速度
XTime_GetTime(&tStart);
for (i = 0; i < DATA_SIZE / sizeof(u32); i++) {
dst[i] = src[i];
}
XTime_GetTime(&tEnd);
printf("写入速度: %.2f MB/s\n",
DATA_SIZE / ((float)(tEnd - tStart) / (COUNTS_PER_SECOND * 1024 * 1024)));
// 测试读取速度
XTime_GetTime(&tStart);
for (i = 0; i < DATA_SIZE / sizeof(u32); i++) {
src[i] = dst[i];
}
XTime_GetTime(&tEnd);
printf("读取速度: %.2f MB/s\n",
DATA_SIZE / ((float)(tEnd - tStart) / (COUNTS_PER_SECOND * 1024 * 1024)));
return 0;
}
```
该程序使用DDR_BASEADDR作为起始地址,并将1MB的数据分为两部分,分别作为读和写的缓冲区。程序首先使用for循环初始化写入缓冲区的数据,然后使用XTime_GetTime函数记录开始时间,执行for循环将写入缓冲区的数据复制到读取缓冲区,最后使用XTime_GetTime函数记录结束时间。程序计算出写入和读取速度并打印输出。
阅读全文