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

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

どんなコンパイラを目指すのか?

fucc も使えるようになった。勉強という意味では LR と ANTLR(これは LL か) も勉強しなければならにだろうが、LL(1) がわかっていれば実用上差し支えなさそう。さて、いつまでも電卓を作っているわけにはいかないのでコンパイラを作ろうという話になる。

最終目標はマクロを使ったHDL設計とそのライブラリの充実だ。そのとき、ステートマシン(FSM)を容易に作ることが出来ることが望ましい。FSMを達成するのにライブラリを充実させる方法もあるがステートマシンコンパイラという手もある。C++ ならライブラリなんだろうけど、今回は Lisp だ。Lisp だとマクロなのかな、、、この辺は手探りだ。

  1. HDL 用言語(マクロ、FSM、ライブラリの充実)
  2. VHDL コンパイラ
  3. ブール演算用言語・コンパイラ
  4. 波形記述言語
  5. 波形シミュレータ

というものをつくっていく。波形シミュレータはある程度出来た。しかし、vcd に対応していない。verilogVHDL で波形をシミュレートするものを書くのはかなりしんどい気がする。やはり波形を書こうと思うと時間軸と同時性を表現できないといけない。GUI の方が直感的ではある。GUI がしっかりしていれば形式は VHDL でも verilog でもどうでもいいのか?波形記述言語があったほうが楽なのかこれは今後の課題だ。ブール演算用言語は verilog のプリミティブがすでにそれだ。これをすでに作った波形シミュレータが読める形に変換してやるコンパイラを作る。可能であれば edif を読んだり、生成したりする機能も欲しいところだ。ブール演算を数式で捉え式の置き換えをして最適化できるような昨日もあるといいかもしれない。VHDL コンパイラはつくるのはしんどいかもしれない。まだ verilog の方がやさしそう。基本的にはあるパターンが来たらあるパターンに変換してやるというのの繰り返しだ。VHDL を素から構文解析するのは大変なので lisp 風にアレンジしたものがベターだ。verilog では verilisp というものがすでにある。

最終的な目標は新たな HDL 言語の生成だ。マクロが使えること。そして FSM を容易に表現できること。シミュレートが容易なこと。新しい言語により HDL の生産性を一気に今の10倍に上げる。そして、言語のベースは常に lisp だ。なぜか?lisp 自身が可読性が高い言語とは言えないので、lisp で書けばそれ自体が一種の敷居になるから。そうするとまったく流行らない言語になることは目に見えている。lisp から逆に一般的な(?)言語に落とす必要はあるかもしれない。そうすると、マクロを捨て去ることになる。その言語の生産性は既存の言語よりはいいが lisp 程ではないという言語になるだろう。

日本語で書いてもあまり注目されないと思うので英語でサポートページとかをつくって書いていくようにでもしよう。目指す市場はワールドワイドだ。