我在 PL (FPGA) 中有一个具有以下设置的 Zedboard:
自定义 AXI(全)主 -> 互连 -> Zynq_PS(HP0 从端口)
- 自定义 AXI 主机产生数据(简单计数器,写入 DRAM,从 0x00000000 开始)。
- 数据写入 DRAM(根据 XMD 控制台 -> mrd 0x00000000 10)
- 当 PS 想要读取数据时(main.c -> 调用“Xil_in32(0x00000000)”),数据被改变了!!!
问题:在某些情况下调用函数 Xil_in32(用于从 DRAM 读取数据)是否会改变数据本身?(何时以及为什么?)
除非调用 Xil_in32,否则数据不会更改。这可以通过在从 main.c 调用 Xil_in32 之前从 XMD 控制台读取数据来证明
C代码:
#include <stdio.h>
#include "platform.h"
#include <unistd.h>
#include "xparameters.h"
#include "xil_io.h"
#include "xstatus.h"
#include "xscugic.h"
#include "xil_exception.h"
#include "ps7_init.h"
#define PARAM_BASE_ADDRESS 0x00000000
int main()
{
// initialization
init_platform();
//ps7_init();
ps7_post_config();
// variables
u32 offset;
u32 param;
int i = 0;
xil_printf(" PL WRITING & PS READING DRAM MEMORY TEST ");
// loop
while ( 1 ) {
getchar();
offset = 0X00000000;
for (i = 0; i < 50 ; i++){
offset = offset + 4;
param = Xil_In32(PARAM_BASE_ADDRESS + offset);
xil_printf("mem_read %d : %x \n\r",i , param);
}
}
cleanup_platform();
return 0;
}
XMD 读取数据:这显示了我停止读取内存的位置,然后计数器继续:
C8: 7252E9D5
CC: D7387D6F
D0: 1E998873
D4: 5DD8305F
D8: C4FEC147
DC: 347EBE2F <------ last memory read by Xil_in32
E0: 0000003F <------ counter
E4: 00000040
E8: 00000041
EC: 00000042
F0: 00000043
F4: 00000044
F8: 00000045
FC: 00000046
100: 00000047
104: 00000048
108: 00000049
10C: 0000004A