AR# 47516

Zynq-7000 SoC、DDR - コントローラーで STREX 命令が不正に処理される

説明

キャッシュが無効になっていると、CPU で実行される排他格納 (STREX) 命令に DDR コントローラーが応答しないことがあります。

この問題は、キャッシュを有効にしたキャッシュ可能なメモリ空間でのみ STREX 命令を実行するようにすると、回避できます。

ソリューション

影響: 深刻な問題ではありません。システムが停止するのは非常にまれです。

回避策: 排他操作が必要なマスターが Arm コアに制限されている場合、排他操作が必要な領域をキャッシュ可能にし、L1 キャッシュを有効にすると、この問題を回避できます。さらに、マスターの 1 つが PL にあると、排他モニターをその PL にインプリメントでき、Arm CPU およびデバイス マスターからのアクセスはそのモニターに配線されます。

対象となる構成: DDR メモリ コントローラーに対して排他操作を発行するシステム

対象となるデバイス リビジョン: (Xilinx Answer 47916) - 「Zynq-7000 デザイン アドバイザリ マスター アンサー」を参照してください。


特定の状況で STREX 命令が実行されると、DDRC が正しく応答しません。次の排他操作のシーケンスは、STREX 命令が不正に処理される状況を説明しています。

  • マスター 0 がアドレス AEXOKAY で EXCL RD を実行する (正しい)
  • マスター 1 がアドレス BEXOKAY で EXCL RD を実行する (正しい)
  • マスター 1 がアドレス BEXOKAY で EXCL WR を実行する (正しい)
  • マスター 1 がアドレス AEXOKAY で EXCL RD を実行する (正しい)
  • マスター 0 がアドレス AOKAY で EXCL WR を実行する (不正)
  • マスター 1 がアドレス AEXOKAY で EXCL WR を実行する (不正)
このシーケンスで、マスター 0 はアドレス A から排他読み出し (LDREX) を実行します。マスター 0 が同じアドレスに排他書き込み (STREX) を実行して排他操作を完了させる前に、マスター 1 は LDREX/STREX ペアを発行して、アドレス B で排他操作を完了させ、アドレス A から LDREX を実行します。この場合、マスター 0 はアドレス A に STREX を実行することでアドレス A の排他操作を完了させることができます。ただし、この操作では、マスター 1 の排他アクセス モニターはリセットされません。そのため、マスター 1 からの後続の STREX 命令で間違った EXOKAY 応答が受信され、マスター 1 による書き込み操作が実際には完了していないのに完了したと示されます。
影響の詳細:
これはまれな問題で、最も一般的な使用ケースである L1 キャッシュが有効になっているときの 2 つの Arm CPU 間では発生しません。しかし、稀なシナリオではありますが、キャッシュが無効になっていると排他アクセスが間違って処理され、使用方法によっては、ロックアップになる可能性があります。

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

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

Answer Number アンサータイトル 問題の発生したバージョン 修正バージョン
53051 Zynq-7000 SoC - PS DDR コントローラー N/A N/A
AR# 47516
日付 06/13/2018
ステータス アクティブ
種類 デザイン アドバイザリ
デバイス