JavaとPythonでFPGA回路設計をするための開発環境作ったよ

どうも,まるさ@maruuusa83です.

ひさしぶりに真面目に技術っぽい記事かきます.




現在ぼくは,コンピュータ・アーキテクチャあたりの単語をキーワードとしている研究室で活動をしています.

もともとずっとソフトやってたのでヒーヒー言ってます.

高位合成(HLS, High Level Synthesis)という技術がホットだそうで,色々あってツールを統合するツールを作りました.










PyJer: JavaPythonでサクッとZedBoardアプリを設計するよ!なフレームワーク

github.com


Java言語ベースの高位合成ツールSynthesijerPythonベースのIPコア合成フレームワークPyCoRAMを組み合わせていい感じにサクッとZynqアプリがつくれます.

まだREADME雑にしか作ってないですがご勘弁を.


今回作ったフレームワーク嬉しいところは,JavaPythonでロジックを書いたらあとはBOOT.binの生成まで勝手にやってくれるところです.

ぼくはこいつをGitlab CIに食わせてDropboxに出来上がったBOOT.binを投げ込んでくれるようにしています.

OS載せたZynqを想定しているので,ビルドをフックさせて自動デプロイまでできると思います.




github.com

github.com










どんなもの?

次のようなアーキテクチャのハードウェアの構築のためのフレームワークです.


f:id:maruuusa83:20160630124507p:plain

ハードウェアの概略構成


このような構成に限定しているために,BOOT.binの生成まで勝手にやってくれます.


赤枠が自分で実装することになる部分です.

IoTデバイスのような,外部回路(センサなど)からデータを受け取ってインターネットへ出力するデバイスの プロトタイピングのためのツールとして作成しました.


User Logicの領域は主にJava言語のフツーのプログラムとして記述します.

Synthesijerを用いた高位合成によってハードウェアが合成されます.

ぼくは外部回路との通信などクロックレベルのタイミング管理が必要な部分はVerilogで書いてJava側から呼び出しています.


PSとPLの間のデータ共有は,PyCoRAMが生成するCoRAMアーキテクチャを使って行ないます.

そのため,Data Flow ControllerPythonによって記述することになります.


User Logicで処理したデータはDRAMに転送できるので,Linux上のプログラムから自由にデータを使うことができます.










つかいかた

(v0.2.1時点での使い方です.この後変更の予定があります.詳細な使い方はまた別にまとめます.)


1.前提



2.導入

とりあえずGithubからcloneしてきます.

cloneが済んだらmake initしてみてください.

このコマンドでSynthesijerとPyCoRAMがプロジェクト内にクローンされます.


いちおう,make testというコマンドを用意しています.サンプルプロジェクトを展開してビルドしてcleanするというもので, きちんと導入できているか確認するのに使えます.が,マシン次第でとても時間がかかることがあるので注意してください.



3.ハードウェアの開発

テスト用に作ったサンプルプロジェクトがtestディレクトリ内にあります.

testフォルダをルートに読み替えた感じでコードを配置することになります.

すなわち,

  • Synthesijer関連:プロジェクトルート直下
  • PyCoRAM関連:pycoram直下
  • Vivado関連:vivado-autobuilder下

となります.

シンプルなプロジェクトならば,PyCoRAM周りはtestのプロジェクトをコピペで作るのが楽かと思います.



4.ビルド

ルート直下のMakefileの最初のほうに設定項目があります.

  • TOP:Synthesijerのトップモジュールのファイル名
  • MODULES:Synthesijerで書いたモジュールのファイル名一覧
  • WRAPPERS:Verilogコードを使っている場合,SynthesijerによるそのWrapperのファイル名一覧
  • VERILOG_MODULES:Verilogで記述したモジュールのファイル名一覧


たとえば,testプロジェクトだと次のような記述になります.

TOP=SumTestTop.java
MODULES=SumTest.java Dummy.java
WRAPPERS=
VERILOG_MODULES=


PyCoRAM関連のソースコードのファイル名はtestプロジェクトと同様にしていれば特に設定の必要はありません.

もし必要があれば,Makefileのマクロを書き換えてください.



開発途中,Javaの合成だけしたい!とかそういう場合はsynthesijer_buildpycoram_buildなどの makeコマンドを使うとよいです.










さいごに

PyJerではJavaPythonで簡単なヘテロジニアスなプロセッシング環境のプロトタイピングができます.

複数のセンサやモータを取り回すようなものづくりに使えるように書いてみました.

サクッと書けてCIも回せるので良い感じだったと思います.(締めが雑)


Synthesijerの三好さん,PyCoRAMの高前田さん,お世話になりました.ありがとうございます!






というわけで,ツールを書いたお話でした.


それでは,今回はこの辺で ノ

まるさ