外部メモリー・インターフェイス・ インテル® Agilex™ FPGA IPユーザーガイド

ID 683216
日付 6/20/2022
Public
ドキュメント目次

11.10.4.1. デバッグデータの構造

この項では、ユーザーRAMのデバッグ構造を操作する方法について説明します。

debug_data_struct (pt_DEBUG_DATA_PTR)

debug_data_structのベースアドレスは、(user_ramのベースアドレス) + (pt_DEBUG_DATA_PTRから読み取られるdebug_data_structのオフセット) に等しくなります。

この行でデバッグを有効にしている場合は、この構造が生成され、キャリブレーション後にポインター (pt_DEBUG_DATA_PTR) がパラメーター・テーブルに格納されます。この構造は次の内容を提供します。
  1. キャリブレーションの状態を表示するインターフェイス。debug_data_structのステータスビットが確認されます。
    • キャリブレーションが開始すると、ビット1が設定されます。
    • キャリブレーションが終了すると、ビット2が設定されます。
  2. コマンドをファームウェアに送信し (利用可能なコマンドはENUM_INTERFACE_COMMANDSで説明されています)、コマンドステータスに関する応答コードを受信する (認識されるステータスコードはENUM_DEBUG_INTERFACE_COMMAND_STATUS_CODESで説明されています) インターフェイス。コマンドの送信は、次の手順に従う必要があります。
    1. command_statusがTX_STATUS_CMD_READYになるまで待機します。
    2. 関連するcommand_parametersを目的のコマンドに設定します (ENUM_INTERFACE_COMMANDSで説明されています)。
    3. requested_commandコードを設定します (ENUM_INTERFACE_COMMANDS)。
    4. command_statusがTX_STATUS_RESPONSE_READYになるまで待機します。
    5. requested_commandコードをCMD_RESPONSE_ACKに設定し、応答が受信されていることを肯定します。
    6. command_statusの値がTX_STATUS_CMD_READYに戻ると、続くコマンドを送信することができます。
  3. mem_summary_reportへのポインター。これは、キャリブレーションのより詳細なステータスを提供します。
  4. mem_cal_reportへのポインター。これは、キャリブレーション時に決定した設定の詳細 (遅延設定、マージン、vref設定など) を提供します。

例1: 完全なEMIFの再キャリブレーションを要求する手順

  1. command_statusを読み取ります。readdata=32’h0000_0000 (TX_STATUS_CMD_READY) になるまで待機します。
  2. キャリブレーションするwritedata=Interface_IDを使用し、command_parameters[0] に書き込みます。インターフェイスが1つしかない場合は、writedata=32’h0000_0000を設定します。
  3. writedata=32’h0000_0003 (DYNAMIC_FULL_RECAL) を使用し、command_parameters[1] に書き込みます。サポートされている他のキャリブレーション・オプションに関しては、ENUM_INIT_MODEの表を参照してください。
  4. writedata=32’h0000_0005 (RUN_MEM_CALIBRATE) を使用し、requested_commandに書き込みます。
  5. command_statusを読み取ります。readdata=32’h0000_0003 (TX_STATUS_RESPONSE_READY) になるまで待機します。
  6. writedata=32’h0000_0001 (CMD_RESPONSE_ACK) を使用し、requested_commandに書き込みます。

例2: VREF_OUTの開始値を設定し、新しい開始値を使用してEMIFを再キャリブレーション

  1. command_statusを読み取ります。readdata=32’h0000_0000 (TX_STATUS_CMD_READY) になるまで待機します。
  2. 新しいVREF_OUTを設定します。Vref_settingおよびVref_rangeを決定する方法に関しては、debug_cal_data_structを参照してください。
    1. writedata=Vref_settingを使用し、command_parameters[0] に書き込みます。
    2. writedata=Vref_rangeを使用し、command_parameters[1] に書き込みます。
    3. writedata=32’h0000_001B (SET_VREF_OUT) を使用し、requested_commandに書き込みます。
    4. command_statusを読み取ります。readdata=32’h0000_0003 (TX_STATUS_RESPONSE_READY) になるまで待機します。
    5. writedata=32’h0000_0001 (CMD_RESPONSE_ACK) を使用し、requested_commandに書き込みます。
  3. 再キャリブレーションを要求します。例1の手順に従いますが、init_modeはSKIP_INIT_VREFに設定します

