パーシャル ビットストリームは、フレームごとの CRC チェックの有無にかかわらず、作成され、PROM ファイルの一部として QPSI フラッシュ デバイスに読み込まれました。これで、ICAP にファイルを読み込む直前に CRC 値のいくつかのビットをスワップし、CRC エラーを挿入できます。圧縮されていないパーシャル ビットストリーム (DFX Controller の機能ではなく、ビットストリーム生成を使用したもの) には、デバイスの応答ぶりを確認するため、この方法でエラーを挿入できます。これは、中央のプッシュボタンで制御されます。
- 前出の手順でまだ作業をしていない場合: Vivado ハードウェア マネージャーでデバイスをリフレッシュさせ、Vivado デバッグ コアをすべて検索します。
このデザインには、ILA コアが 3 つ、VIO コアおよび MIG コアが 1 ずつあります。
- 前出の手順でまだ作業をしていない場合: ILA コア ウィンドウの 1 つで Specify the probes file リンクをクリックし、Bitstreams/top_count_up_shift_right.ltx を検索します。
- OK をクリックして Refresh をクリックします。
- [hw_ila_2] で [+] をクリックし、[Trigger Setup] ウィンドウでプローブを追加します。
- icap_err_inserted を選択して、OK をクリックします。
- [Settings] ウィンドウでトリガーを icap_error_inserted の立ち上がりエッジに設定します。
- [Settings] ウィンドウで [trigger position in window] を 512 に設定します。 図 1. icap_err_inserted のトリガー設定
- ハードウェア マネージャーの GUI で Run Trigger ボタンをクリックします。
- UART ターミナルで、[Reconfig Type] を [Normal CRC from DDR4] に設定します (オプション 7)。これがデフォルト設定です。
- 中央のプッシュボタンを押し (これで CRC エラーが挿入されます)、プッシュボタンまたは UART ターミナルを介して必要なモジュールをリコンフィギュレーションします。パーシャル ビットストリームの最後の CRC 値がスワップされ、CRC エラーを発生させます。この結果、INIT_B が Low になり (INIT_B LED が赤く点灯)、CRC エラーが発生していることを示します。ボード上では、リコンフィギュレーションされていない機能がまだ動作していることに注意してください。
- ILA の波形に、icap_err_inserted がアサートされるトリガー位置が記されます。エラー挿入後、PRERROR がまず High になってから、PRDONE が High になります。また、
rm_decouple
信号もずっと High の状態を保ち、RP がまだ隔離されていることを示します。図 2. icap_err_inserted、PRERROR、PRDONE およびデカップルがアサートされた状態の波形
注記: dfxc_vsm_vs_*_event_error 信号は Low ですが、Dynamic Function eXchange (DFX) Controller のレイテンシのため、キャプチャされた波形の外側で High になります。標準 CRC で CRC エラーが検出される場合 (パーシャル ビットストリームの最後でのみ検出される)、間違ったビットストリームが既にデバイスに読み込まれています。どこに間違ったビットがあるのかを知ることはできませんし、その悪影響がリコンフィギャラブル デザインに出るのか、スタティック デザインに出るのかは不明です。この状態から確実にフル リカバリするには、デバイスをフル リコンフィギュレーションするしかありません。このチュートリアルでは、CRC 値のみがスワップされるので、エラーがスタティック デザインに影響を及ぼすことはありません。
- CRC エラーが発生すると、DFX Controller がシャットダウン モードになります。UART ターミナルで [Report Status] (9 番目のオプション) を見ると、RP がシャットダウン モードになっていて、BS ERROR がレポートされていることがわかります。このエラー ステータスから回復させるには、ターミナルの [Put RPs in Active Mode] (5 番目のオプション) を選択して、RP をアクティブ モードに戻し、正しいパーシャル ビット ファイルでリコンフィギュレーションします。その後、INIT_B は High に戻り (LED は緑色に点灯)、デザインが標準動作に戻ります。
次は、フレームごとの CRC 値を入力する方法で試してみます。
- ターミナルで、[Reconfig Type] を [per Frame CRC] (7 番目のオプション) に設定します。
- ハードウェア マネージャーで [Run Trigger] ボタンをクリックして、再度トリガーします。次に、ターミナルまたはプッシュボタンから Dynamic Function eXchange を実行します。
- ILA の波形では、パーシャル ビットストリームの最初のフレームに挿入されたエラーを確認できます。vs_rm_*_decouple が High になった後まもなく、リコンフィギュレーションが開始するのが確認できます。ただし、フレームごとの CRC を使用する場合は、エラーが挿入されたフレームがデバイスにはまだ読み込まれていないので、フル デザインをリコンフィギュレーションする必要はありません。完成していない RP を有効なパーシャル ビットストリームでリコンフィギュレーションするだけで十分です。エラー ステータスから回復させるには、手順 8 からの作業を繰り返します。