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

ID 683216
日付 12/14/2020
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の比

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