WindowsでSynthesijerのsample/benchを試す

Synthesijerのサンプルに含まれているsample/bench以下には、素数を並べるサンプル(Prime.java)、ソートのサンプル(BubbleSort, MergeSort)が入っています。

このサンプルをWindows(Cygwin環境)で試してみました。

前提

注意 SYNTHESIJERのパスはcygwinでなく、Windowsでたどれる必要があります。相対パスで指定するのが問題に遭遇しにくいです。

準備

Windows版のGHDLバイナリをインストールする

https://www.youtube.com/watch?v=8YOWdvW_IAc を参考に、Downloading GHDLをダウンロードしてインストール。
Cygwinから呼び出せるように下記のようにして実行パスに追加。

export PATH=/cygdrive/c/Program\ Files\ \(x86\)/Ghdl/bin:$PATH

Windows版のGtkWaveバイナリをインストールする

GtkWaveからgtkwave-3.3.64-bin-win32.zipをダウンロード。こちらは展開するだけ。私の場合は展開したファイル一式を~/Applications/に移動して、

export PATH=~/Applications/gtkwave-3.3.64-bin-win32/gtkwave/bin:$PATH

とパスを通しました。

HDLライブラリの追加

これらのサンプルではコード内部で配列を使っています。Makefileでは、相対パス

../../lib/vhdl/dualportram.vhd

なパスに配列に相当するメモリのHDLコードを必要とします。これは、Synthesijerのダウンロードページのsynthesijer_lib_20141124.zipに含まれています。ダウンロードして展開、synthesijer_lib_20141124ディレクトリをlibという名前で、synthesijer_samples_20141124と同じ階層に移動してください。

実行

準備が終わったら、makeしてシミュレーション、結果を確認すればOKです。
まずは一式をコンパイル

cd synthesijer_samples_20141124/bench
make
make ghdl32

-eオプションで実行バイナリができるはずだけど、作成されなかったので-rオプションでシミュレーションする。たとえば、次のように。結構時間がかかります。

ghdl -r primesim_top --wave=primesim_top.ghw

次のようなメッセージでシミュレーションが終われば、正常終了です。

primesim_top.vhd:109:8:@48823280ns:(assertion failure): Simulation End!
C:\Program Files (x86)\Ghdl\bin\ghdl.exe:error: assertion failed
C:\Program Files (x86)\Ghdl\bin\ghdl.exe:error: simulation failed

gtkwaveで結果を確認してみましょう。

gtkwave primesim_top.ghw
primesim

実際に計算しているtestの内部変数をみてみると65521が求められていることがわかります。

makeについて補足

ちなみに、この例では問題なくmakeできますが、java -cp に続くクラスパスの区切り文字がUnix系では:、Windowsでは;という違いがあり、Synthesijerでコンパイルするときに複数のクラスパスの指定が必要な場合には注意する必要があります。次のリリースバージョンではMakefile.cygwinを用意する予定です。

注意

リンク先のバイナリが不安という方はご自身でコンパイルするなどの対策をしてください。責任は取れませんので…

Synthesijer-2.0

Synthesijerで浮動小数点数演算への対応をはじめとした大きな改変を行ったバージョン2.0の開発をはじめ,一段落しましたので,バイナリパッケージにまとめました.

http://sourceforge.net/projects/synthesijer/files/synthesijer-2.0/

からダウンロードできます.

このバージョンでは,VHDL/Verilog HDLの生成をオプションで選択するように変更されています.VHDLコードを生成する場合には--vhdlを,Verilog HDLコードを生成する場合には--verilogを指定します.オプションを指定しない場合にはデフォルトでVHDLコードが生成されます.また,両方指定することもできます.

内部の合成方式の大幅な変更に伴って,最適化器の適用をすべてキャンセルしているので,とても賢くないコードが生成されますが,少しずつ最適化器の実装がすすめられています.

SynthesijerでDE0nanoにWIZ830MJを接続してみた

とある親切な方に,WIZ830MJをわけていただいたので,DE0-nanoに接続してみました.

IMG_0004

WIZ830MJに載っているW5300は,制御/ステータスレジスタやパケット格納メモリがメモリアドレス空間にマッピングされた,プロセッサとの親和性が高いインターフェースを持っています.

