Polyphony の行く末(2018/3/3)

15 de Mar de 2018
Polyphony の行く末(2018/3/3)
Polyphony の行く末(2018/3/3)
Polyphony の行く末(2018/3/3)
Polyphony の行く末(2018/3/3)
Polyphony の行く末(2018/3/3)
Polyphony の行く末(2018/3/3)
Polyphony の行く末(2018/3/3)
Polyphony の行く末(2018/3/3)
Polyphony の行く末(2018/3/3)
Polyphony の行く末(2018/3/3)
Polyphony の行く末(2018/3/3)
Polyphony の行く末(2018/3/3)
Polyphony の行く末(2018/3/3)
Polyphony の行く末(2018/3/3)
Polyphony の行く末(2018/3/3)
Polyphony の行く末(2018/3/3)
Polyphony の行く末(2018/3/3)
Polyphony の行く末(2018/3/3)
Polyphony の行く末(2018/3/3)
Polyphony の行く末(2018/3/3)
Polyphony の行く末(2018/3/3)
Polyphony の行く末(2018/3/3)
Polyphony の行く末(2018/3/3)
Polyphony の行く末(2018/3/3)
Polyphony の行く末(2018/3/3)
Polyphony の行く末(2018/3/3)
Polyphony の行く末(2018/3/3)
Polyphony の行く末(2018/3/3)
Polyphony の行く末(2018/3/3)
Polyphony の行く末(2018/3/3)
Polyphony の行く末(2018/3/3)
Polyphony の行く末(2018/3/3)
Polyphony の行く末(2018/3/3)
Polyphony の行く末(2018/3/3)
Polyphony の行く末(2018/3/3)
Polyphony の行く末(2018/3/3)
Polyphony の行く末(2018/3/3)
Polyphony の行く末(2018/3/3)
Polyphony の行く末(2018/3/3)
Polyphony の行く末(2018/3/3)
Polyphony の行く末(2018/3/3)
Polyphony の行く末(2018/3/3)
Polyphony の行く末(2018/3/3)
Polyphony の行く末(2018/3/3)
Polyphony の行く末(2018/3/3)
Polyphony の行く末(2018/3/3)
Polyphony の行く末(2018/3/3)
Polyphony の行く末(2018/3/3)
Polyphony の行く末(2018/3/3)
Polyphony の行く末(2018/3/3)
Polyphony の行く末(2018/3/3)
Polyphony の行く末(2018/3/3)
Polyphony の行く末(2018/3/3)
Polyphony の行く末(2018/3/3)
Polyphony の行く末(2018/3/3)
Polyphony の行く末(2018/3/3)
Polyphony の行く末(2018/3/3)
Polyphony の行く末(2018/3/3)
Polyphony の行く末(2018/3/3)
Polyphony の行く末(2018/3/3)
Polyphony の行く末(2018/3/3)
Polyphony の行く末(2018/3/3)
1 de 62

Más contenido relacionado

La actualidad más candente

Polyphony IO まとめPolyphony IO まとめ
Polyphony IO まとめryos36
Zynq+PyCoRAM(+Debian)入門Zynq+PyCoRAM(+Debian)入門
Zynq+PyCoRAM(+Debian)入門Shinya Takamaeda-Y
Pythonによる高位設計フレームワークPyCoRAMでFPGAシステムを開発してみようPythonによる高位設計フレームワークPyCoRAMでFPGAシステムを開発してみよう
Pythonによる高位設計フレームワークPyCoRAMでFPGAシステムを開発してみようShinya Takamaeda-Y
メモリ抽象化フレームワークPyCoRAMを用いたソフトプロセッサ混載FPGAアクセラレータの開発メモリ抽象化フレームワークPyCoRAMを用いたソフトプロセッサ混載FPGAアクセラレータの開発
メモリ抽象化フレームワークPyCoRAMを用いたソフトプロセッサ混載FPGAアクセラレータの開発Shinya Takamaeda-Y
Pynq祭り資料Pynq祭り資料
Pynq祭り資料一路 川染
PyCoRAMを用いたグラフ処理FPGAアクセラレータPyCoRAMを用いたグラフ処理FPGAアクセラレータ
PyCoRAMを用いたグラフ処理FPGAアクセラレータShinya Takamaeda-Y

