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

Nios II Classic (Gen1) から Gen2 プロセッサーにソフトウェアをアップグレードする際に、何を行う必要 Nios IIがありますか?また注意する必要がありますか?

環境

  • インテル® Quartus® II サブスクリプション・エディション
  • BUILT IN - ARTICLE INTRO SECOND COMPONENT
    詳細

    Nios® II Classic プロセッサーとNios II Gen2 プロセッサーはバイナリー互換性がありますが、HALとキャッシュ機能に若干の変更がありましたが、最新リリース (v14.0) のツール / ライブラリーを使用して BSP とソフトウェアを再構築することをお勧めします。また、プロセッサー構成にデータキャッシュが含まれている場合は、すべてのユーザーソフトウェアでキャッシュされていないメモリートランザクションの使用を確認することをお勧めします。

    解決方法

    キャッシュされていないメモリー領域
    データキャッシュを持つプロセッサーが読み取りを発行し、データがキャッシュにない場合、キャッシュは通常、メモリーから小さなブロックまたは「ライン」のデータをキャッシュに読み込みます。プロセッサーが書き込みを発行すると、新しい値は通常データキャッシュに格納されます。ライトバック・データ・キャッシュ (Nios II プロセッサーなど) を使用した場合、新しいデータ値は、キャッシュがフラッシュされるか、データがキャッシュから削除された場合にのみ、実際の物理的な場所に書き戻されます。この種の操作は、必要な機能 / 操作 (共有メモリーや周辺機器 / ハードウェア・コントロール・レジスターへの書き込みなど) に影響を与えるためにハードウェアにデータを直ちに書き込む必要があるメモリー領域では受け入れられません。つまり、開発者はキャッシュを直ちにフラッシュするか、キャッシュをバイパスしてハードウェアに直接 / 直ちにアクセスするメモリー操作を使用する必要があります (推奨)。開発者がデータをキャッシュしたくない理由が他にもある場合があります (例えば、データを読み返さない場合や、パフォーマンスやその他の理由で他のデータをキャッシュから削除することが必要でない場合など)。

    Nios II Classic プロセッサー・キャッシュ・バイパスでは、特別な I/O 読み取り / 書き込み命令 (ldwio/stwio など) を使用するか、読み取り / 書き込みアドレスのメモリーアドレスにビット 31 を設定するか、MMU/MPU を実装して適切に設定することで実現できます。(注: MMU およびビット 31 オプションは相互に排他的です)

    Nios II Gen2 コアは、キャッシュ・バイパスに対して同じメカニズムを提供していますが、実装が若干異なっており、Nios II Classic が Gen2 ソフトウェアの移行をNios IIする際の潜在的な問題である可能性があります。

    Nios II Classic プロセッサーがキャッシュ解除書き込みを実行し、メモリーの位置 (および関連するキャッシュライン) がデータキャッシュに存在する場合、新しいデータ値もキャッシュに書き込まれます (これはキャッシュされていない書き込みです)。つまり、キャッシュ内のデータは常に最新であり、ソフトウェア設計によってキャッシュされていないメモリーの領域がキャッシュに読み込まれる場合、データのコヒーレンシーが失われるわけではありません。したがって、Nios II Classic プロセッサーは、サイズやアドレスのアラインメントのキャッシュ解除済みメモリー領域もサポートできます (同じキャッシュライン上にキャッシュされた領域とキャッシュされていない領域を混在させることができます)。これは、Nios II Gen2 コアには当てはなりません。

    第 2 世代Nios II コアでは、キャッシュされていないトランザクションがデータキャッシュとキャッシュの内容を実際にバイパスすることは更新されません (ほとんどのプロセッサーでは標準的な慣行)。キャッシュされていないメモリー領域がキャッシュされた領域とキャッシュラインを共有する場合、キャッシュされていない領域はキャッシュにマッピングされ、キャッシュがフラッシュされると古い/ 弩行データで更新される場合があります。開発者は、キャッシュされていないメモリー領域とキャッシュされていないメモリー領域を明確に分離し、キャッシュ内にマッピングするときに同じキャッシュラインを共有しないようにする必要があります。これは、キャッシュされていないメモリー領域がデータキャッシュラインのサイズ (32 バイト) に整列し、1 つ以上のデータキャッシュラインのサイズ (32 バイトのマルチプル) になるようにすることによって実現されます。これにより、同じキャッシュライン上でキャッシュ可能データとキャッシュ不能データが混在することを防ぎ、古い / 無効なデータを書き込みます。適切な設計手法では、ペリフェラル・レジスター・セットのベースアドレスがデータ・キャッシュ・ラインの境界線と一致していること、およびドライバーがキャッシュ・バイパス I/O 読み取り書き込み命令を使用することを推奨しています。そのため、ドライバーへの変更が必要になる可能性は低くなります。キャッシュバイパス / キャッシュされていないメモリー領域を使用するその他のソフトウェアは、キャッシュされたデータとキャッシュされていないデータの両方を含む領域にキャッシュラインがマッピングされないように注意してチェックする必要があります。

    注: ビット 31 キャッシュ・バイパス機能を使用するソフトウェアは、Nios II Gen2 32 ビット・アドレス範囲オプションが選択されている場合、キャッシュバイパス I/O 命令またはペリフェラル・メモリー領域を使用する必要がある場合は機能しなくなります。

    新機能
    開発者は、ハードウェア構成を変更して使用する場合に備えて、新しい 32 ビット・アドレス範囲とペリフェラル・メモリー領域オプションの使用による潜在的な影響を考慮する必要があります。これらの機能をサポートするか、検出してエラーメッセージを発行するようにソフトウェアを変更する必要があります。
    ビット 31 キャッシュ・バイパス機能を使用するソフトウェアは、Gen2 32 ビットのアドレス範囲オプションが選択されている場合、キャッシュバイパス I/O 命令またはペリフェラル・メモリー領域を使用する必要がある場合は機能しなくなります。

    Nios II Classic ECC オプションが元のソフトウェアでサポートされていた場合、Nios II Gen2 プロセッサーがサポートする追加のメモリーを含めるために拡張する必要があります。

    関連製品

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

    インテル® プログラマブル・デバイス

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