新千葉 ガーベージ・コレクション

FPGA マガジンやインターフェースで書けなかったこと等をちょぼちょぼ書いてます。@ryos36

Polyphony : Python によるコンパイラ

GitHub - ktok07b6/polyphony: Polyphony is Python based High-Level Synthesis compiler.

とりあえず本家から fork してみる。っていうか、本家って言っても隣で K 君が開発してるんだけどね。

なにやら SSA Book なるものを読んでいて、開発の時なんだかすごく怪しい(これかな?http://ssabook.gforge.inria.fr/latest/book.pdf)。妙なオーラが立っている。


Polyphony は Python の文法を解析する機構を使って verilog を吐き出すコンパイラだ。折角なのでロゴも作った。

f:id:ryos36:20161118235020p:plain

Python のコードを解析するたびに visitor がよばれ、そこでアクションを書いていくという方式。XML でもそういうのあったなぁ。まぁ、その辺の仕組みは Sythesijer と似ている。いろいろ対応して(たとえばクラスに対応している!!)いて、だいぶ充実してきている。そろそろ製品化だね。

ということで、わたしも Lisp なんてやってないで(うぐ)、Python をやることにした。OCaml やりたかったけど、それは後回しになった(会社の方針として、、、、)。とはいえ、Python は初心者だぜ。

ざっくりソースも読んだ。あくまでざっくり。Polyphony はつぎのことをやっている

  • Python のコードを IR の tree に変換(IR は Tiger book を参考にしているそうだ)
  • IR の tree をいじって最適化
  • IR を AHDL に変換。AHDL は独自中間言語
  • AHDL を verilog に変換

普通のコンパイラと違うところはレジスタのスピルとかがない。スケジュールして同時に実行することを考慮している。というところか。

そして、この間、Python の勉強をしていて Decorator というのを覚えた。ん?これでマクロ作れるんじゃないか?

関係ないけど pico-8 も気になる。