1. はじめに
インテル® SoC FPGA を使用されているお客様から、Hard Processor System(以下、HPS)から FPGA に対してリセットをかけたいというお問い合わせを度々頂きます。
この資料では Arria® 10 における HPS から FPGA に対してリセットを発行する手段をご紹介します。
2. Arria® 10 の場合のリセット発行方法
Arria® 10 の場合、レジスター制御により、HPS にリセットをかけずに FPGA へリセットを発行することができません。
その為、HPS から FPGA への GPIO を使用してリセットを発行します。
イメージとしては下図 1 の通りです。
【図 1】 HPS から FPGA へリセットをかける構成(Arria® 10)
尚、Arria® 10 の場合 GPIO をリセットと見立てますが、Cyclone® V / Arria® V の場合、レジスターを制御することにより HPS にリセットをかけずに FPGA へリセットを発行することができます。
参考:詳細については下記資料をご参照ください。
HPS から FPGA に対してリセット信号を発行する(Cyclone® V / Arria® V)
3. HPS から FPGA への GPIO を有効にする設定
GPIO を有効にするには下図 2 のように、Platform Designer から HPS パラメーターの FPGA Interfaces タブ内の General カテゴリーにある、Enable general purpose signals にチェックを入れます。
【図 2】 GPIO を有効にする設定
上記設定を有効にすると下図 3 のように、HPS から h2f_gp という名前で GPIO が生成されます。
【図 3】 GPIO のポート
この h2f_gp をリセットとして使用して FPGA へリセットをかけます。
尚、h2f_gp は 32bit 幅で生成され、どの bit をトグルさせるかは HPS の FPGA Manager で制御します。
4. h2f_gp を制御するためのレジスター
HPS の FPGA Manager には gpo レジスターがあり、こちらのレジスターを制御することにより h2f_gp をトグルさせることができます。
参考:詳細については下記資料を参照してください。
Arria 10 HPS Register Map ⇒ fpga_mgr_fpgamgrregs Address Map ⇒ gpo
※ 以下抜粋(図 4)
【図 4】 gpo レジスター
32bit 幅の h2f_gp のどの bit を制御するかは、gpo レジスターの 32bit の構成に対応しています。
h2f_gp の bit 0 をトグルさせたい場合は、gpo レジスターの bit 0 を制御します。
5. h2f_gp 制御時の波形
”4. h2f_gp を制御するためのレジスター" のコマンドを実行した際、HPS の GPIO のポート(h2f_gp)がどう変化するか Signal Tap の波形を元に説明します。
- h2f_gp の bit 0 を Low から High へ変化させた場合の波形 :
"4. h2f_gp を制御するためのレジスター" で説明した、
"0xFFD03010 番地に 0x00000001 を Write"
を実行すると、下図 5 のように h2f_gp の信号が 0x00000000 から 0x00000001 となります。
【図 5】 h2f_gp を Low から High へ変化させた場合の波形
- h2f_gp の bit 0 を High から Low へ変化させた場合の波形 :
"4. h2f_gp を制御するためのレジスター" で説明した、
"0xFFD03010 番地に 0x00000000 を Write"
を実行すると、下図 6 のように h2f_gp の信号が 0x00000001 から 0x00000000 となります。
【図 6】 h2f_gp を High から Low へ変化させた場合の波形
6. まとめ
Arria® 10 の場合、HPS と FPGA 間の GPIO をリセットとして使用します。
FPGA Manager の gpo レジスターにより GPIO を制御することができます。
参考:レジスターの詳細は下記資料をご参照ください。
Arria 10 HPS Register Map ⇒ fpga_mgr_fpgamgrregs Address Map ⇒ gpo