SDSoC 2015.4でPYNQのOverlayを開発する(1)
ブログを始めてみました。 この記事は、SDSoC 2015.4でPYNQ向けの環境構築〜開発を行うまでをまとめていくものです。
PYNQとSDSoCは相性が良いです。Cで書いたハードウェアアルゴリズムを高位合成し、それを簡単にPythonから呼び出すことができました。高位合成したIPによってはハードウェアの制約で入力バッファをDRAM上の連続領域に確保する必要がありますが、PythonからLinuxの連続領域を確保することも、PYNQが提供するPythonライブラリが面倒を見てくれます。そのため、PythonからNumPyのようなライブラリを使う感覚で自作のIPをつかった演算ができました*1。
PYNQ向けのSDSoCの環境構築は、現状骨が折れる作業です*2。SDSoCはFPGAボード毎に”プラットフォーム”を作成する必要があります。ボードによっては、SDSoCに標準でプラットフォームが付属しているものもありますが、PYNQはそうではありません(今後に期待)。SDSoCプラットフォームの作成方法は、公式のドキュメントやYouTubeの解説動画などが参考になります。しかし、私はHWプラットフォームは作れたもの、SWプラットフォームを上手く作れませんでした…
それでもなんとかSDSoCでPYNQの開発がしたかったので、有識者に聞くことにしました。Anurag Dubey氏です。彼はPYNQのコミッターでもあり、SDSoCを使って開発したPYNQ用のFIRフィルタをGitHubで公開していました*3。メールで「どうやって作ったの?」という内容の質問をしたところ、以下の回答がありました。かなりフレンドリーに回答してくれました。
- pynqfireはSDSoC 2015.4で開発した
- PYNQの/usr/lib/libsds_lib.soはSDSoC 2015.4でビルドしてある
- それ以外のバージョンでビルドした実行ファイルはPYNQで動かない
- もし違うバージョンのSDSoCを使うなら、Linuxカーネルのリビルドが必要
SDSoC 2015.4を使うのが、一番簡単な方法だとわかりました。
次の記事から、SDSoC 2015.4を使ってPYNQ用のOverlayを作る方法を記載します。 すでに作ったものは以下にあります。