こんにちは、
私たちは QorIQ T1022 設計を用いており、NXP DDR Validation Suiteを使ったDDRの起動と検証を完了しました。
結果は有望だ。
- DDRの検証テストはすべて正常に合格しました。
- 試験したすべての条件下で、良好な時間的余裕を達成しました。
- ストレステスト中に検証スイートからエラーは報告されませんでした。
しかし、メインアプリケーションを読み込んで実行すると、 メモリ関連の問題や破損が見られます。これらの問題は、DDR検証テストだけでは再現できません。
これにより、実際のアプリケーションワークロード下でのみ発生する可能性のある問題を検出するために、追加のメカニズムやテスト手法を使えばよいのではないかという疑問が生じています。
私たちは以下の点を理解することに関心があります。
- T1022の標準的なDDR検証スイートテストで回避できるDDRやメモリサブシステムの問題にはどのようなものがありますか?
- DDRのトレーニングや検証で検出されなかった問題を暴露できる既知のアプリケーションレベルのシナリオはありますか?
- T1022には、根本原因を特定するのに役立つ追加のストレステスト、パフォーマンスモニター、エラーカウンター、デバッグ技術などがありますか?
- DDRの検証で優れたマージンが示されたにもかかわらず、後に本番環境でメモリ破損や不安定が観察された状況に遭遇した方はいらっしゃいますか?
追加の診断、ハードウェアチェック、ソフトウェアデバッグの方法についてのアドバイスをいただけると大変ありがたいです。
よろしくお願いします。
こんにちは、
QCVS DDRvツールは、シングルコアからJTAG経由で逐次的かつデターミニスティックなアクセスパターンを用いてDDRのタイミングマージン(書き込みレベリング、読み書き/書き込みセンタリング、クロック調整)をテストします。運動はしない:
- マルチマスター/マルチコア同時アクセス — T1022は2つのe5500コアとDPAA(データパスアクセラレーションアーキテクチャ)を持ち、フレームマネージャ、キューマネージャ、DMAエンジンが同時にDDRバスを巡って競合します。競合によって引き起こされるタイミング違反は、実際のトラフィック状況下でのみ発生します。
- キャッシュコヒーレンシーストレス — キャッシュフラッシュ、無効化、整合性のあるDMA転送を含むアプリケーションワークロードは、検証スイートが生成しないアクセスパターンを作り出します。
- 熱および電源の変動 — 室温で軽負荷時に測定されたDDRマージンは、SoCがフル稼働中でAVDD_DDR電源が負荷下で低下すると著しく劣化することがあります。
- DQマッピングエラー — DQ_MAPnレジスタが誤っている場合、コントローラは既知のトレーニングパターンを用いる検証には合格しますが、実際のアプリケーション トラフィック下ではデータを破損させる可能性があります。これはT1022固有の既知の問題です。
- 周辺のシングルビットECCエラー — 検証スイートが十分なトランザクションを蓄積せず、SBE閾値報告をトリガーできない場合もありますが、数時間稼働する実際のアプリケーションは静かに処理します。
DQマッピングの設定ミス
- DQ_MAPnレジスタはDRAMのDQ信号をコントローラにマッピングします。これらが誤ると、コントローラはトレーニングパターンを正しく解釈できず、実際のワークロード下でデータ破損が発生します。NXPはT1022設計でこれを確認しており、すべてのDQn_MAPレジスタをクリア(1:1マッピングのために0に設定)が推奨される診断ステップです。
- メモリの順序付け/パイプライン効果(PowerPC e5500)
- e5500コアには、メモリの順序付けの細かい違いがよく記録されています。書き込みは、特に明示的なmsync/isyncバリアがない場合、後続の読み取りが行われる前にDDRに完全にコミットされない可能性があります。NXPのアプリケーションチームは、 「エラー注入が無効になる前に書き込みがメモリに完全にコミットされない可能性がある。その後の読み取りでキャッシュまたはパイプラインにヒットし、ECCロジックがすぐにトリガーされない可能性がある」と確認した。アプリケーションコード、DMA設定時の欠落障壁、共有メモリ構造などは、実際には一貫性の順序の問題である明らかな破損を引き起こすことがあります。
- ECCシングルビットエラー蓄積
- T1022 DDRコントローラーはECCをサポートしています。シングルビットエラー(SBE)はハードウェアによって暗黙的に訂正されますが、ERR_SBE[SBEC]にカウントされます。SBEカウンタがしきい値ERR_SBE[SBET]を超えると、重大な割り込みが発生します。検証トラフィックが少ない場合、このしきい値に達することはありません。実際の応用では、蓄積されたSBEが最終的に修正不能なマルチビットエラー(MBE)となり、致命的となり、データは復元できません。
- アプリケーションのクラッシュとして現れるマルチビットECCエラー
- NXPはQorIQプラットフォーム(P2020、T1042)で、アプリケーションクラッシュ(例:有効なアドレスでのlwz命令のフォールト)がDDRのMBEイベント情報に起因したCASEを記録しています。クラッシュはソフトウェアのバグではなく、e5500コアがDDRコントローラから破損したデータを受け取り、IVOR1マシンチェック例外を発生させたためです。重要なのは、メモリ領域がキャッシュ禁止されている場合でも、MCSRレジスタは0xA000(修正不能なL1キャッシュ/タグエラー)を表示します。これはDDRコントローラがコアがL1エラーとして登録する破損データ信号を主張するためです
ボード設計を以下の基準と比較してください:
- AN3940 — DDR3 SDRAMメモリインターフェースのハードウェアおよびレイアウトデザインの考慮事項
- AN5097 — DDR4 SDRAMメモリインターフェースのハードウェアおよびレイアウトデザインの考慮事項
- AN4039 — PowerQUICCおよびQorIQ DDR3 SDRAMコントローラレジスタ設定の考慮事項
特に注意すべき点は、AVDD_DDR電源のノイズとデカップリング、DDRリセット信号のルーティング(HRESET_BからDRAM RESETへ)、および終端抵抗の値です。
よろしくお願いします。
こんにちは、
2つの結果の分析
図1(QCVSツール) ツールの結果は、「時計の中心合わせ」の検証段階を示しています。最適なCLK_ADJは1/8の位置で明るい黄色/緑色で強調表示され、対応するWRLVL_STARTは8/8のパスを示す1/2クロックとして決定されます。バイトレーンごとのWRLVLマージンも、良好な幅広の緑色の帯を示しています。
図2(あなた自身の測定値) ボードレベルのテストでは、WRLVLレジスタ(0x8655F606U、WRLVL_START = 3/4)を固定したまま、CLK_ADJをすべての値にスイープします。結果によると、CLK_ADJの値のうち、ごく狭い範囲(およそ1/4から1/2の範囲)のみが合格し、スイープの大部分が不合格となることがわかった。青色でハイライトされた元のCLK_ADJは9/16の位置にあるようで、これは通過ウィンドウの端、もしくはその近くに位置しています。
不一致の考えられる原因
1. CLK_ADJが変更されてもWRLVL_STARTの値は再計算されない
これが最も可能性の高い根本原因です。QCVSツールは、テストする各CLK_ADJ値に対してWRLVLレジスタ値を正しく再計算します。 WRLVL_CNTLレジスタの値を0x8655F606U(WRLVL_START = 3/4)に固定したまま、独自のテストでCLK_ADJをスイープすると、ほとんどのCLK_ADJ設定に対して無効な組み合わせをテストすることになります。書き込みレベリングの開始遅延は、選択した特定のCLK_ADJフェーズに適切である必要があります。
QCVSツールでは、「クロックのセンタリング」が完了した後、通過する他のCLK_ADJセルをクリックすると、その特定のCLK_ADJに対応する更新されたWRLVLレジスタ値が「更新された構成レジスタ」ウィンドウに生成されます。これは、代替のCLK_ADJ設定におけるマージンを評価する正しい方法です。
2. QCVSは書き込み・読み取り・比較方式を採用していますが、テストではBISTまたは別のアルゴリズムを使用する場合があります。
QCVSの「クロックのセンタリング」シナリオでは、書き込み・読み出し・比較(WRC)アルゴリズムを使用し、適切なマージンスイープとCLK_ADJおよびWRLVLの最適化を同時に実行します。独自のテストでBISTベースのパターンを使用する場合、 BISTテストはPHYタイミングを再トレーニングまたは調整しないことに注意してください。BISTテストは既存の設定を使用して機能を検証するだけであり、マージンを測定しません。
3. 信号完全性/基板レベルの要因
QCVSツールは独自の制御されたテストシーケンスに基づいて動作し、PCB配線長のずれ、温度変化、電源電圧のマージンといった基板固有の要因は考慮しません。基板レベルの測定により、カスタム基板ではQCVSに組み込まれたリファレンス・デザインの仮定とは異なり、より狭い有効タイミングウィンドウが明らかになります。
青色でハイライトされたオリジナルのCLK_ADJ設定について
元の CLK_ADJ 設定値 (青色で強調表示されている9/16 ) は、ボードレベルのテストにおける合格範囲の境界値、またはそれを超えています。これは、十分な余裕をもって事業を運営していないことを示している。QCVSツールは最適値として1/8を選択しました。これは元の値とは大きく異なるため、元の9/16設定で使用されていたWRLVL_STARTレジスタの値がCLK_ADJに適切に一致していない可能性があり、実効マージンがさらに減少することを意味します。
推奨されるマージン要件
QCVSツールは、明るい緑色のセルを最適設定とし、その周囲の通過範囲(緑色のセル)をマージン指標とみなします。NXPが一般的に推奨しているのは以下のとおりです。
- 選択した動作点の両側に、最低でも2~3個の緑色の通過セルがあれば、十分なマージンとみなされます。
- 片側につき1つの合格セルのみの場合、不十分またはぎりぎりの合格セルとみなされ、生産には使用すべきではありません。
- 動作点は通過ウィンドウの中央に位置するべきであり、端に位置してはならない。
推奨される次のステップ
- QCVSツールの最適なCLK_ADJ値である1/8を使用し、「更新された構成レジスタ」ウィンドウから対応するWRLVL_CNTLレジスタ値を抽出します。WRLVLを固定したまま、CLK_ADJを手動でスイープしないでください。
- CLK_ADJとWRLVL_STARTの両方が同時に最適化されていることを確認するために、書き込み・読み取り・比較テスト(BISTではない)を使用して、 「クロックのセンタリング」検証全体を再実行してください。
- QCVSのCLK-to-DQSスキュー入力が、PCB配線長測定値(EDAツールで測定したCLK長からDQS長を引いた値)に基づいて正しく設定されていることを確認してください。これは、WRLVL_STARTの初期値を直接決定するからです。
- 希望するCLK_ADJでマージンを評価したい場合は、「時計のセンタリング」実行後にQCVSツールのそのセルをクリックして正しいWRLVL値を再計算し、更新されたレジスタでWRLVLマージンシナリオを実行してください
よろしくお願いします。
こんにちは、
詳細なご回答ありがとうございます。
それ以降、我々は追加調査を実施しました。図1は、 QorIQ検証ツールから抽出されたデータを示しています。これらの結果に基づくと、十分な余裕があるように見え、レジスターの設定を確認したところ、ツールが報告した値の範囲内でした。
そのため、検証結果に問題が示されなかったことから、当初はレジスターの設定変更は行いませんでした。
図2は、我々が独自に行ったテストの結果を示している。ご覧の通り、これらの結果は検証ツールが報告している内容と相関していないようです。我々の測定結果によると、利用可能なマージンは、ツールが示す値よりもかなり低いようです。
何か見落としている可能性や、検証ツールの結果と測定値の不一致を説明する追加の要因はありますか?
また、青色で強調表示されている値は、当初のCLK_ADJ設定値であることをご留意ください。この場合、十分なマージンとは何とみなされるのかも明確にしていただけますか?このツールでは、最適設定値の両側に緑色の値が1つずつあれば許容範囲であると示されているようですが、推奨されるマージン要件について確認していただけると幸いです。

図1)QorIQ DDR検証ツールでテストが実施されています。

図2) 自社ソフトウェアでCLK ADJ値を調整した際の実際の結果。