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 を吐き出すコンパイラだ。折角なのでロゴも作った。
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 も気になる。