PL读写DDR3 实现PS和PL间的数据交互 查表程序的验证程序

本文是PL读写DDR3 实现PS和PL间的数据交互 查表程序 的续集,ip的源代码见上文。本文只是提供一种简单验证方法。直接用axi_gpio这个系统提供的ip进行验证,而原文需要自己加建立一个ip来验证。

建立工程等一般流程这里不介绍了。

在建立的原理图里

添加cpu,然后添加上文介绍自建的ip searchTable, 添加2个axi_gpio。

原理图如下:

PL读写DDR3 实现PS和PL间的数据交互 查表程序的验证程序_第1张图片

这里2个gpio 分别设置如下:

输入需要2路,一路32位,一路位16位,需要使能 Enable Dual Channel。

PL读写DDR3 实现PS和PL间的数据交互 查表程序的验证程序_第2张图片

输出也是2路,一个32位,一个为1位 ,需要使能 Enable Dual Channel。

PL读写DDR3 实现PS和PL间的数据交互 查表程序的验证程序_第3张图片

searchTable 这个ip 也要设置一下地址偏移,这里设置为0x0400 0000。中间空格只是你好看清楚,设置区间为DDR的一个区间。

PL读写DDR3 实现PS和PL间的数据交互 查表程序的验证程序_第4张图片 

为了连接axi 这里需要 master axi 和 slave axi,所以处理器需要设置如下:

PL读写DDR3 实现PS和PL间的数据交互 查表程序的验证程序_第5张图片 

设置好了各ip ,连接好线, 保存原理图,Create HDL Wrapper ,Generate Output Procucts, 然后产生比特流,输出硬件,启动SDK。

在sdk 里生成一个helloworld 工程, 然后代码修改如下:

#include 
#include "platform.h"
#include "xil_printf.h"
#include "xparameters.h"
#include "xil_io.h"

#define MY_IPIN	0x41200000
#define MY_IPOUT	0x41210000
#define DDRAM	0x04000000

u32 searcha[2000];
u32 ok=0;
u32 nook=0;


void setram2(u32 count)
{
	u32 comp_addr=DDRAM;
	u32 i;
	for(i=0;i1000)
			break;
		state=Xil_In32(MY_IPIN+8);
	}
	result=Xil_In32(MY_IPIN);
	if(result==comp) ok++;
	else nook++;
	printf("------addr=%d rusult=%x comp=%x\n",addr,result,comp);
}


int main()
{
	u32 i;
	u32 counts;
	u32 setNo;
    init_platform();

   // Xil_DCacheDisable();

    counts=80;
    setNo=100;
    setram2(setNo);

    Xil_DCacheFlush();

    ok=0;nook=0;
    for(i=0;i

代码调试或运行,结果如下:

------addr=0 rusult=0 comp=0
------addr=4 rusult=4 comp=4
------addr=8 rusult=8 comp=8
------addr=12 rusult=c comp=c
------addr=16 rusult=10 comp=10
------addr=20 rusult=14 comp=14
------addr=24 rusult=18 comp=18
------addr=28 rusult=1c comp=1c
------addr=32 rusult=20 comp=20
------addr=36 rusult=24 comp=24
------addr=40 rusult=28 comp=28
------addr=44 rusult=2c comp=2c
------addr=48 rusult=30 comp=30
------addr=52 rusult=34 comp=34
------addr=56 rusult=38 comp=38
------addr=60 rusult=3c comp=3c
------addr=64 rusult=40 comp=40
------addr=68 rusult=44 comp=44
------addr=72 rusult=48 comp=48
------addr=76 rusult=4c comp=4c
counts=80,ok=20,fail=0,setNo=100

你可以改变程序中的counts, setNo的数值,也可以改变区间初始化赋值的setram2(),确证比较显示的值。

你可能感兴趣的:(fpga,zynq)