UPGRADE YOUR BROWSER

We have detected your current browser version is not the latest one. Xilinx.com uses the latest web technologies to bring you the best online experience possible. Please upgrade to a Xilinx.com supported browser:Chrome, Firefox, Internet Explorer 11, Safari. Thank you!

AR# 51948

14.2 EDK/Zynq - PL で CIP pcore を使用し、カスタムのソフトウェア ドライバー コードを使用すると、ソース バッファーおよびデスティネーション バッファーを DDR に設定すると機能しない

説明

Zynq に対しカスタム IP を作成し、PL で追加します。CIP で生成されたドライバー ソフトウェア コードを使用し、テストを実行します。ソースバッファーおよびデスティネーション バッファーを DDR で設定すると機能しません。なぜですか。

ソリューション


これは、スタンドアロンの BSP ではデフォルトでキャッシュがイネーブルになっているためです。

解決策にはいくつかの方法があります。

1) main.c コードでキャッシュをディスエーブルにします。これで問題なく機能します。

#include "xil_cache.h"
Xil_DCacheDisable();

2) セルフテストの例で、DDR に書き込みをした後、次のステップに進む前にキャッシュを消去します。

for ( Index = 0; Index < CIP_AXI4_MASTER_SELFTEST_BUFSIZE; Index++ )
{
SrcBuffer[Index] = Index;
DstBuffer[Index] = 0;
}

xil_printf(" ******* flushing data cache!!! \n\r");
Xil_DCacheFlushRange((unsigned int)SrcBuffer, CIP_AXI4_MASTER_SELFTEST_BUFSIZE);
Xil_DCacheFlushRange((unsigned int)DstBuffer, CIP_AXI4_MASTER_SELFTEST_BUFSIZE);

xil_printf(" - start user logic master module to receive word from the source\n\r");

3) SRC バッファーのみを消去してから CIP を起動します。そして (キャッシュからではなく) メインの DDR から読み出しを強制的に実行するため比較する直前に、デスティネーション バッファーを無効にします。

for ( Index = 0; Index < CIP_AXI4_MASTER_SELFTEST_BUFSIZE; Index++ )
{
SrcBuffer[Index] = Index;
DstBuffer[Index] = 0;
}

xil_printf(" ******* flushing data cache for source only!!! \n\r");
Xil_DCacheFlushRange((unsigned int)SrcBuffer, CIP_AXI4_MASTER_SELFTEST_BUFSIZE);
xil_printf(" - start user logic master module to receive word from the source\n\r");
/**** more code from selftest ****/

xil_printf(" ******* invalidate destination data cache to force correct read!!! \n\r");
Xil_DCacheInvalidateRange((unsigned int)DstBuffer, CIP_AXI4_MASTER_SELFTEST_BUFSIZE);
/*** do the memory compare as in the original code ***/
AR# 51948
作成日 11/20/2012
最終更新日 11/20/2012
ステータス アクティブ
タイプ 一般
デバイス
  • Zynq-7000
ツール
  • EDK - 14.2
  • EDK - 14