記事 ID: 000086754 コンテンツタイプ: トラブルシューティング 最終改訂日: 2021/02/10

ダイナミック・リコンフィグレーションを有効にしたインテル Agilex® 7 FPGA PHYLite シミュレーション・デザイン例を使用しても、トラフィック刺激がキャリブレーション IP にトラフィックを送信しません。

環境

    インテル® Quartus® Prime 開発ソフトウェア・プロ・エディション
    パラレル・インターフェイスの PHY Lite インテル® Stratix® 10 FPGA
BUILT IN - ARTICLE INTRO SECOND COMPONENT
詳細

® ダイナミック・リコンフィグレーションを有効にしたインテル Agilex 7 FPGA PHYLite シミュレーション例デザインは、トラフィック刺激を介して補間器の遅延を変更することで動作するダイナミック・リコンフィグレーションの例を示す必要があります。ただし、インテル® Quartus® Prime 開発ソフトウェア・プロ・エディション・バージョン 20.4 の問題により、PHYLite グループが Input ピンタイプに設定されている場合、補間フェーズがハードコードされた値に設定されているため、インテル Agilex® 7 FPGA PHYLite シミュレーション例デザインのトラフィック刺激は、キャリブレーション IP にトラフィックを送信しません。

注: この問題は、PHYLite グループが Output ピンタイプまたは双方向ピンタイプに設定されている場合には発生しません。

解決方法

インテル® Quartus® Prime 開発ソフトウェア・プロ・エディション バージョン 20.4 でこの問題を回避するには、補間フェーズがハードコーディングされた値でてはなりません。この場合、トラフィック刺激が補間フェーズを読み取り、読み込み値をインクリメントし、補間フェーズを新しい値に変更できるように、phylite_tester.sv および test_logic_iossm.sv ファイルに何らかの変更を加える必要があります。

「phylite_tester.sv」という名前のファイルに対して、以下の変更を実行します。

1. 行 #159: 状態宣言 PHASE DELAY を削除し、CORE_PHASE_DELAYとIO_PHASE_DELAYの 2 つの状態宣言を追加します。

2. 177 行目: から変更

iossm_test_startを割り当てる = (prbs_fsm == PHASE_DELAY);

宛先

iossm_test_start = (prbs_fsm == CORE_PHASE_DELAY)を割り当てます。

3. 行 #323: INIT 状態のprbs_fsm信号を

prbs_fsm <= (CHANNEL_PIN_TYPE == "INPUT") ?IO_DRIVE: ((IOSSM_TEST_EN == 1) ?PHASE_DELAY:CORE_DRIVE);

宛先

prbs_fsm <= (IOSSM_TEST_EN == 1) ?(CHANNEL_PIN_TYPE == "INPUT" ?IO_PHASE_DELAY: CORE_PHASE_DELAY) : (CHANNEL_PIN_TYPE == "INPUT" ?IO_DRIVE:CORE_DRIVE);

4. #338 行目: IO_CHECK状態のprbs_fsm信号を

prbs_fsm <= (CHANNEL_PIN_TYPE == "OUTPUT") ?((IOSSM_TEST_EN == 1) ?PHASE_DELAY:CORE_DRIVE):IO_DRIVE;

宛先

prbs_fsm <= (IOSSM_TEST_EN == 1) ?(CHANNEL_PIN_TYPE == "OUTPUT" ?CORE_PHASE_DELAY: IO_PHASE_DELAY) : (CHANNEL_PIN_TYPE == "OUTPUT" ?CORE_DRIVE:IO_DRIVE);

5. #338 行目: CORE_CHECK状態のprbs_fsm信号を

prbs_fsm <= (CHANNEL_PIN_TYPE == "INPUT") ?IO_DRIVE: ((IOSSM_TEST_EN == 1) ?PHASE_DELAY:CORE_DRIVE);

宛先

prbs_fsm <= (IOSSM_TEST_EN == 1) ?(CHANNEL_PIN_TYPE == "INPUT" ?IO_PHASE_DELAY: CORE_PHASE_DELAY) : (CHANNEL_PIN_TYPE == "INPUT" ?IO_DRIVE:CORE_DRIVE);

6. 行 #341: 削除

PHASE_DELAY: 開始

