FPGA に手を出してみた (1)

GPU を色々調べていたが、どうやら自分がやりたいことをやるのはあまりコストパフォーマンスがいいわけではない、ということがわかり FPGA に手を出してみることにした。

自分がやりたいことは動画の圧縮や合成を高速に行うというもの。FPGA でこれを実現している NGCodec という会社があり、なるほどなるほど、では FPGA だと思い調べてみることにした。

PYNQ を買った

さて、残念ながら自分はハードウェアの知識はゼロ、さらにコンピュータサイエンスの知識もゼロ。なにもない。どこから手を付けていいのかもわからない。

ただ Python はちょっと書ける。ということで FPGA Python で検索したら PYNQ というのがあったのでまずは買ってみた。

FPGA を調べてみた

PYNQ が届く間に FPGA を調べることにした。まずは sildeshare で FPGA を検索して、ひたすら資料を読み漁る。

そして調べて読んだ資料に対してコメントを付けながらまとめていく。

とりあえず FPGA の資料を読み漁ってわかったこと。

  • FPGA には Xilinx と Intel が二大メーカー
  • FPGA には ARM + FPGA の SoC FPGA というのがある
  • FPGA は高速化がメインではなく書き換え可能な回路がメイン
  • C/C++ から HDL を出力することができる
  • FPGA の開発ではツールがとても重要
  • AWS F1 は Xilinx を採用している
  • ハードウェア制限はあるが Vavado HL Webpack は無償で利用できる
  • Verilog-HDL というハードウェア記述言語がある

まだまだあったがとりあえず単語が全くわからないことがよくわかった。つまり自分に知識がなさすぎてドキュメントや書籍を読むことができないことがわかった。

PYNQ を動かす

PYNQ を動かすだけなら PYNQ-Z1 コトハジメにまとめたが、動かすだけならとても簡単。だが、自分がやりたいのはコレジャナイ感が凄い。

ということで PYNQ のドキュメントを読むことにした。

PYNQ ドキュメントを読む

とりあえず全部読んで、不明な単語は調べてまとめた。

コレジャナイ感が解決した。PYNQ は Python からビットストリームを呼べる仕組みが用意されている。そして自分がやりたいのはオーバレイを作ること。

このオーバレイというのは何かと言うと、ソフトウェアで言うライブラリ。つまり HDL を書いて論理機能を作る事がやりたいということがわかった。

さて、その HDL を実装するには Vivado HL Webpack が必要。これを使うには Windows または Linux が必要ということまで理解した。

PYNQ のドキュメントにはオーバレイを作るところまで丁寧に解説はされているが、もちろんハードウェア開発者向けなので、細かい話は一切乗っていない。

Vivado HL Webpack を触ってみる

さて、自分は別に PYNQ でなにかしたいわけではなく、FPGA を利用した映像の高速圧縮を実現したいというのがゴール。

であれば、とにかく HDL を学ぶ必要はある。ただ HDL を学ぶコストはとても高い、そこで高位合成を使うのが良いという話のようだ。

  • C/C++ で HDL を生成する仕組みを高位合成と呼ぶ
  • 高位合成は Vivado で利用できる

まずは Vivado HL Webpack を使って色々学んでいくのが良さそうというのが今の所理解できた。であれば、まずは Vivado を触ることにした。

今後

Vivado を触るとともに、ハードウェアの知識を得ていく必要がある。何冊か書籍を購入して読み漁ることにした。

HDL や回路についても知識がなさすぎるので、まずは知識を得ていくしか無いと判断した。

自分は IoT などで FPGA を使いたいわけではない。あくまで高速化の技術の1つとして興味を持った。

最終的なゴールとしてはクラウド上にミドルウェア+FPGAという構成で利用できる何かを開発して販売したい。

蛇足

ロイヤリティフリーの動画コーデック AV1 が正式にリリースされた。この変換を FPGA に乗せるのが最終目的なのだが、そのための映像の知識がなさすぎるのもあり、並行して映像圧縮についても学んでいこうと思う。

PNG や JPEG から WebPAVIF を変換する仕組みも作ってみたい。

に成果が出るとは思っておらず、結果が出るのがずいぶん先になる長い時間のかかる挑戦になるとおもう。

まずはやれるところから、少しずつ。

Written by

Erlang/OTP / 時雨堂 / WebRTC / E2EE

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store