® ダイナミック・リコンフィグレーションを有効にしたインテル 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 以降で修正されています。