1. はじめに
下図 1 は インテル® SoC FPGA の General Interrupt Controller(GIC)へ割り込みを通知するポートの番号(GIC Interrupt Number)と、割り込み要因がまとめられている表の一部です。
FPGA から HPS の Arm® Coretex-A9 プロセッサーに対して割り込みを通知するポートも存在しているため、Source Block には FPGA という項目があります。
では、FPGA から Coretex-A9 に通知する際、GIC Interrupt Number はどのように決められているのでしょうか?
また、割り込みが適切に通知されたことを確認するためのレジスタはどこにあるのでしょうか?
本コンテンツは、そのような疑問の手助けになればと思っています。
【図 1】 GIC Interrupt Map の一部抜粋
2. FPGA から割り込みを通知する場合の GIC Interrupt Number
FPGA から Coretex-A9 に割り込みを通知する際の GIC Interrupt Number は Platform Designer 上で決められます。
HPS の設定で FPGA からの割り込みを有効にすると、f2h_irq0 / f2h_irq1 というポートが表示されます。
FPGA から HPS への Interrupt Number は 72~135 で用意されており、 f2h_irq0 / f2h_irq1 の割り当ては下記のようになっています。
- f2h_irq0: GIC Interrupt Number 72~103
- f2h_irq1: GIC Interrupt Number 104~135
Interrupt Number の詳細は下記資料の "Table 10-3: GIC Interrupt Map" をご参照ください。
参考資料: Cyclone® V Hard Processor System Technical Reference Manual
FPGA Module の irq を f2h_irq0 / f2h_irq1 に接続すると、Platform Designer の IRQ 列の配線上に数字を入力することができます。
配線上に入力可能な数字は 0~31 となっており、配線上の 0~31 という数字は f2h_irq0 では 72~103、f2h_irq1 では 104~135 に対応しています。
Interrupt Number の割り当てられ方の例を下図 2 に示します。
【図 2】 Interrupt Number の割り当てられ方の例
button_pio と jtag_uart は h2f__irq0 へ、dipsw_pio は h2f__irq1 に接続されています。
button_pio は 1、jtag_uart は 2 と配線上で入力されているので、GIC Interrupt Number はそれぞれ 73、74 となります。
dipsw_pio は 0 と配線上で入力されているので GIC Interrupt Number は 104 となります。
3. 割り込みペンディング・レジスター
前章で FPGA からの割り込みを行う場合の GIC Interrupt Number について紹介しましたが、
Coretex-A9 における割り込みペンディング・レジスターはどこを参照すべきかをご紹介します。
割り込みペンディング・レジスターは下記資料の "3.2.6 Pending Set Registers (ICDISPRn)" をご参照ください。
参考資料: PrimeCell Generic Interrupt Controller (PL390) Technical Reference Manual
参照する割り込みペンディング・レジスターのビット番号は、下図 3 に示すように
GIC Interrupt Number に紐づいています。
【図 3】 割り込みペンディング・レジスター
赤枠で囲っている箇所が FPGA からの割り込みを通知する際のペンディング・レジスターです。
4. 関連情報
GIC を扱う際に役立つ資料として下記 2 つの記事を紹介します。
参考: Cyclone® V SoC:HPSレジスタ仕様の掲載場所一覧シート
GIC の細かい仕様は ARM 社の資料を確認する必要があります。
こちらの記事では GIC に関する資料の URL を紹介していますのでご活用ください。
参考: DS-5 活用テクニック ~レジスタ・ビュー[2/3]レジスタ定義の自作
DS-5 デバッガーに GIC のレジスタを表示させるためのレジスタ定義ファイルを公開しています。
デバッガーの GUI 上でレジスタ値の確認を行いたい場合はこちらの記事をご参照ください。
5. おわりに
この記事では Platform Designer における GIC Interrupt Number の確認方法と、割り込みペンディング・レジスターについて紹介しました。
FPGA から Coretex-A9 に割り込みを入れる際の参考にして頂ければ幸いです。