XilinxのFPGAをパーシャルリコンフィグで書き換えるモジュールとしてICAPってのがしばしば登場する。
そういえば、ZYNQのときはPCAPだったよなぁ、PCIeにはMCAPが付いてたよなぁと思いながら、これ以外に「なんとかCAP」(以後、xCAP)ってあるんだっけ?とか思いつつ、調べてみた。
ICAP、PCAP、MCAPはそれぞれInternal Configuration Access Port、PCAPがProcessor Configuration Access Port、Media Configuration Access Portの略である。
MCAPはなぜMedia-CAPなのか、どこからこのネーミング何だろう?と思ったけどPCIe-CAPとできなかったから苦し紛れのMediaなんだろうなぁと思っている。
それは別に良いとしてこのxCAPはFPGAをコンフィグレーション後にFPGAロジックからFPGAコンフィグレーション機能にアクセスモジュールである。
ICAPはFPGA領域に実装されている。
単なるFPGAデバイスでパーシャルリコンフィグをするときはICAPを使ってFPGAロジックがリコンフィグ領域を書き換えたりする。
逆にプロセッサが実行されているデバイス、ZYNQ系のデバイスはPCAPが実装されて、ARMからFPGAコンフィグレーション機能にアクセスすることができる。
VitisなどのフレームワークはLinux環境のXRTというランタイムでPCAPからPL領域を書き換えたりしている。
MCAPはUltraScaleから登場したモジュールでPCIeのハードウェアマクロにくっついている。
ALVEOなど、FPGAデバイスがPCIeバス上ですでに認識していていれば「PCIe→稼働中のFPGAロジック→ICAP→リコンフィグ領域」という経路でFPGAを書き換えるのではなく、「PCIe→リコンフィグ領域」へと直接書き換えることができる。
xCAPはこんな感じなのでプロセッサが載っていなくてUltraScaleでPCIeがないデバイス、Virtex、KintexやUltraScale+(PCIeが無いデバイス、UltraScaleでPCIeがないデバイスってあったかな?)はICAPしか存在しないことになる。
ICAPはFPGAロジックからアクセスするのでICAPE3のようなモジュールがあるけど、PCAP、MCAPはFPGAロジックから直接アクセスできないため、モジュールはない。
私は最近、ICAPは使わなくなったもののPCAPやMCAPは何気によく利用していて、おそらく、FPGAのいくつかあるハードマクロ(MMCMやPCIe、GTYなど)のマクロのうちxCAPを一番、よく利用していると思う。