インテルのみ表示可能 — GUID: kkc1590022414772
Ixiasoft
インテルのみ表示可能 — GUID: kkc1590022414772
Ixiasoft
11.10.4.1. デバッグデータの構造
debug_data_struct (pt_DEBUG_DATA_PTR)
debug_data_structのベースアドレスは、(user_ramのベースアドレス) + (pt_DEBUG_DATA_PTRから読み取られるdebug_data_structのオフセット) に等しくなります。
- キャリブレーションの状態を表示するインターフェイス。debug_data_structのステータスビットが確認されます。
- キャリブレーションが開始すると、ビット1が設定されます。
- キャリブレーションが終了すると、ビット2が設定されます。
- コマンドをファームウェアに送信し (利用可能なコマンドはENUM_INTERFACE_COMMANDSで説明されています)、コマンドステータスに関する応答コードを受信する (認識されるステータスコードはENUM_DEBUG_INTERFACE_COMMAND_STATUS_CODESで説明されています) インターフェイス。コマンドの送信は、次の手順に従う必要があります。
- command_statusがTX_STATUS_CMD_READYになるまで待機します。
- 関連するcommand_parametersを目的のコマンドに設定します (ENUM_INTERFACE_COMMANDSで説明されています)。
- requested_commandコードを設定します (ENUM_INTERFACE_COMMANDS)。
- command_statusがTX_STATUS_RESPONSE_READYになるまで待機します。
- requested_commandコードをCMD_RESPONSE_ACKに設定し、応答が受信されていることを肯定します。
- command_statusの値がTX_STATUS_CMD_READYに戻ると、続くコマンドを送信することができます。
- mem_summary_reportへのポインター。これは、キャリブレーションのより詳細なステータスを提供します。
- mem_cal_reportへのポインター。これは、キャリブレーション時に決定した設定の詳細 (遅延設定、マージン、vref設定など) を提供します。
例1: 完全なEMIFの再キャリブレーションを要求する手順
- command_statusを読み取ります。readdata=32’h0000_0000 (TX_STATUS_CMD_READY) になるまで待機します。
- writedata=Interface_IDで、キャリブレーションするインターフェイスをcommand_parameters[0] に書き込みます。インターフェイスが1つしかない場合は、writedata=32’h0000_0000を設定します。
- writedata=32’h0000_0003 (DYNAMIC_FULL_RECAL) を使用し、command_parameters[1] に書き込みます。サポートされている他のキャリブレーション・オプションに関しては、ENUM_INIT_MODEの表を参照してください。
- writedata=32’h0000_0005 (RUN_MEM_CALIBRATE) を使用し、requested_commandに書き込みます。
- command_statusを読み取ります。readdata=32’h0000_0003 (TX_STATUS_RESPONSE_READY) になるまで待機します。
- writedata=32’h0000_0001 (CMD_RESPONSE_ACK) を使用し、requested_commandに書き込みます。
例2: VREF_OUTの開始値を設定し、新しい開始値を使用してEMIFを再キャリブレーション
- command_statusを読み取ります。readdata=32’h0000_0000 (TX_STATUS_CMD_READY) になるまで待機します。
- 新しいVREF_OUTを設定します。Vref_settingおよびVref_rangeを決定する方法に関しては、debug_cal_data_structを参照してください。
- writedata=Vref_settingを使用し、command_parameters[0] に書き込みます。
- writedata=Vref_rangeを使用し、command_parameters[1] に書き込みます。
- writedata=32’h0000_001B (SET_VREF_OUT) を使用し、requested_commandに書き込みます。
- command_statusを読み取ります。readdata=32’h0000_0003 (TX_STATUS_RESPONSE_READY) になるまで待機します。
- writedata=32’h0000_0001 (CMD_RESPONSE_ACK) を使用し、requested_commandに書き込みます。
- 再キャリブレーションを要求します。例1の手順に従いますが、init_modeはSKIP_INIT_VREFに設定します。
例3: VREF_INとVREF_OUTをハードコーディングし、次のEMIF再キャリブレーションでVREFCALをバイパス
- 新しいVREF_OUTを設定します。Vref_settingおよびVref_rangeを決定する方法に関しては、debug_cal_data_structを参照してください。
- command_statusを読み取ります。readdata=32’h0000_0000 (TX_STATUS_CMD_READY) になるまで待機します。
- writedata=Vref_settingを使用し、command_parameters[0] に書き込みます。
- writedata=Vref_rangeを使用し、command_parameters[1] に書き込みます。
- writedata=32’h0000_001B (SET_VREF_OUT) を使用し、requested_commandに書き込みます。
- command_statusを読み取ります。readdata=32’h0000_0003 (TX_STATUS_RESPONSE_READY) になるまで待機します。
- writedata=32’h0000_0001 (CMD_RESPONSE_ACK) を使用し、requested_commandに書き込みます。
- 新しいVREF_INを設定します。Vref_settingおよびVref_rangeを決定する方法に関しては、debug_cal_data_structを参照してください。
- command_statusを読み取ります。readdata=32’h0000_0000 (TX_STATUS_CMD_READY) になるまで待機します。
- writedata=Vref_settingを使用し、command_parameters[0] に書き込みます。
- writedata=32’h0000_001A (SET_VREF_IN) を使用し、requested_commandに書き込みます。
- command_statusを読み取ります。readdata=32’h0000_0003 (TX_STATUS_RESPONSE_READY) になるまで待機します。
- writedata=32’h0000_0001 (CMD_RESPONSE_ACK) を使用し、requested_commandに書き込みます。
- VREF_INおよびVREF_OUTをスキップするようにキャリブレーションを設定します。
- command_statusを読み取ります。readdata=32’h0000_0000 (TX_STATUS_CMD_READY) になるまで待機します。
- writedata=32'h 0000 C000 (CALIB_SKIP_VREFIN_CAL | CALIB_SKIP_VREFOUT_CAL) を使用し、command_parameters[0] に書き込みます。
- writedata= 32'h 0000 001E (SET_SKIP_STEPS) を使用し、requested_commandに書き込みます。
- command_statusを読み取ります。readdata=32’h0000_0003 (TX_STATUS_RESPONSE_READY) になるまで待機します。
- 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 になります。
- ビット [15:8] = vref_range。これは、IPのパラメーター化の際に設定されます。
パラメーター | 構造内のオフセット | サイズ |
---|---|---|
setting | 0 | 16 |
left_edge | 2 | 8 |
right_edge | 3 | 8 |