if (core_checker_failed | io_checker_failed)

prbs_fsm <= CHECKER_FAILED;

それ以外の場合 (iossm_phase_shift_done)

prbs_fsm <= CORE_DRIVE;

終わり

次の 2 つに 置き換えます

IO_PHASE_DELAY: 開始

if (core_checker_failed | io_checker_failed)

prbs_fsm <= CHECKER_FAILED;

それ以外の場合 (iossm_phase_shift_done)

prbs_fsm <= IO_DRIVE;

終わり

CORE_PHASE_DELAY: 開始

if (core_checker_failed | io_checker_failed)

prbs_fsm <= CHECKER_FAILED;

それ以外の場合 (iossm_phase_shift_done)

prbs_fsm <= CORE_DRIVE;

終わり

「test_logic_iossm.sv」という名前のファイルに対して、以下の変更を行います。

1. 43行目:IOSSM_INIT_PIN_DELAYの値を196に変更

2. 45 行目の後: ローカル・パラメーター宣言 を追加 します。

localparam WAIT_INTERVAL = 8;

3. #59 行目: IOSSM_WAIT_REQ後に、これらの 3 つの次の状態宣言追加します。

IOSSM_PRE_READ、

IOSSM_PRE_RDATA、

IOSSM_PRE_WAIT、

4. 72 行目: から変更

(!reset_n) 始まる場合

pin_dly_write <= IOSSM_INIT_PIN_DELAY;

prev_pin_dly_write <= IOSSM_INIT_PIN_DELAY;

end else if (cal_debug_write & cal_debug_waitrequest)始まる

prev_pin_dly_write <= pin_dly_write;

pin_dly_write <= pin_dly_write IOSSM_DELAY_STEP;

終わり

宛先

(!reset_n) 始まる場合

pin_dly_write <= 0;

prev_pin_dly_write <= 0;

end else if (cal_debug_read_data_valid & iossm_fsm == IOSSM_PRE_RDATA) が始まる

prev_pin_dly_write <= cal_debug_read_data[IOSSM_PIN_DELAY_WIDTH-1:0] IOSSM_DELAY_STEP;

pin_dly_write <= cal_debug_read_data[IOSSM_PIN_DELAY_WIDTH-1:0] IOSSM_DELAY_STEP;

終わり

5. 85 行目: から変更

end else if (cal_debug_read_data_valid) が始まる

宛先

end else if (cal_debug_read_data_valid &iossm_fsm == IOSSM_RDATA) 開始

6. 108行目:iossm_fsm信号をIOSSM_INITの状態から変更

iossm_fsm <= IOSSM_WRITE;

宛先

iossm_fsm <= IOSSM_PRE_READ;

7. IOSSM_INIT 後、次の 2 つの状態 を追加 します。

IOSSM_PRE_READ: 開始

if (!cal_debug_waitrequest)

iossm_fsm <= IOSSM_PRE_RDATA;

終わり

IOSSM_PRE_RDATA: 開始

if (cal_debug_read_data_valid)

iossm_fsm <= IOSSM_WRITE;

終わり

8. 139 行目: から変更

cal_debug_readを割り当てる = iossm_fsm = = IOSSM_READ;

宛先

cal_debug_readを割り当てる = (iossm_fsm == IOSSM_READ) ||(iossm_fsm == IOSSM_PRE_READ);

9. 146 行目: から変更

wait_done = (req_wait_interval == 7) を割り当てますか? 1 : 0;

宛先

代入wait_done = (req_wait_interval == WAIT_INTERVAL-1) ? 1 : 0;

この問題は、インテル® Quartus® Prime 開発ソフトウェア・プロ・エディション バージョン 21.1 以降で修正されています。

関連製品

本記事の適用対象: 1 製品

インテル® Agilex™ FPGA & SoC FPGA

1

このページのコンテンツは、元の英語のコンテンツを人力翻訳および機械翻訳したものが混在しています。この内容は参考情報および一般的な情報を提供するためものであり、情報の正確さと完全性を保証するものではありません。インテルは不正確な翻訳があった場合でもいかなる責任を負いません。このページの英語版と翻訳の間に矛盾がある場合は、英語版に準拠します。 このページの英語版をご覧ください。