La actualidad más candente(20)

Similar a Polyphony の行く末(2018/3/3)

DE0でラジコンカー作ってみた 関西de0 fpga勉強会20120519DE0でラジコンカー作ってみた 関西de0 fpga勉強会20120519
DE0でラジコンカー作ってみた 関西de0 fpga勉強会20120519Yasuhiro Ishii
SlideSlide
SlideTakefumi MIYOSHI
自作LSIコミュニティの可能性自作LSIコミュニティの可能性
自作LSIコミュニティの可能性Junichi Akita
Prosym2012Prosym2012
Prosym2012MITSUNARI Shigeo
StackExchangeで見たシステムプログラミング案件StackExchangeで見たシステムプログラミング案件
StackExchangeで見たシステムプログラミング案件yaegashi
Zynq VIPを利用したテストベンチZynq VIPを利用したテストベンチ
Zynq VIPを利用したテストベンチMr. Vengineer

Más de ryos36

Pycairo を使ってみる その1Pycairo を使ってみる その1
Pycairo を使ってみる その1ryos36
ストーリーとはストーリーとは
ストーリーとはryos36
CNN でテニス選手の動きを解析するCNN でテニス選手の動きを解析する
CNN でテニス選手の動きを解析するryos36
Polyphony 新機能ツアーPolyphony 新機能ツアー
Polyphony 新機能ツアーryos36
Stellaris を使った組み込みアプリ開発ガイドStellaris を使った組み込みアプリ開発ガイド
Stellaris を使った組み込みアプリ開発ガイドryos36
数値計算のための Python + FPGA数値計算のための Python + FPGA
数値計算のための Python + FPGAryos36

Polyphony の行く末(2018/3/3)

