2

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
4

1 に答える 1