エンベデッド・ペリフェラルIPユーザーガイド

ID 683130
日付 9/21/2020
Public
ドキュメント目次
1. 概要 2. Avalon® -ST Multi-Channel Shared Memory FIFOコア 3. Avalon® -STシングルクロックFIFOコアおよびデュアルクロックFIFOコア 4. Avalon® -STシリアル・ペリフェラル・インターフェイス・コア 5. SPIコア 6. SPI Slave to Avalon® Master Bridgeコア/JTAG to Avalon® Master Bridgeコア 7. インテル eSPIスレーブコア 8. eSPI to LPCブリッジコア 9. イーサネットMDIOコア 10. インテルFPGA 16550互換UARTコア 11. UARTコア 12. JTAG UARTコア 13. インテル FPGA Avalon® Mailboxコア 14. インテル FPGA Avalon® ミューテックス・コア 15. インテル FPGA Avalon® I2C (Master) コア 16. インテル FPGA I2C Slave to Avalon® -MM Master Bridgeコア 17. インテルFPGA Avalon® コンパクト・フラッシュ・コア 18. EPCS/EPCQAシリアル・フラッシュ・コントローラー・コア 19. インテルFPGAシリアル・フラッシュ・コントローラー・コア 20. インテルFPGAシリアル・フラッシュ・コントローラーIIコア 21. インテルFPGA汎用クアッドSPIコントローラー・コア 22. インテルFPGA汎用クアッドSPIコントローラーIIコア 23. インターバル・タイマー・コア 24. インテルFPGA Avalon FIFOメモリーコア 25. オンチップメモリー (RAMおよびROM) コア 26. Optrex 16207 LCDコントローラー・コア 27. PIOコア 28. PLLコア 29. DMAコントローラー・コア 30. Modular Scatter-Gather DMAコア 31. Scatter-Gather DMAコントローラー・コア 32. SDRAMコントローラー・コア 33. トライステートSDRAMコア 34. Video Sync GeneratorコアとPixel Converterコア 35. インテル FPGA Interrupt Latency Counterコア 36. パフォーマンス・カウンター・ユニット・コア 37. ベクトル割り込みコントローラー・コア 38. Avalon® -STデータ・パターン・ジェネレーター・コアとデータ・パターン・チェッカー・コア 39. Avalon® -STテスト・パターン・ジェネレーター・コアとテスト・パターン・チェッカー・コア 40. システムIDペリフェラル・コア 41. Avalon® Packets to Transactions Converterコア 42. Avalon® -STマルチプレクサー・コアとデマルチプレクサー・コア 43. Avalon® -ST Bytes to Packets ConverterコアとPackets to Bytes Converterコア 44. Avalon® -ST Delayコア 45. Avalon® -STラウンド・ロビン・スケジューラー・コア 46. Avalon® -ST Splitterコア 47. Avalon® -MM DDR Memory Half Rate Bridgeコア 48. インテル FPGA GMII to RGMIIコンバーター・コア 49. インテル FPGA MII to RMIIコンバーター・コア 50. インテルFPGA HPS GMII to TSE 1000BASE-X/SGMII PCSブリッジコア 51. インテル FPGA HPS EMAC to Multi-rate PHY GMIIアダプターコア 52. インテル FPGA MSI to GICジェネレーター・コア

37.7.4. ベクトルテーブルにおけるISRの配置

サイズの小さい重要なISRがある場合は、ISRコードをベクトルテーブルに直接配置することにより、最高のパフォーマンスを実現することができます。この方法により、ベクトルテーブルからHALファネルを介してISRに分岐する際のオーバーヘッドをなくします。このセクションでは、VIC Basicデザイン例のソフトウェアを変更し、VIC Table-Residentデザイン例を作成する方法について説明します。この例を使用して手順を正しく理解し、その後カスタムコードに同等の変更を加えます。

ベクトルテーブルにISRを配置することは、高度でエラーが発生しやすい手法であり、HALでは直接サポートされていません。細心の注意を払い、ISRコードをベクトル・テーブル・エントリーに収める必要があります。ISRがベクトル・テーブル・エントリーをオーバーフローすると、ベクトルテーブル内の他のエントリー、および割り込み処理システム全体が破損します。

ベクトルテーブルにISRを配置する際は、登録を行う必要はありません。alt_ic_isr_register() は呼び出さないでください。ベクトルテーブルの内容が上書きされます。

ISRがベクトルテーブルにある場合、HALはファネルコードを提供しません。そのため、ISRコードでは、通常はファネルで処理されるコンテキストの切り替え動作を実行する必要があります。ファネルのコンテキスト切り替えには、次の動作の一部またはすべてが含まれます。

  • レジスターの保存と復元
  • プリエンプションの管理
  • スタックポインターの管理

可能な限り高速なISRを作成するには、次のガイドラインに従うことで、ISRで実行するコンテキスト切り替え動作を最小限にする、もしくはなくします。

  • ISRをアセンブリー言語で記述します。
  • ISRで使用するシャドー・レジスター・セットを割り当てます。
  • 同じレジスターセットを使用している別のISRでISRがプリエンプトされないことを確認します。デフォルトで、レジスターセット内のプリエンプションは Nios® IIプロセッサーで無効にされます。この条件は、ISRにレジスターセットへの排他的アクセスを与えることで保証することもできます。

VIC Table-Residentのデザイン例では、BSPで生成されるファイルのaltera_vic1_vector_tbl.Sを変更する必要があります。この変更後にBSPを再生成すると、 Nios® IIソフトウェア・ビルド・ツールはaltera_vic1_vector_tbl.Sを再生成し、変更は上書きされます。