Notas del editor

  1. 今日は Polyphony の行方というお題で30分話します。 最初に、自分の技術的なバックボーンを話します。 最初に購入したコンピュータは HP-41C という関数電卓、、、、で PC-9801 の初代を、、、 という話をすると2時間くらいかかるのでここははしょります。 恐らく、コンピュータと名のつくかなり広い分野にわたって関わっています。
  2. 特筆すべきことはありませんが、いわゆる組み込みシステムから、Windows から、Unix、までいろいろ経験しています。 最近では ASIC を作ることにも参加させていただきました。
  3. 一番最近の執筆は 2018 年の1月号の Ptyhon で FPGA を制御しようという記事です。 今日の内容とかぶる点も多いので、興味のある方は、ぜひ、ご購入ください。 この号は、中原先生がギネスについても書かれている号でもあります。。
  4. では今日のアジェンダです。 先頭バッターなので高位合成についても少しお話します。 その後、本題である Python による 高位合成のコンパイラである Polyphony の紹介と応用例について 最後に Polyphony の新機能と今後について お話しします。 アプリよりの話になっているのでコンパイラという意味ではちょっと物足りないかもしれません。 コンパイラ内部の技術的な資料はまた別途資料をあげますので参照してもらえればと思います。
  5. まずは高位合成って何という話からです。
  6. 簡単にいうと、プログラミング言語をコンパイルして FPGA などで動かす技術です。
  7. 高位合成友の会も第5回となりました。 友の会は、高位合成に関連する話題としてコンパイラなどの事を情報交換しましょうという 趣旨でゆる~~く存在している会です。 今回は新しい取り組みの話もありそうなので、いろんな人が、特にソフトウェアよりの人が 高位合成はよくわからないけどこんなのつくったとか、 FPGA でこんなの出来たとか、そういった話題が これもゆる~~~く、集まればと期待しています。
  8. で、そのコンパイラって何でしょうという話になりますが、 プログラミング言語を解析して構文木、AST と呼ばれたりしますが それを中間言語になおして、最後は、実行可能なコードにするというのが 大きな流れかと思います。 このとき、AST や IR という聞きなれないかもしれない略語をつかっちゃうので 敷居が高くなってしまうのですが、正直、この辺はもっと、 ゆる~~~い感じでとらえてもらえればと思います。
  9. データを、おれおれ変換で C やら Python やら Java Script に 落とせれば、まぁ、広い意味でコンパイラだと言い切りましょう。 実際、最近の AI 界隈では、この手のをコンパイラだと言い切ってしまっているように見受けられます。 まぁ、それで、とりあえずは、いいんだと思います。
  10. ということで、みなさんも機会があればコンパイラを作ってみてください。 コンパイラと言い切るのに抵抗があるなら データコンバータでもいいと思います。
  11. 高位合成ではないのですが、 特に組み込みシステムでは是非コンパイラを作ってみてください。
  12. それでは本題の Python で高位合成をするコンパイラの Polyphony について話します。
  13. Polyphony がどんなツールなのかをかいつまんでまとめると Python で書いたコードを HDL に変換するコンパイラ 動くものを早く作る 性能には“現在のところ”重きを置いていない というツールになります。 Python でというのがポイントになります。
  14. 使い方としては 「Python によるコードの記述」をし ここが重要なのですが「Python によるコードの実行」によりデバッグをしておきます そして、「Polyphony によりコンパイル」をします。 そうすると、Verilog という FPGA などで動く言語にコンパイルされるので それをまずは Windows などでソフト的にシミュレーションします。 うまく動いたら、実際の FPGA のボードで 「実行」します。
  15. そして、 Python のコードをコンパイルすると言ってもすべてのコードをコンパイルできるわけではなく、 とうぜん、print などの文字列などはサポートされておらず、Python のサブセットになっています。
  16. コンパイルというものがどんな感じなるのかをイメージしてもらうために 例をあげます。 ここでは Python の関数が verilog のモジュールにコンパイルされる例です。
  17. Python と Verilog-HDL を比較するというのも変なのですが、 なぜ高位合成が必要かというのを説明するためにちょっと比較します。 例えば a, b という変数に 3, 4 をいれて足して c という変数に代入するを考えます。 左が python で書かれたもので右が Verilog で書かれたものです。 大ざっぱに書いているので、そうじゃないだろというコメントもあるかと思いますが、 ここはその結果を単純に考えます。 Python で普通にソフトで実行すれば、左は 3+4 で 7になりますが、 ハードウェアの世界では3+4 は時間的な要素が入ってくるのでかならずしも、 その瞬間には 7 になりません。 もちろん最終的には計算なので 7 になるわけですが、時間的要素が入ってくるので ある一瞬ではハードウェアでは出力結果が不定ということがあり得るのです。
  18. Python のアプリ?で MyHDL という有名なものがあるのですが、 これも Python でハードウェアの記述が出来ます。 これをちょっと見てもらえると、わかるのですが、next という特別なキーワードを使って 時間的な記述をしています。 実はこの PPT 作成のために少し MyHDL をやってみたのですが、 難しすぎてできませんでした。 なので、このプログラムがただしいかどうかはちょっと怪しいところがあります。 印象としては SystemC ライクといえばわかる人がいるかもしれません。 これなら、私の場合 VHDL で書いた方がわかりやすく書けると思いました。
  19. その点、Polyphony であれば、Python がわかればハードウェアの世界に入っていけるので 敷居は非常に低いと思います。 時間的な考慮はプログラマはしなくてもいいようになっています。 コンパイラが自動的にスケジュールリングしてくれます。
  20. では、実際に Python で高位合成をしてどんなメリットがあるのですか?というところですが、 これは実際に後で使い方を見ていきたいと思います。
  21. 高位合成を使いやすさと性能で考えると、Polyphony は ここ数年の間、改善され、生産性の高い、立派に高位合成と言ってよいところまできました。 そして、現在は目標も性能を上げる方にシフトしています。
  22. 今後はライブラリなどを増やして、並列計算をとりわけパイプライン処理を考える際の 便利なツールになるように開発しています。
  23. それでは応用例を見ていきます。
  24. インタフェースの 2018 年1月号にも書いたものにプラスアルファして AXI lite や i2c ができるようになりました。
  25. まずは SPI ですが、雑誌に書いたように秋月の3軸加速度センサーを直接制御できます。 この図では Arty Z7 になっていますが、Lattice でも Cyclone V でも確認しています。
  26. で、コード例ですが、これは高位合成ならではで関数表現になって 分かりやすくなっていると思います。 もちろん Verilog や VHDL でも工夫すれば、関数表現は出来るのですが、 どうやっても開発時にステートマシーンを考えなくてはならなくなると思います。
  27. これは UART の例です。UART は一部、RTL で時間の制御をしています。 ボーレートとかの部分ですね。 これも Polyphony で書いてもよかったのですが、この手の Verilog はいろんなところに転がっているので そのままつかっちゃいます。
  28. これはその応用例で print_hex という形である 16bit と 8 bit のデータを UART に出しています。 現時点で文字列を直接扱えるわけではないので 非常にわかりづらいコードではあります。 でも、デバッグ時に UART に情報が出てくるのは心強いことです。
  29. これはラズパイカメラをデバッグしていた時の例ですが こんな感じで表示してくれるので、数字だけでも、デバッグに大変役に立ちます。
  30. これは AXI Lite の master の例です。
  31. コード例は、組み込みでよくみるような、レジスタのアドレスと書き込みデータの羅列になっています。 AXI lite の Master の記述が出来るので、極端な話、CPU なしで動作可能なシステムが作れてしまいます。 ツールにもよるのですが、ハードとソフトの IDE を行ったり来たりする必要がなくなります。
  32. これが I2C でラズパイカメラをアクセスしたときの回路とその様子です。 実際には iobuf が必要だったのでそこは verilog で外付けです。 この verilog の記述は FPGA の部屋を参考しました。 いつも参照させていただいています。どうもありがとうございます。
  33. コードの例ですが、Python で初期化の関数を書いて、 あとは配列、正確には Python ではリストですが、 それを読み込んで順次初期化します。 ここでは mode7 の初期化していますが、これは、配列を差し替えれば、別のモードの初期化が出来ます。 ちょっとだけ付け加えると、現時点では配列は HDL に埋め込みなので、毎回、合成をする必要があります。 将来的には合成無しでブロックラムのデータ入れ替えだけで出来るようにしたいとは思っています。
  34. さて、Polyphony の利点について再度、2つの視点から見てみます。 今回は応用例を通して、1の利便性についての述べてきました。 今後は FPGA の性能を出し切るという方向になると思います。 つまり、今後は性能への挑戦をしていきます。 それを踏まえたうえで、幾つか機能を紹介しつたいとおもいます。
  35. Tuple という構造体みたいなものを
  36. こんな感じで2つの値を返すことが出来ます。ハードウェアの記述に有効そうな予感のする文法です。
  37. 以前にも報告しましたが、import 文に部分対応しました。 ディレクトリはまだ読めてませんが、これで既存の再利用が出来るようになりました。
  38. Unroll も出来るようになりました。これは性能向上に一役買うと思います。
  39. Pipeline もサポートしました。Unroll しながらの複合的な pipeline も可能です。
  40. パタヘネを実現するとなると重要なのがキャッシュとパイプラインになります。なかなか難しいのですが、チャレンジしていきたいと思っています。
  41. 今後性能向上を目指していくうえで、II=2 以上のパイプラインであったり、 同時性の記述方法であったり、 Verilog との連携をするようにしていきます。 Verilog の 簡単Parser はすでにできています。
  42. 最後に高位合成の共通課題をあげておきます。 一つはインタフェースです。 Verilog で記述したプロトコルはクロック単位の動作が記述できます。 それに対応しようと思うと同時性の記述であったり、クロック単位の動作の保証が必要です。 しかし、それは直感的にわかりやすい記述と相反します。 またビットの柔軟性を考えたとき、ビットというハードウェア的な考えと int などの抽象的な型は相反します。 Python3 では特に数字が 32bit や 64bit であるという区切りではなく抽象度が上がっているため それとの整合性を保つのが難しい問題です。
  43. 最後にちょっとした妄想を書いておきます。コンストラクタに class を引き渡せると、 汎用性がぐっと上がって楽しくなりそうです。 内部的には Lambda は達成しているので可能だと思っています。
  44. AXI Stream への対応はしたいと思っています。 これを達成して、 FPGA の帯域を使い切るといったことが容易にできるようにと思っています。
  45. それでは本日の発表を終わりにします。 Polyphony を今後ともよろしくお願いします。