例3: VREF_INとVREF_OUTをハードコーディングし、次のEMIF再キャリブレーションでVREFCALをバイパス

  1. 新しいVREF_OUTを設定します。Vref_settingおよびVref_rangeを決定する方法に関しては、debug_cal_data_structを参照してください。
    1. command_statusを読み取ります。readdata=32’h0000_0000 (TX_STATUS_CMD_READY) になるまで待機します。
    2. writedata=Vref_settingを使用し、command_parameters[0] に書き込みます。
    3. writedata=Vref_rangeを使用し、command_parameters[1] に書き込みます。
    4. writedata=32’h0000_001B (SET_VREF_OUT) を使用し、requested_commandに書き込みます。
    5. command_statusを読み取ります。readdata=32’h0000_0003 (TX_STATUS_RESPONSE_READY) になるまで待機します。
    6. writedata=32’h0000_0001 (CMD_RESPONSE_ACK) を使用し、requested_commandに書き込みます。
  2. 新しいVREF_INを設定します。Vref_settingおよびVref_rangeを決定する方法に関しては、debug_cal_data_structを参照してください。
    1. command_statusを読み取ります。readdata=32’h0000_0000 (TX_STATUS_CMD_READY) になるまで待機します。
    2. writedata=Vref_settingを使用し、command_parameters[0] に書き込みます。
    3. writedata=32’h0000_001A (SET_VREF_IN) を使用し、requested_commandに書き込みます。
    4. command_statusを読み取ります。readdata=32’h0000_0003 (TX_STATUS_RESPONSE_READY) になるまで待機します。
    5. writedata=32’h0000_0001 (CMD_RESPONSE_ACK) を使用し、requested_commandに書き込みます。
  3. VREF_INおよびVREF_OUTをスキップするようにキャリブレーションを設定します。
    1. command_statusを読み取ります。readdata=32’h0000_0000 (TX_STATUS_CMD_READY) になるまで待機します。
    2. writedata=32'h 0000 C000 (CALIB_SKIP_VREFIN_CAL | CALIB_SKIP_VREFOUT_CAL) を使用し、command_parameters[0] に書き込みます。
    3. writedata= 32'h 0000 001E (SET_SKIP_STEPS) を使用し、requested_commandに書き込みます。
    4. command_statusを読み取ります。readdata=32’h0000_0003 (TX_STATUS_RESPONSE_READY) になるまで待機します。
  4. EMIFのキャリブレーションを開始します。例1と同じ手順に従いますが、init_modeはSKIP_INIT_VREFに設定します。
パラメーター 構造内のオフセット サイズ 目的
data_size 0 32 この構造のサイズ (バイト単位)
status 4 32 出力: キャリブレーション・ステータス (ENUM_CAL_ERROR)
requested_command 8 32 入力: ユーザーがファームウェアに実行させるコマンド (ENUM_INTERFACE_COMMANDS)
command_status 12 32 出力: ユーザーが要求したコマンドのステータス (ENUM_DEBUG_INTERFACE_COMMAND_STATUS_CODES)
command_parameters[0] 16 32 入力: requested_commandのパラメーター。各コマンドに関連するパラメーターは、ENUM_DEBUG_INTERFACE_COMMANDSで説明されています。
command_parameters[1] 20 32 入力: requested_commandのパラメーター。各コマンドに関連するパラメーターは、ENUM_DEBUG_INTERFACE_COMMANDSで説明されています。
command_parameters[2] 24 32 入力: requested_commandのパラメーター。各コマンドに関連するパラメーターは、ENUM_DEBUG_INTERFACE_COMMANDSで説明されています。
command_parameters[3] 28 32 入力: requested_commandのパラメーター。各コマンドに関連するパラメーターは、ENUM_DEBUG_INTERFACE_COMMANDSで説明されています。
mem_summary_report_pointer 32 32 出力: mem_summary_report構造へのポインター
mem_cal_report_pointer 36 32 出力: mem_cal_report構造へのポインター

mem_summary_report (mem_summary_report_pointer)

この構造は、キャリブレーションのステータスに関する詳細を提供します。

パラメーター 構造内のオフセット サイズ 備考
data_size 0 32 この構造のサイズ (バイト単位)
report_flags 4 32

bit[0]: レポートが準備できている場合は1であり、以下のすべてのレジスターが有効です。

bits[23:1]: 今後の使用に向けて予約されています。

bits[31:24]: このレポートのバージョン番号。

error_stage 12 32 キャリブレーションが失敗した最初のステージ (ENUM_CAL_STAGE)
error_group 16 32 各ビットはdqsグループに対応します。ビットが1に設定されている場合、対応するグループは、error_stageで示されている段階で失敗しています。
error_code 20 32 詳細なキャリブレーション・ステータス (ENUM_CAL_ERROR)
in_out_rate 72 8

