PL (FPGA) で次のように設定された Zedboard があります。
カスタム AXI (フル) マスター -> インターコネクト -> Zynq_PS (HP0 スレーブ ポート)
- カスタム AXI マスターがデータを生成します (0x00000000 から始まる DRAM に書き込まれた単純なカウンター)。
- データは 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