aquaxis / synverll

MIT License
14 stars 0 forks source link

Synverll

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のビルド

SynverllはLLVM(clang)を使用するので、実行する前にLLVMをインストールして下さい。

Ubuntuの場合、次のようにLLVMをインストールして下さい。

% sudo apt-get install llvm clang

% git clone git://github.com/aquaxis/synverll.git % cd synverll % make

Synverllの実行

% ./synverll C言語ファイル名 トップモジュール名

問題なくC言語を解けると、次のようなファイルを生成します。

トップモジュール名.v: モジュールの最上位階層(Verilog HDL) 関数名.v: 各関数のモジュール(Verilog HDL) memory_map.txt: メモリーマップ

トップモジュールに接続する上位階層を作成しなければなりません。 (ごめんなさい、作成するのをサボってます)

どんな風に処理してるの?

Synverllは32bitCPUで実行されるプログラムを想定して処理を行います。 Synverllは次のように処理をしています。

  1. 元のC言語ソースコードを関数単位に分離
  2. LLVMでLLVM-IRを出力
  3. LLVM-IRを愚直にVerilog HDL化

ソースコードの中で使用されるメモリは一元管理になります。

将来対応したいこと

バージョン情報

0.01

2015/10/24 Release