tkato’s blog

ブログ名は暫定。

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を作る方法を記載します。 すでに作ったものは以下にあります。

github.com

*1:多少HW寄りの知識は必要ですが、ドライバなど書かずにPython感覚でHWを叩けるのは感動

*2:@hasegawさん達がSDSoC 2016.3のPYNQプラットフォームを構築できたとのこと。私も環境を提供していただき動作確認中

*3:https://github.com/hackwa/pynqfire