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

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

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

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

Bbf28bf908ac83e5b85b52a675641641?s=128

fixstars

June 22, 2022
Tweet

More Decks by fixstars

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 • Ethernet/tmp_cmac_0_xilinx_u50_gen3x16_xdma_201920_3 にRTLカーネル生成時の一時ファイルとしてVivadoプロジェクトが含まれる

    • kernel_pack.xpr がVivadoプロジェクトファイル Ethernet IPを含むRTLカーネルの編集
  31. Fixstars Group www.fixstars.com Copyright © Fixstars Group • CMACをxg_mac +

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

    • 現状、Vitis標準機能でカーネルの信号をGTに接続できない • Vitisのリンク処理 (ブロックデザインをまとめる処理)で 指定した後処理スクリプトを実行可能 • VNxでは後処理スクリプト中でGTの信号を接続している RTLカーネルでGTを使うのに必要なこと
  33. 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で動作確認
  34. 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通信ができることを確認 まとめ
  35. Fixstars Group www.fixstars.com Copyright © Fixstars Group Thank You for

    your participation ご参加いただきありがとうございました お問い合わせ窓口 : event@fixstars.com