正当なAlteraユーザであれば,おそらくNios IIにぶらさげるところなのでしょうが,まずは,(私にとって)てっとり早くSynthesijerで制御回路を書いてみました.

続きを読む

Synthesijer-20141031

Synthsijer 2014.10.31版のバイナリパッケージを用意しました.細かなバグフィクスが中心ですが,2014.09.23版からの一つ大きな変更としてコマンドライン引数が追加されています.

これまでは,実行するとJavaからVHDLとVerilogの両方を生成していたのですが,生成したファイルをISEやVivado,Quartusのプロジェクトに追加する際の選択が面倒だという声をいただきました.

そこで,次のようにオプションで生成するHDLコードを選択できるようにしました.

VHDLファイルを生成する場合,

java -cp Synthsijer.Main --vhdl Javaファイル

Verilog HDLファイルを生成する場合,

java -cp Synthsijer.Main --verilog Javaファイル

--vhdl--verilogの両方を選択することもできます.

なお,オプションを指定しない場合にはVHDLファイルを生成します.

Synthesijer.scala の大きな変更

Synthesijer.scalaの演算系を大幅に変更しました.従来は,たとえば,カウンタのインクリメントを

counter <= expr(Op.+, counter, 1)

などと不細工に記述する必要があったのですが,

counter <= counter + 1

と,すっきり記述できるようになりました.

今後は,ユーザとして記述するSynthesijer.scalaコードでは,exprメソッドの呼び出しは禁止されるようになります.

また,都合上,定数を利用したい場合に,これまでは,

 new Value(10, 32)

と作成していたのですが,これからはModule.scalaで定義されているvalueメソッドを使って

 value(10, 32)

とするように変更されました.

この変更は,今までのバージョンとの互換性がありません.従来通りexprを自分で呼び出して式を組み立てたい場合には引き続き0.1を利用してください.

新しく始める方は最新版のバイナリパッケージ0.2.1または,Gitからソースコードをcloneしてご利用ください.

RGBTest: サインカーブを描いてみる

SynthesijerでAXIたたいてみたよ,なサンプルです

hdmi_test

DSForum2014やESS2014で紹介させていただいた,InreviumのZynqボードTD-7Z-020-EMCを使って,HDMIディスプレイにサインカーブの出力をしてみたサンプルです.サインカーブを描くというのがやりたいことではなくて,”AXI-HP経由でDDRメモリにアクセスするモジュール”を”Synthesijerを使ってJavaで書いた”というのをご覧いただければ,と思っています.

生成したVHDLを含むVivadoプロジェクトのアーカイブをhttp://www.wasa-labo.com/zynq_test_20141023.zipにまとめています.

続きを読む

DSForum 2014で発表させていただきました

Design Solution Forumにて”オープンソース高位合成処理系 Synthesijer”とういタイトルで発表させていただきました.

内容は,Synthesijerを使った開発のイメージと,どういうつもりでSynthesijerを開発しているか,というものを盛り込んだものになっています.

発表資料は,http://www.dsforum.jp/materials/ からダウンロードできるようです.

例題としては,東京エレクトロンデバイスのZynq評価ボードを使った画像表示回路として,位相の違うsinカーブを描く回路(Javaコード)を紹介してみました.関連リソースは少し整理をして10月末までには公開したいと計画中です.

hdmi_test

リコンフィギャラブル研究会で発表させていただきました

“企業における”という発表をさせていただくのは大変おこがましいのですが,
せっかく機会をいただけましたので,
イーツリーズ・ジャパンでのアプリケーション開発の事例紹介と
開発に際して開発コストを削減する取り組みについて紹介させていただきました.
後半1/3〜1/4くらいがSynthesijerとSynthesijer.scalaの話です.


FPGAにBrainF**kインタプリタを実装する話

+-><[].の羅列によるプログラミング言語BrainF**kは,使うには苦労しますが,実装するのは簡単です.

というわけで(?),Synthesijerのサンプルとして同梱されている実装の試し方を紹介します.このサンプルは同じソフトウェア(BarinF**kインタプリタのカーネル)がPCでもFPGAでも同じように動作する事例です.

続きを読む