はじめに
Arria® V SoC と Cyclone® V SoC に搭載されている ハード・プロセッサー・システム(HPS)の SDRAM Controller は EMIF Debug Toolkit や EMIF On-Ship Debug Port をサポートしていません。
このため HPS からデバッグのレポートを出力させる方法を紹介します。
この技術コンテンツは以下のURLを参考にしています。
-
https://www.intel.com/content/dam/www/programmable/us/en/pdfs/literature/hb/external-memory/emi_ip.pdf
=> 7.14.3. Enabling the Debug Report
HPS デバッグレポートを出力させる設定
以下の手順でデバッグレポートを出力出来ます。
- <design_name>/hps_isw_handoff/sequencer_defines.h をテキストエディタで開きます
- sequencer_defines.h 内の #define RUNTIME_CAL_REPORT 0 に移動します
- #define RUNTIME_CAL_REPORT 0 を #define RUNTIME_CAL_REPORT 1 に変更して保存します
- semihosting を Enabled にするか、UART output にして、board support package (BSP) を生成します
この設定によりシステムが Calibration のプロセスを含んだ、デバッグレポートを出力します。
デバッグレポートの見方/確認方法
デバッグレポート記載されている項目に関して説明します。
※添付の「HPS_emif_debug_report.txt」の結果を例に説明します。
各 DQS グループの VFIFO と Delay の設定値の結果
DQS Enable グループは VFIFO の設定(1クロック周期)と Phase Tap 数(1/8クロック周期)、及び Delay Chain のステップ数(25ps 毎)を確認出来ます。
DQS Enable の幅は Start から End の位置の差分で分かります。
SEQ.C: DQS Enable ; Group 0 ; Rank 0 ; Start VFIFO 5 ; Phase 5 ; Delay 7
SEQ.C: DQS Enable ; Group 0 ; Rank 0 ; End VFIFO 6 ; Phase 5 ; Delay 0
SEQ.C: DQS Enable ; Group 0 ; Rank 0 ; Center VFIFO 6 ; Phase 1 ; Delay 4
上記の例では DDR clock = 333MHz(3000ps)のため
Start : 5 x 3000 + (5 x 3000)/8 + 7 x 25 = 17,050ps
End : 6 x 3000 + (5 x 3000)/8 + 0 x 25 = 19,875ps
このため DQS Enable の幅は 2,825ps(= 19,875 - 17,050)と言う事が分かります。
各 DQ グループの Write Deskew, Read Deskew, DM Deskew, Read after Write の結果
Write Deskew, Read Deskew, DM Deskew, Read after Write の値は Delay Step の値で、Arria® V / Cyclone® V のシリーズでは 1 Step は 25ps です。
SEQ.C: Read Deskew ; DQ 0 ; Rank 0 ; Left edge 23 ; Right edge 27 ; DQ delay 2 ; DQS delay 8
この例では、DQ0 は中心(DQS エッジ)から左側のエッジ(Left edge)が 23 ステップ、右側のエッジ(Right edge)が 27 ステップの位置にあります。
1ステップ(delay chain step size)は 25ps なので
(left edge + right edge) * delay chain step size = (23 + 27) * 25ps = 1250ps
の幅で DQ0 が開いていることになります。
Calibration の成功/失敗の確認
この例では
SEQ.C: Calibration Passed
とキャリブレーションがパスしたとありますので、こちらのログを以ってキャリブレーションの成功/失敗を確認して下さい。
Calibration が失敗した場合の対処方法
Calibration が失敗した場合は以下のように
SEQ.C: Calibration Failed
SEQ.C: Error Stage : <Num>
SEQ.C: Error Substage: <Num>
SEQ.C: Error Group : <Num>
Calibration の「どの Stage / Substage で失敗したか」「どのグループで失敗したか」が分かります。
この情報を元に、以下の URL にある資料
「EMIF デザイン & デバッグ・ガイドライン」
の P23(Calibration が Fail した場合)~ P33 までに記載されている、各 Stage の確認事項を設定、対処して下さい。