SynverllとはSynthesis for Verilog HDL usig LLVMの略で、「シンバール」と呼びます。 SynverllはC言語で記述されたソースコードをLLVMを使用して、Verilog HDLを出力する高位合成処理アプリです。 石原ひでみが趣味で作成しています。
Synverllはオープンソースで自由に改変を行ってもらってかまいません。 もし、本家(一応、ここが本家ね)よりも良い物ができたら僕に使わせて下さい。
まだ、説明文が少ないのでこれから追加していきます。
自分が使える言語で楽して回路を作りたいために開発している高位合成処理です。 気に入らないVerilog HDLが出力されれば、使えるところは使って、そこだけ置き換えてしまえばええやん!がコンセプトです。
そして、「関数=モジュール」を基本としています。
ソースコード全部を最適化かけてしまうと、インライン展開とかされるかもしれません。 そうなると、中身がなんだかわからなくなる=Verilog HDLを修正できなくなる。 それは嫌っ! だから、関数=モジュールにしています。
Synverllは単純にC言語ソースコードをVerilog HDLに変換するだけだと思って下さい。 最適化はそれなりに行っていますが、これぞ、ハードウェアの醍醐味!って、いうようなパイプライン化とか行っていないので速くなりません。 順次処理をVerilog HDLで書くより、C言語で書けば楽だよねぐらいだと思ってくださいませ。
Synverllは大きなソフトウェアを処理するよりも、小粒のソフトウェアを処理するのが良いのかもしれません。
基本、MITライセンスとします。 何事にも責任は取りませんのでご自由に裁いて下さい。
SynverllはLLVM(clang)を使用するので、実行する前にLLVMをインストールして下さい。
Ubuntuの場合、次のようにLLVMをインストールして下さい。
% sudo apt-get install llvm clang
% git clone git://github.com/aquaxis/synverll.git % cd synverll % make
% ./synverll C言語ファイル名 トップモジュール名
問題なくC言語を解けると、次のようなファイルを生成します。
トップモジュール名.v: モジュールの最上位階層(Verilog HDL) 関数名.v: 各関数のモジュール(Verilog HDL) memory_map.txt: メモリーマップ
トップモジュールに接続する上位階層を作成しなければなりません。 (ごめんなさい、作成するのをサボってます)
Synverllは32bitCPUで実行されるプログラムを想定して処理を行います。 Synverllは次のように処理をしています。
ソースコードの中で使用されるメモリは一元管理になります。
2015/10/24 Release