AR# 47556

Zynq-7000 SoC、APU - 同じキャッシュ ラインに対して CPU ストア命令が繰り返されると、その格納の表示が遅れることがある

説明

CPU には、通常のメモリ領域にキャッシュ ライン内に結合機能を持つストア バッファーがあります。同じキャッシュ ラインに書き込みアクセスが実行されている間、バッファーでデータが結合されます。ストア バッファーには小型のカウンターが備わっており、一定時間が経過するとデータがメモリに送信され、外部から参照できるようになります。問題は、このカウンターが新しいデータが結合されるたびにリセットされることです。ソフトウェアのコード シーケンスがループしており、同じキャッシュ ラインに繰り返しデータが書き込まれる場合、書き込まれたデータを外部から参照することができなくなります。

ソリューション

影響:

深刻な問題ではありません。この問題はパフォーマンスに影響することがあり、外部エージェントが書き込まれたデータに一定の時間後にデータを参照できることが必要な場合、ライブロック状態が発生することがあります。

回避策 :

このエラーの影響を受けるコード シーケンスの書き込み操作の後に DMB 操作を挿入し、外部エージェントが書き込まれたデータを参照できるようにします。

対象となるコンフィギュレーション :

プロセッサの 1 つまたは両方を使用するシステム

対象となるデバイス リビジョン:すべて。修正の予定なし。詳細は、Zynq-7000 デバイス アドバイザリ マスター アンサーを参照してください。

この問題は 通常のメモリ領域でのみ発生します。次に、この問題が発生する 2 つの例を示します。

  • プロセッサがカウンターをインクリメントし続け、同じワードを同じアドレスに書き込みます。外部エージェント (別のプロセッサなど) がこのアドレスをポーリングし、カウンター値がアップデートされるのを待ちます。ストア バッファーでキャッシュ ラインのアップデートされたカウンター値が結合され続け、外部エージェントがアップデートされた値を参照できず、ライブロック状態になることがあります。
  • プロセッサが指定のワードに値を書き込み、このタスクが完了したことを示します。その後、同じキャッシュ ラインの隣のワードにデータを書き込み続けます。外部エージェントは最初のワード メモリ ロケーションをポーリングし続け、プロセッサがこのタスクを完了したかをチェックします。問題は上記の例と同じで、キャッシュ ラインがストア バッファーで結合し続けられ、システムがライブロック状態になることがあります。

この問題を回避するには、ストア バッファーに継続的に結合される書き込み操作の後に DMB 操作を挿入します。 これにより、外部エージェントが書き込まれたデータを参照できるようになります。この問題が発生した場合、ユーザーは常にメモリ バリアを挿入する必要があります。

アンサー レコード リファレンス

マスター アンサー レコード

Answer Number アンサータイトル 問題の発生したバージョン 修正バージョン
47916 Zynq-7000 SoC デバイス - シリコン リビジョン間の相違点 N/A N/A
AR# 47556
日付 05/23/2018
ステータス アクティブ
種類 デザイン アドバイザリ
デバイス