bits [7:4] = out_rate = vco : mem_clk

bits [3:0] = in_rate = mem_clk : phy_clk ratio

cur_interface_idx 32 32 保存されているデバッグ情報が適用されるインターフェイスのID。つまり、直近でキャリブレーションされたインターフェイス。

mem_cal_report (mem_cal_report_pointer)

この構造は、キャリブレーション時に観察された設定の詳細 (遅延設定、マージン、vref設定など) を提供します。

パラメーター 構造内のオフセット 配列内の要素数 (配列でない場合は1) 配列内の各要素のサイズ
data_size 0 1 32
debug_cal_data_struct_pointer__cal_data_dq_in 4 num_dq 32
debug_cal_data_struct_pointer__cal_data_dq_out 8 num_dq 32
debug_cal_data_struct_pointer__cal_data_dm_dbi_in 12 num_dm 32
debug_cal_data_struct_pointer__cal_data_dm_dbi_out 16 num_dm 32
debug_cal_data_struct_pointer__cal_data_dqs_in 20 num_dqs_rd 32
debug_cal_data_struct_pointer__cal_data_dqs_en 24 num_dqs_rd 32
debug_cal_data_struct_pointer__cal_data_dqs_en_b 28 num_dqs_rd 32
debug_cal_data_struct_pointer__cal_data_dqs_out 32 num_dqs_wr 32
debug_cal_data_struct_pointer__vrefin 36 num_dqs_rd 32
debug_cal_data_struct_pointer__vrefout 40 num_dqs_wr 32
debug_cal_data_struct_pointer__cal_data_ca 44 num_ac_rom_enums 32
debug_cal_data_struct_pointer__vfifo 52 num_dqs_rd 8
debug_cal_data_struct_pointer__lfifo 56 num_dqs_rd 8
debug_cal_data_struct_pointer__dcc_dq_in 60 num_dq 8
debug_cal_data_struct_pointer__dcc_dq_out 64 num_dq 8
debug_cal_data_struct_pointer__dcc_dm_dbi_in 68 num_dm 8
debug_cal_data_struct_pointer__dcc_dm_dbi_out 72 num_dm 8
debug_cal_data_struct_pointer__dcc_dqs_in 76 num_dqs_rd 8
debug_cal_data_struct_pointer__dcc_dqs_out 80 num_dqs_wr 8
debug_cal_data_struct_pointer__dcc_ca 84 num_ac_rom_enums 8
debug_cal_data_struct_pointer__vrefout_all_ranks 88 num_dqs_wr 8
debug_cal_data_struct_pointer__ctle_out 92 num_dqs_wr 8
debug_cal_data_struct_pointer__ctle_in_dq 96 num_dq 8
debug_cal_data_struct_pointer__ctle_in_dqs 100 num_dqs_rd 8
write_lat 108 1 32
read_lat 112 1 32
rank_skew_data_out 116 1 32
rank_skew_dqsen 120 1 32
extra_rank_delay_any_to_read 124 1 32
extra_rank_delay_any_to_write 128 1 32

debug_cal_data_struct

このデータ構造は何度もインスタンス化され、mem_cal_report内の各debug_cal_data_struct_pointer__*で指し示されます。settingフィールドには、特定のパラメーターに対して選択されている設定が格納されます。また、left_edgeおよびright_edgeフィールドには、設定からのオフセットが格納されます。これは、トランザクションが通過すると特定されているものです。格納されている値を解釈する際は、次の点に注意してください。

  • タイミング・パラメーターの場合、3つのフィールドはすべてタップで保存されます。
  • 電圧パラメーターの場合、settingフィールドは次のようになります。
    • ビット [15:8] = vref_range。これは、IPのパラメーター化の際に設定されます。
      • 値0の範囲は、VCCIO/VREFDQの60から92.5%です。
      • 値1の範囲は、VCCIO/VREFDQの45から77.5%です。
    • ビット [7:0] = 範囲内の増分ステップ数 (各ステップは0.65%) としてキャリブレーション時に決定したvref_setting

      例えば、DDR4の場合、VCCIO電圧は1.2Vです。よって、setting = 0x0122の場合は、

      Vref_range=1、vref_setting=34になります。

      したがって、Vref値をボルトで計算する場合は、((34 × 0.0065) + 0.45) × 1.2V) = 0.805V になります。

パラメーター 構造内のオフセット サイズ
setting 0 16
left_edge 2 8
right_edge 3 8