FPGAでコンピュータ将棋を作る(3)
なんか寝て起きたら頭のなかにコンパイラのコードが詰まっていたので数時間かけて書き出した。一応は、Cライク言語から VHDL/C#コードが生成できるようにはなった。
早速サンプルとしてCRCエンコーダを書いたのでこのエントリの下のほうにつけておく。(実はまだ一部未実装なのでこのコードはまだコンパイルできない。)
私の好みとして、caseのbreakを不要にしたり、case 8..15 : のように定数範囲を指定できるようにしたり、a = if (x==3) 0 else 1; のように式ifを書けるようにしたり細かな拡張をしているのだが、こういう拡張をするとVisualC#でコードを書いたときにことごとくエラー表示されて気分が悪い。
せめて見かけだけでもC#風にして、VisualC#のソースエディタ上でエラー表示が出ないようにしたい。しかし、そうするとどんどん言語が冗長になってくる。これでは、VHDLと比べてそれほどすっきり、というわけでもない。
パソコンの上で高速にシミュレートできるというのが唯一の利点だが、それならVHDL→Cのトランスレータを書いたほうがよっぽど役に立つのではないだろうか。そもそも、世間のVHDL用のシミュレータが何故そんなに遅いのかと言うとよほど手抜き余計な機能をごてごてつけているからではなかろうか。単にCのコードに変換して実行するだけならかなり高速だと思う。
しかし、いま作っているコンピュータ将棋で、そんな高速なVHDLのシミュレーションが必要かと言うと、VHDLのソースを書くのは最終段階で、直前までは自作の「コンピュータ将棋開発用統合環境」で開発するのでVHDLのシミュレーションが遅かろうがそんなことは知ったこっちゃないのである。
VHDL→Cのトランスレータを書く手間 >>>> (越えられない壁) >>>>> VHDLのソースを直接デバッグする手間
なので何をやっているかよくわからないことになってくるので、コンパイラ作成遊びはこれくらいにしといて、「コンピュータ将棋開発用統合環境」作りに戻るのである。
以下、ここで作成した言語で書いたCRCエンコーダのソース*1とこの言語の仕様。
続きを読む