Upgrade to Pro — share decks privately, control downloads, hide ads and more …

実践的!FPGA開発セミナー vol.2

Sponsored · Your Podcast. Everywhere. Effortlessly. Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.

実践的!FPGA開発セミナー vol.2

2021年9月29日実施の「実践的!FPGA開発セミナー vol.2」の当日資料です。

More Decks by 株式会社フィックスターズ

Other Decks in Programming

Transcript

  1. Fixstars Group www.fixstars.com Copyright © Fixstars Group Copyright © Fixstars

    Group 実践的!FPGA開発セミナー vol.2 2021/09/29 18:00~
  2. Fixstars Group www.fixstars.com Copyright © Fixstars Group Copyright © Fixstars

    Group DMA解説 FPGAアクセラレータ活用の 肝となるデータ転送を理解する
  3. Fixstars Group www.fixstars.com Copyright © Fixstars Group Eisuke MOCHIZUKI 望月

    英輔 ソリューション第一事業部 シニアエンジニア
  4. Fixstars Group www.fixstars.com Copyright © Fixstars Group • 望月 英輔

    • FPGA エンジニア ◦ 主にFPGA 開発 (Vivado/Vitis HLS, Verilog-HDL) ◦ 必要に応じてSW 開発を行うこともあり • 略歴 ◦ 製造装置メーカー ▪ アナログ/デジタル回路設計エンジニアとして入社 ▪ 開発人員不足を背景にFPGA に出会う ▪ Intel (Altera) Cyclone, MAX 等小さめのFPGA を主に使用 ◦ フィックスターズ ▪ FPGA を用いたリアルタイム映像処理システム開発 ▪ FPGA と100GbE を用いた低レイテンシ, 高スループット処理システム開発 ▪ Xilinx Alveo 等大きめのFPGA を主に使用 自己紹介
  5. Fixstars Group www.fixstars.com Copyright © Fixstars Group DMA = Direct

    Memory Access Source:Direct Memory Access – Wikipedia • CPU Power を使わず、Peripheral Device が主体となってデータを転送する ◦ Peripheral Devie 上のDMAC(= DMA Controller) が行う ◦ そのため、データ転送中CPU は別の仕事ができる • FPGA で言うところのDMA ① FPGA チップ内メモリからFPGA チップ内各モジュールに対するDMA ▪ ex: BRAM -> Stream ② FPGA ボード上のメモリからFPGA 内各モジュールに対するDMA ▪ ex: On board DRAM -> Stream ③ FPGA ボード上以外のメモリからFPGA 内各モジュールに対するDMA ▪ ex: Host PC のDDR4 SDRAM -> (PCIe 経由) -> Stream ▪ タイトルの「FPGAアクセラレータ」という意味ではこの用途が近い • 今回は③のPCIe 経由のDMA にフォーカスする DMA とは
  6. Fixstars Group www.fixstars.com Copyright © Fixstars Group • 近年は効率的な計算を行うためにCPU 以外のアクセラレータを

    使用することが常識となりつつある ◦ ex: 機械学習の効率化のためにGPU を使用する等 • 計算に必要な情報はHost Memory にあるため、 Host Memory ⇔ アクセラレータ間のデータ転送が必須となる ◦ データ転送には一般的にDMA が使用される ◦ DMA 中でもアクセラレータ上では計算処理を並行して実行可能 • Host Memory ⇔ アクセラレータ間のDMA 転送が低速だと、 処理全体のボトルネックとなりうる ◦ 効率化のために導入したアクセラレータが本来の性能を発揮できない 現代におけるDMA の重要性
  7. Fixstars Group www.fixstars.com Copyright © Fixstars Group • 通常のデバイスではDMAC(= DMA

    Controller) がHW 実装されているが、FPGA ではDMAC を自由に実装できる ◦ ただし、DMAC をゼロから自作することは多大な困難を伴うため、FPGA ベンダやIP ベ ンダが提供しているDMAC を使用することが多い ◦ 例としてXilinx はXDMA とQDMA という2種類のPCIe 用DMAC を提供している ▪ XDMA: 一般的なPCIe 経由のDMA を実行可能 Source:DMA for PCI Express (PCIe) Subsystem ▪ QDMA: DMAC 内部にQueue を持つことで小さいサイズの転送を効率的に実行可能 Source:QDMA Subsystem for PCI Express • 今回のセミナーでは、 Host Memory ⇔ FPGA DMA 転送を高速に実行することをターゲットとする FPGA におけるDMA の自由度
  8. Fixstars Group www.fixstars.com Copyright © Fixstars Group • Host to

    Card (H2C) の場合に注目し、DMA 処理フローを確認 ① Host Memory に転送したいデータを配置 ② DMAC に対しデータ転送コマンドを発行 ▪ Host Memory 上の転送したいデータの物理アドレスや、転送サイズ(Packet Size)、 FPGA 内転送先情報等を記載 ③ DMAC はコマンドに従いデータ転送を実施 ④ DMAC はデータ転送が完了したことを通知 Chipset Host PC CPU Memory Controlle r Host Memory FPGA DMAC PCIe ③ ① ② ④ FPGA におけるDMA の一般的な処理フロー
  9. Fixstars Group www.fixstars.com Copyright © Fixstars Group • FPGA 内のデザインがボトルネックにならないようにする

    ◦ ex) PCIe Gen3 x16: 128 GT/s -> 512 bit x 250 MHz の内部バスは最低限必要 ◦ DMA 側に問題がなくとも内部バスが原因で性能が出ないことがある(実経験) • PCIe の設定を確認する ◦ 特にMax Payload Size, Max Read Request Size が性能に影響するので注意 Source:Understanding PCIe Configuration for Maximum Performance • 1つの転送コマンドあたりのPacket Size を大きくする (前頁処理フロー②) ◦ 転送コマンドを極力発行しないでよい状況としたい ◦ できればシステムの設計段階から意識したい • CPU 側の転送コマンド発行が滞らないようにする (前頁処理フロー②) ◦ 状況によっては8コア16スレッドでも足りない場合もある(実経験) ◦ DMAC 側に転送コマンドのQueue を複数設けることも有効 ▪ DMAC 側がコマンドを受け取れず、コマンド発行が滞る状況を回避できる DMA の高速化のチェックポイント
  10. Fixstars Group www.fixstars.com Copyright © Fixstars Group • PCIe Gen3

    x16 の理論値128 GT/s に対し、100 Gbps 程度は達成可能 ◦ Xilinx Performance Report より抜粋 Source:71453 - Queue DMA subsystem for PCI Express (PCIe) - Performance Report DMA の実効転送速度
  11. Fixstars Group www.fixstars.com Copyright © Fixstars Group • PCIe Gen3

    x16 の理論値128 GT/s に対し、100 Gbps 程度は達成可能 ◦ Xilinx Performance Report より抜粋 1つの転送コマンドあたりのPacket Size が大きい領域 (> 4MiB) では、安定して100 Gbps 程度を記録 Source:71453 - Queue DMA subsystem for PCI Express (PCIe) - Performance Report DMA の実効転送速度
  12. Fixstars Group www.fixstars.com Copyright © Fixstars Group 1つの転送コマンドあたりのPacket Size が小さい

    ほど、転送速度は低下する 低下の度合いは、Queue の数によって変化する -> 転送コマンドの発行が追いつかなくなると、 DMA の転送速度は低下する Source:71453 - Queue DMA subsystem for PCI Express (PCIe) - Performance Report DMA の実効転送速度 • PCIe Gen3 x16 の理論値128 GT/s に対し、100 Gbps 程度は達成可能 ◦ Xilinx Performance Report より抜粋
  13. Fixstars Group www.fixstars.com Copyright © Fixstars Group • FPGA をアクセラレータとして使う上で、

    DMA データ転送を高速に実行することは非常に重要である ◦ そして、FPGA をアクセラレータとして利用する機会はますます増えるだろう予測し ている • DMA データ転送を高速に行うためには、転送コマンドの発行が十分に行えているかに 留意する必要がある ◦ 転送コマンドが十分に発行できれば、バスを効率的に使用することができる ◦ ただし、DMA 以外の部分にボトルネックが無いことが前提 • 適切な条件下であれば、理論帯域128 GT/s に対し100 Gbps 程度は実現可能 まとめ
  14. Fixstars Group www.fixstars.com Copyright © Fixstars Group Copyright © Fixstars

    Group VitisでFPGAネットワーク通信を 手軽に試すテクニック
  15. Fixstars Group www.fixstars.com Copyright © Fixstars Group Kenta IDA 井田

    健太 ソリューション第一事業部 シニアエンジニア
  16. Fixstars Group www.fixstars.com Copyright © Fixstars Group • 井田 健太

    • FPGA エンジニア ◦ 主にFPGA開発を担当 ▪ RTL開発からLinuxドライバまで ▪ Vivadoぽちぽちマン ◦ ときどきMCU/組込みLinux案件もやります • 略歴 ◦ 製造装置メーカー ▪ 装置の組込みソフトウェア担当 • RTOSを使ったファームウェア開発 • Windowsソフトウェア開発 ▪ 制御ボード上のFPGAの設計にも手をだす • Cyclone II/III/IVが載っていた ◦ フィックスターズ ▪ FPGA を用いたリアルタイム映像処理システム開発 ▪ Alveoなど比較的大規模なFPGA向けの開発が多い 自己紹介
  17. Fixstars Group www.fixstars.com Copyright © Fixstars Group • FPGAに10G~100G Ethernetなどの高速なネットワーク向けの

    信号を直接入出する使い方が増えている ◦ GPUと比較した場合の利点:FPGAはEthernet等の信号を直接扱える ◦ Ethernet等のネットワーク通信用の信号をFPGAで直接処理することにより 低レイテンシかつ一定レイテンシでの応答を実現 • 10G~100Gに対応したFPGAボードが容易に入手できるようになった ◦ Xilinx Alveoアクセラレータ等 (写真はAlveo U50DD) FPGAによるネットワーク通信
  18. Fixstars Group www.fixstars.com Copyright © Fixstars Group • ネットワーク通信用のデザイン開発は、従来は Vivadoフローのみサポート

    • VivadoとIP Integratorを使ったIPベース設計 ◦ ネットワーク通信用のIPを配置 ▪ Ethernet MAC IP等 ◦ アプリケーションロジックをIP化して配置 ◦ 必要に応じてCPU側メモリ間通信用のIPを配置 ▪ SoCの場合、CPU側メモリ転送用のDMA IPを配置 ▪ アクセラレータカードの場合、ホスト通信用のPCIe DMA IPを配置 ◦ 必要に応じてメモリコントローラのIPを配置 ◦ 各IP間を適切に接続 • ドライバ開発 ◦ 各IPの制御 (レジスタ設定、DMAの制御等) ◦ Xilinxの提供するリファレンスドライバを利用するなど • 制御用ソフトウェア開発 ◦ 前述ドライバを使って実現したいアプリケーションのソフトウェア部分を実装 ネットワーク通信用デザインの開発
  19. Fixstars Group www.fixstars.com Copyright © Fixstars Group • Vitis/Vivado 2019.1から追加されたデザインフロー

    ◦ 従来のSDAccel, SDSoC, Xilinx SDKを統合したような開発環境 • CPUからAXIバスやPCIe経由で実行を制御できるカーネルを開発 ◦ OpenCL APIを通じてCPUから実行制御 ◦ HLSもしくはRTLで記述 ◦ カーネルのメモリアクセス用のAXI4 Master IF ◦ CPUからカーネル内レジスタアクセス用のAXI4 Lite IF ▪ パラメータ設定等 ◦ カーネル間通信用のAXI4 Stream IF • システムで必要なカーネルを配置してシステムを構築 ◦ e.g. 画像処理用カーネルを2つ配置して2並列で画像処理を実行する等 Vitisデザインフロー
  20. Fixstars Group www.fixstars.com Copyright © Fixstars Group • ホストCPUからのアクセス用のランタイム を

    Xilinxが標準で提供 (Xilinx RunTime: XRT) ◦ DMAドライバやそれを使った転送制御処理を開発する必要がない • FPGAのコンフィグレーションがランタイム経由で実行可能 ◦ SoC: PSからPLのコンフィグレーション ◦ アクセラレーターカード: PCIe経由でのパーシャル・リコンフィグ • Vivadoフローと比較して可能なことは限られるが 可能であればVitisで楽をしたい… ◦ 特にアクセラレータ・カードを使ったPRの仕組みはかなり便利 Vitisデザインフローの利点
  21. Fixstars Group www.fixstars.com Copyright © Fixstars Group • 従来はサポートしていなかったが、 現在はRTLカーネルにてPR領域内から高速トランシーバー(GT)を利用可能

    ◦ RTLカーネルでトランシーバを使うIPをインスタンス化すればよい • つまり、 Ethernet MAC IPをRTLカーネルに含めればVitisでもネットワーク通信可能 Vitisでのネットワーク通信
  22. Fixstars Group www.fixstars.com Copyright © Fixstars Group • XilinxによるAlveoアクセラレータ・カード向けの Vitisフローを使った100G

    Ethernet通信デザインのサンプル ◦ GitHubで3-clause BSDライセンスで公開されている Source:https://github.com/Xilinx/xup_vitis_network_example • 100G Ethernetとして Xilinx UltraScale+ 100G Ethernet Subsystem (CMAC)を使用 • ARP,ICMP,UDPを実装し、ボード上メモリのデータを送受信 XUP Vitis Network Example (VNx)
  23. Fixstars Group www.fixstars.com Copyright © Fixstars Group • Alveoと100G Ethernetの機材があれば手軽にFPGA

    Ethernet通信が試せる ◦ CMAC IPはXilinxのサイトから無償でライセンス取得可能 • 問題: 100G Ethernet機材はそれなりに高い ◦ 100GbE NIC 1枚あたり 7万円~ ◦ QSFP28 100GbEモジュール 1万円~ 最低2個必要 ◦ 100GbE スイッチ 50万円~ • スイッチを使わないとしても、最低、対向のNICが必要 • ちょっとお手軽に…とはいかない 100GbE通信を試すための費用
  24. Fixstars Group www.fixstars.com Copyright © Fixstars Group • 100GbEではなく10GbEだと機材の価格それなりに安い ◦

    10GbE NIC 1枚あたり 1万円~ ◦ SFP+ 10GbE DAC 0.3万円~ • お手軽に試せそうなお値段 ◦ 実際、弊社techblogに記事を書くのに買ってもらいました • 問題: 10GbE Ethernet MAC IPが有償 ◦ 昔は無償だった (10G Ethernet Subsystem) ◦ 現在のIP (10G/25G Ethernet Subsystem) は有償 ◦ お値段は書けないが、Alveo買えます/Projectくらいの価格感 というわけで、10GbE Ethernet MACを作ってみた Source:https://japan.xilinx.com/content/dam/xilinx/support/documentation/ip_documentation/xxv_ethernet/v4_0/pg210-25g-ethernet.pdf 10GbE通信を試すための費用
  25. Fixstars Group www.fixstars.com Copyright © Fixstars Group • 10G Ethernetの通信処理は3つの部分に分かれる

    • MAC (Media Access Control sublayer) ◦ Ethernetフレームを扱う部分 ◦ EthernetフレームのプリアンブルやSFDの検出・付加処理 ◦ FCS (Frame Check Sequence)とよばれるCRC32の誤り検出符号の計算 ◦ XGMII(10G Media Independent Interface)というプロトコルで物理層のトランシーバと通 信 • PCS (Physical Coding Sublayer) ◦ トランシーバと通信するための符号化を担当 ◦ シ10GbEの場合は 64b66b 変換 • PMA (Physical Media Attachment) ◦ リアル・パラレル変換 (SERDES) • このうち PCS/PMAはFPGAのGTの機能なので 10G/25G Ethernet Subsuystem IPのPCS/PMA部分は無償利用可能 • MACのみ作れば10G Ethernet通信ができる! FPGAでの10G Ethernet通信処理
  26. Fixstars Group www.fixstars.com Copyright © Fixstars Group • エラー処理などを除けば以下の処理 •

    受信 ◦ XGMIIからAXI4 Streamへの変換 ◦ プリアンブル・SFDの除去 ◦ FCSの計算とチェック • 送信 ◦ FCSの計算と付加 ◦ プリアンブル・SFDの付加 ◦ AXI4 StreamからXGMIIへの変換 10G Ethernet MACの処理内容
  27. Fixstars Group www.fixstars.com Copyright © Fixstars Group • 前述の処理を実装したXilinx FPGA向けIP

    • GitHubで公開中 Source:https://github.com/fixstars/xg_mac • 3条項BSDライセンスで無償利用可能 • Alveo U50 (ES3)とIntelチップセットなNIC (X520)で動作確認済み • ただし製品レベルでの検証を行ったわけではない。 • 処理の詳細はtech blogを参照のこと Source:https://proc-cpuinfo.fixstars.com/2020/05/alveo-u50-10g-ethernet/ xg_mac IP
  28. Fixstars Group www.fixstars.com Copyright © Fixstars Group • 10GbE MACが使えるようになったので、Vitis

    Network Exampleを 100GbEから10GbEに変更できれば手軽にVitisでUDPが試せる MAC IPを置き換え 通信を10GbE化 XUP Vitis Network Exampleの10G化
  29. Fixstars Group www.fixstars.com Copyright © Fixstars Group • VNxは基本的にVitisのGUIを一切使わずに v++

    を呼び出してデザインの合成を行っている • トップレベルで以下のコマンドを実行するとU50向けのデザインを合成 ◦ 要XRT + Vitis 2020.1環境 • Ethernetディレクトリ以下にCMACを含むRTLカーネルが生成される ◦ bd_cmac.tcl:RTLカーネル本体のブロックデザイン定義 • カーネルのブロックデザイン定義を変更できればMACを置き換えられる make all DEVICE=xilinx_u50_gen3x16_xdma_201920_3 DESIGN=basic Ethernet IPを含むRTLカーネルの編集
  30. Fixstars Group www.fixstars.com Copyright © Fixstars Group • CMACをxg_mac +

    PCS/PMAに置き換え xg_macのIPをおいてあるディレクトリをIPリポジトリに追加 • カーネルのストリームの入出力信号を512bit↔64bitに幅変換して接続 Ethernet IPを含むRTLカーネルの編集
  31. Fixstars Group www.fixstars.com Copyright © Fixstars Group スクリプトで接続 • AlveoのプラットフォームにはGTの信号が用意されている

    • 現状、Vitis標準機能でカーネルの信号をGTに接続できない • Vitisのリンク処理 (ブロックデザインをまとめる処理)で 指定した後処理スクリプトを実行可能 • VNxでは後処理スクリプト中でGTの信号を接続している RTLカーネルでGTを使うのに必要なこと
  32. Fixstars Group www.fixstars.com Copyright © Fixstars Group • VNxには動作確認用のPythonスクリプトが含まれている ◦

    PYNQを使ったFPGA制御用のスクリプト • 確認手順はJupyter Notebookで書かれているので動かしてみる • 環境 ◦ 対象ボード: Alveo U50DD (ES3) ◦ 対向NIC: X520-10G-2S-X8 (10Gtek) ◦ ホストOS: Ubuntu 18.04 Jupyter Notebookで動作確認
  33. Fixstars Group www.fixstars.com Copyright © Fixstars Group • VitisデザインフローでもEthernet通信を行うデザインを作れる •

    XilinxがVitis Network Exampleを公開している ◦ UDP通信のAlveo向けデザイン • 100GbEの機材をそろえるのが難しい場合に10GbEの実験環境を作成 • 手軽に試すために10GbE MAC IPを開発 • Vitis Network Exampleを10GbE化した • Vitisの無償ライセンスの範囲で Alveoを使ったEthernet通信ができることを確認 まとめ
  34. Fixstars Group www.fixstars.com Copyright © Fixstars Group Thank You for

    your participation ご参加いただきありがとうございました お問い合わせ窓口 : [email protected]