私は64ビットインターフェースでDDR4に接続したT1042デザインを持っています。インターフェースの最上位バイトのニブル間で不適切なビットスワップの問題が既に見つかりましたが、これはSW設定では補正できないことがわかっています。PWBの改訂版で修正を実施する予定です。しかし、他のビットは正しく、スワッピングもリファレンスマニュアルで許可されている範囲に入っているため、代わりに32ビットモードで動作させて、SWや他の設計を引き続き表示できるようにしたいと考えています。QCVS DDRの検証ツールを使って試しましたが、メモリの初期化ができません。デバイスのパラメータを入力し、DQのマッピング値を自分のデザイン通りに設定しましたが、ERR_DETECTレジスタでビットACE= 1が出続けています。プロセッサはSPIインターフェース経由でRCWを取得し、DDR周波数は800MHzに設定されています。CodeWarrior/QCVSを使用して、正しいRCW値が受信されたことを確認する方法はありますか?32ビットモードの動作で考慮すべき他の設定は何でしょうか?なぜ動作しないのか説明がつきます。どんなサポートでも大変ありがたいです。ありがとう。
CodeWarrior/QCVSを使用して、正しいRCW値が受信されたことを確認する方法はありますか?
[A] はい、可能です。CCSを接続して、DCFG_CCSR_RCWSR1-DCFG_CCSR_RCWSR16を読み取って、SPIフラッシュのRCWと比較できます。
32ビットモードの動作で考慮すべき他の設定は何でしょうか?なぜ動作しないのか説明がつきます。
[A]これはディスクリートDDR4ですか?一般的なルールについては、 QCVS_DDR_User_Guideを参照してください。
ハードウェア設計については、
AN5097、DDR4 SDRAMメモリインターフェースのハードウェアおよびレイアウト**デザイン**の考慮事項
よろしくお願いします。
こんにちは、ジューンさん。
ご返信ありがとうございます。CCSを使用してRCWステータスレジスタを読み取り、RCWが想定どおりにプログラムされていることを確認できました。
私はディスクリートDDR4を使っており、ユーザーガイドやレイアウトの考慮事項も確認済みです。
32ビットインターフェース使用に関するエラッタA-007864を満たすため、1300MT/sで動作するための650MHzクロックがあることを確認しました。同僚が、チップセレクトがトグルしているかどうか確認するように提案した。QCVSツールがプロセッサに設定を送信し始めると、CS0信号は十分に低く保たれることがわかりました。プログラミングが完了し、検証ルーチンを実行しようとすると、CS0信号が完全にアサートされなくなる。JTAGの境界スキャンツールを独自に使い、信号が期待通りに接続されていること、そしてT1042のI/Oが正味を十分に低くしてDDR4メモリデバイスのVILを満たすことができるかを確認しました。信号の整合性に関するルーティングの面でも、ネットワークが良好であり、どこにも短絡していないことも確認しました。どうやらメモリコントローラの設定に何か問題があり、チップセレクト信号が正しく機能しないようです。他に何かアイデアはありますか?ありがとう。
説明中のCS0がD1_MCS0_Bを指しているのか確認していただけますか?
ご使用のCCSでコマンドを実行し、CCSのログ全体を更新してください。
(bin) % ccs::reset_to_debug
よろしくお願いします。
その通りです。私が言及しているのはD1_MCS0_Bのことです。
コマンドを実行すると
(bin) % ccs::reset_to_debug
「ライブラリが見つかりません」というメッセージが表示されます。
メモリコントローラは650MHzまたは1300MT/sの動作に設定されています。結果は同じだった。64ビットインターフェースのバイト8で意図しないビットスワップ(ニブル間の誤スワップ)が発生しているため、DDR4で32ビットモードを使おうとしています。設計は64ビット+ECCを想定していましたが、一時的な回避策として32ビット+ECCを運用しようとしています。つまり、現在5台の16ビットチップが接続されていますが、そのうち3台だけで動作させることを目指しています。
様々な設定の組み合わせを試してみましたが、QCVSツールの動作に変化は見られません。少し奇妙なのは、QCVSと同様の値をスタートアップスクリプトに設定したGreenHillsエミュレーターを使ってみたところ、DDR_SDRAM_CFG_2[D_INIT]がクリアされるまでの待機ループを通過できたことです。これは初期化が完了していることを示唆しています。そして、初期書き込み/読み出し検証で全て0x00となり失敗します。これは、最適ではない書き込みレベル設定値を使用しているため当然の結果です。QCVSツールだけ動作が異なる理由が分かりません。
RCWステータスレジスタを読み出した後、コマンドを入力してください。
コマンド「ccs::reset_to_debug」の結果ではなく、完全なccsログを共有してください。
「ライブラリが見つかりません」というメッセージが表示されます。
完全なログは、ccs を使用した最初のコマンドから始まります。
よろしくお願いします。
ACEエラーは、メモリコントローラがトレーニングシーケンス中にエラーを検出した場合に設定される自動キャリブレーションエラーです。では、クロック速度を800MHzから下げた場合、トレーニング結果はどうでしょうか?
一方、DDR4では64ビットまたは32ビットのバス幅のどちらが採用されるのでしょうか?T1042にはDDR4が何個接続される予定ですか?
添付ファイルは.txtファイルです。RCW出力による。最後に指定したコマンド「ccs::reset_to_debug」を実行しましたが、「ライブラリが見つかりません」というメッセージは表示されませんでしたが、その他の情報も表示されませんでした。
DDR構成レジスタについても同様のキャプチャを行い、添付しました。問題は見つかりません。実際、GreenHillsプローブで使用したこれらの値は正常に動作し、D_INITもクリアされるようですが、同じ値をQCVSツールで使用した場合はD_INITがクリアされません。GHプローブとCWTAPの違いがよく分かりません。何かアイデアがあれば教えてください。
現在、調達部門と協力してNDAを成立させ、完全な訂正書を作成できるようにしています。しかし、コンポーネントT1042NXE7MQBを使っていて、GoogleやNXPフォーラム検索ではエラッタA009942適用されるようです。
参照された「Optimization.zip」を教えていただけますか?どこにも添付されていないようです。
「ccs::reset_to_debug」は正しく動作します。
errata_A009942 が必要かどうか確認してください。必要な場合は、添付のホットフィックス Optimization.zip を解凍して、CodeWarrior PA インストールフォルダ内の既存の Optimization フォルダを上書きしてください。C:\Freescale\CW_PA_v10.5.1\eclipse\Optimization\resources\QorIQ\DDR\templates\init\errata_A009942.py が存在します。
以下の一般的なガイドラインをご確認ください。
新しいQCVSプロジェクトを作成する
- 「自動設定」と「離散DRAM」を選択する
- DRAM速度定格 = 最大速度 (例: 最大3200 MT/s、データシートを参照)
- 「出力データレート」で「xxx MT/s」を選択してください(現在の動作速度、例: 1300MT /s。このデータレートはRCWイメージで設定されているDRAM速度と一致している必要があります)。
- 「ランク/チップ選択」で「x」を選択 (シングルCSまたはデュアルCS)
- 「tCL」は「xx」を選択します(DRAMデータシートの速度ビン表に従って)。
- 「デバイスごとのDRAM構成」で「xx」を選択してください(DRAMデータシートを参照)。
- 適切な CLK-to-QDS スキューを埋める (EDA ツールを使用して CLK 信号と DQS 信号の長さを測定します。CLK の長さ - DQS の長さ)
CLKの長さからDQSの長さを引いた値。例:
CLK-DRAM0間の長さ = 100 mm
CLK-DRAM1間の長さ = 101 mm
DQS[0]の長さ = 75 mm
DQS[1]の長さ = 110 mm
CLK-to-DQS[0]のスキュー = 100 mm - 75 mm = 25 mm
CLK-to-DQS[1]のスキュー = 101 mm - 110 mm = -9 mm
- CLK配線の長さは、DQS配線の長さと10インチ以内で等しいか、それ以上でなければなりません。
- MCKの配線長がDQSの配線長より短い場合、その差は2.0インチ以内でなければなりません。
DQマッピング - コントローラピン:
実際のボードでDQビットスワッピングが使われている場合、ユーザーはQCVSで実際のPCBレイアウトに合わせて設定する必要があります。
タイミングCFG_1と3:
- tCL/tRCD/rRP/tRAS この値は、現在の動作速度に合わせるためにDRAMデータシートを参照します。
- tWR (書き込み回復時間、プリチャージの最小間隔となる最後のデータ)。この値はDRAMデータシートを参照してください。
- tRRD(アクティブ化間隔)この値はDRAMデータシートを参照します。
タイミングCFG_2:
- tFAW(4つのアクティブウィンドウ)、この値はDRAMデータシートを参照します。
ユーザーは、これらのボード固有の構成やDRAM固有の構成が実際のハードウェアと一致していることを確認する必要があります。
その他のほとんどのオプションについては、QCVSのデフォルト値を使用してください。
よろしくお願いします。
添付ファイルが見当たらなくて申し訳ありません。
こんにちは、ジューンさん。
ファイルの提供と継続的なサポートに感謝します。QCVS DDRvツールの設定に関するガイドラインに従い、本日、エラータ#A009942の回避策を試してみましたが、効果は見られませんでした。スクリプト自体を調べてみたところ、667MHzと800MHzという特定の周波数に対してのみ回避策が適用されているようです。現在、訂誤#007864により、幅32ビット以下の800MHzで動作するとDDRインターフェースに問題がある可能性があるとされ、現在650MHzで動作しています。650MHzの場合、設定する必要のあるデバッグレジスタ値はありますか?
この設計は単一の100MHzクロックソースを使用しているため、DDR周波数の選択肢はDDR4用に650MHz、700MHz、750MHz、800MHzしかないように思えます。32ビットモードの場合、650MHz以外の周波数を使用すべきでしょうか?
私は依然としてDQマップの値に疑念を抱いています。数ヶ月前の別の投稿で、 T1042 DDR4 DQ MAPレジスタ設定の値を確認するのを手伝っていただきました。
これは、当サイトで動作しているT1042 DDR4の他の例とこの設計との違いが顕著です。彼らは64ビットを使用し、最上位バイトでわずかなビットスワップを行っただけだった。64ビットインターフェースのMSBで既知の悪いビットスワップがあり、そのため32ビットモードを回避策として試みています。動作設計よりも多くのスワップがあり、1バイトレーン内での完全なニブルスワップも含まれますが、インターフェースの32ビットLSBはT1042コントローラーで許可されているルールに従っているようです。DQマップの入れ替えに関する様々な組み合わせが機能することが知られていますか?検証に使っている値をもう一度見ていただけますか?便宜上、レジスタ値と回路図のキャプチャを添付しています。DDR4デバイスのもう一方の端は直接1:1のマッピングなので、スワッピングはT1042側にのみ表示されています。
改めて、サポートありがとうございます。
スクリプトには650 MHzのA-009942を適用し、667と同じラインをもう1行追加すれば良いでしょう。
DQマッピングを確認するため、DDRデバイスの部品回路図をご提供いただけますでしょうか。
DQマッピングがMAPを横切る場合、デバッグモードが1つありますが、これはボードを修正するまでの暫定的な解決策です。
よろしくお願いします。
DDR4です。これはDIMMではなく離散設計なので、1G x 16ビットのデバイスが5台(64ビット+8ビットECC)です。
DDR4に64ビットバス幅の製品があるかどうかはわかりません。LPDDR4のことですか?
9月24日(木)に投稿した前回のメッセージでは、DQ[0:31]とECCに関する回路図のスクリーンショットを添付しました。誤ったビットスワップをハイライトした64ビットインターフェース全体のスナップショットを再度含めます。
追加の回避策を教えていただきありがとうございます。
質問:
1) A009942スクリプトに650MHzを追加する場合、どのような値を書き込むべきですか?667MHzと同じであるべきでしょうか?
2) あなたが挙げた新しい1200MT/sの回避策は、誤ったスワップが発生しても64ビットモードが動作するようにするためのものですか、それとも引き続き32ビットモードを試す必要がありますか?
3) DDRvツールを使用して回避策を実行する方法はありますか?そうでなければ、GreenHillsプローブの起動スクリプト内で試してみて、結果を報告します。
こんにちは、ジューンさん。
GreenHillsのプローブ起動スクリプト内でご紹介いただいた回避策を実装でき、DDR4インターフェースが動作しているようです。DDR4にコードを読み込んで実行を開始でき、GHプローブメモリビューを使ってDDR4で初期化されたデータ値を確認できます。確認のため、スクリプトを添付しました。
質問:
1) デバッグモードについてもう少し詳しく教えてもらえますか?
2) デバッグモードの回避策は1200MT/sでしか動作しないのか、それとももっと速く動かせるのか?
3) DQマップレジスタの機能にバグはありますか?DQマップレジスタが宣伝どおりに動作すること、そして新しいスピンでDQ57とDQ63の入れ替わりの誤りを修正した場合でも、デバッグモードなしでも正常に動作することを確認する必要があります。
4) 32ビットモードにバグや問題はありますか?デバッグ回避策なしの32ビットモードが機能しないのは理にかなっていません。なぜなら、それらのビットのマッピング規則に従っているからです。
5) 回避策としてデバッグモードを実行し、QCVS DDRvツールを使用して正しい書き込みレベル値を取得する方法はありますか?
こんにちは、ジューンさん。
あなたは問題の根本原因を特定したと思います。数年前から異なるMPUシンボルを使った**デザイン**がいくつかあり、**DDR3L**は1000MT/sで動作していますが、問題は一度もありません。そのため、記号に誤りがあるとは考えもしませんでした。私たちはマッピングの見直し、記号を修正し、この問題がなぜ長期間続いているのかを特定しようとしています。今後の新しいボードスピンでこの問題を修正できるはずです。引き続きサポートいただき、心からありがとうございます。この時点で、私たちは前に進むことができるはずです。
よろしくお願いいたします。
ダグ
こんにちは、@dbevans42さん
これはデバッグ専用の回避策であり、ビットスワップが正しく行われていないDDR4ボードを低データレートで動作させることで、ボードレベルで他の問題が存在しないことを確認するのに役立ちます。しかし、基板設計は最終的にAN5097に従って修正される必要があります。
このモードでサポートされる最大データレートは1200 MT/sです。
社内チームからの説明は以下のとおりです。
DEBUG_2[27:FRC_SE]はスローイネーブを強制的にローに設定することを意味し、DDR4はメモリへの書き込み時にインターフェースを遅くすることでCASをプレアンブルやRXビットの調整に訓練できます。通常、DDR4は書き込みではなく、多目的レジスタにMRSコマンドを発行することによってトレーニングを行います。FRC_SEビットが設定されている場合、MPRRおよびMPRWコマンドはサポートされません。さらに、FRC_SE設定されている場合、内部トレーニングやDRAM VRefトレーニングはサポートされません。
QCVS検証はこの回避策をサポートしていません。DDRのinitソフトウェアデバッグにのみ有用であり、メモリを有効にする前に必要な設定をDDR initに組み込む必要があります。
ご提供いただいた回路図のスクリーンショットを確認したところ、MPUライブラリに表示されているT1042のピン番号がデータシートのピン番号と一致していないことに気づきました。
正しいMPUライブラリを使用しているか確認していただけますか?さらに、T1042とDDR4デバイスの両方について、完全な回路図シンボル(ライブラリ定義)を提供してください。また、回路図上のT1042のピン番号がデータシートに記載されているピン番号と異なる理由を再確認することをお勧めします。
よろしくお願いします。
初期化を正常に行うために必要な最低クロック周波数は?あるいはイニティリアザイオンが全く機能しないかも。ハードウェアガイドラインに基づいて回路図とレイアウトを確認しましたか?DDR4の部品番号を教えていただければ、より詳しくレビューできます。
根本原因を特定できて嬉しいです。
可能であれば、次の基板リビジョン前に現行設計のDQマッピングを調整することも有益かもしれません。
結果が出たら共有していただけると嬉しいです。
ご質問がありましたら、お気軽にお知らせください。
私は1週間以上OoOになるので、返答が遅れるかもしれません。何か進展があればご連絡いたします。
ありがとうございます。