1、GP接口简介
GP接口是ZYNQ-7000系列器件中用于实现PS与PL端进行数据通信的数据接口,GP接口传输数据速率一般较慢,通常用作控制信息的传输,在利用GP接口的时候,PS端的角色是Master,PL端为Slave,此时PS端传送控制信息控制PL端进行相应操作。整个PS端PL端利用GP接口进行数据交换的示意图如下图所示:
寄存器数量为4-512个,寄存器位宽为32位。
2、GP接口创建流程
3、GP接口的使用
在这里我简单的使用了GP接口,实现了PS和PL简单的数据交流,首先我们创建了GP接口,寄存器数量为4个,主要实现的功能就是,PS通GP接口向四个寄存器里面分别传送长度为32位的数据,PL将reg0,reg1,reg2的高16位分别按位异或赋值给reg3的高16位,reg3的低16位为从PS端接收的数据保持不变,同时PS端对这个四个数据做相同的操作,比较两个结果是否相同,如果相同表示该过程实现,同时将四个寄存器的各个比特位异或结果用于点亮LED灯。Vivado中创建的块设计如下图所示:
PS端的代码如下图所示:
#include
#include "platform.h"
#include "xil_printf.h"
#include "xparameters.h"
#define REG_0 (*(volatile unsigned int *)(XPAR_GP_DEMO_V1_0_0_BASEADDR+0))
#define REG_1 (*(volatile unsigned int *)(XPAR_GP_DEMO_V1_0_0_BASEADDR+4))
#define REG_2 (*(volatile unsigned int *)(XPAR_GP_DEMO_V1_0_0_BASEADDR+8))
#define REG_3 (*(volatile unsigned int *)(XPAR_GP_DEMO_V1_0_0_BASEADDR+12))
int main()
{
init_platform();
//xil_printf("Hello World\n\r");
REG_0=0x0AAA0880;
REG_1=0x0A3B12F4;
REG_2=0x12368F78;
REG_3=0xECD54321;
unsigned int expected_result= ((REG_0^REG_1^REG_2) & 0xFFFF0000) | (REG_3 &0x0000FFFF);
xil_printf("ARM_REG_3_Result=%x\n",expected_result);
xil_printf("FPGA_REG_3_Result=%x\n",REG_3);
cleanup_platform();
return 0;
}
结果通过串口打印如下所示,从结果可以看出PS端和PL端运算的结果完全相同,测试通过。