Posted at

ZUMA-FPGA~FPGAにオープンソースで動作する自作FPGAを実装してみよう~

More than 3 years have passed since last update.

近年SW開発者の間でFPGAを用いた開発が盛んになっていますが、

・既存のFPGA(Xilinx, Altera, Lattice, etc...)に応じて開発スタイルを変える必要がある

・様々なベンダのツールアップデートに追従するための勉強に時間がとられる

といった問題があります。

そこで、自作でFPGAを作ってみようと思う人はいないでしょうか?

参考文献[1]や[2]の通り

・自作のFPGAのアーキテクチャを簡単に探索する環境が整ってきた

・オープンソースのFPGA論理合成、配置配線ツールが整ってきた

といった状況変化により、近年ますます簡単にオリジナルのFPGAを作れるようになりました。

そこで本投稿ではFPGAにFPGAを簡単に実装できるZUMA-FPGAの環境導入方法をレクチャーいたします。

■手順

1.VTRの入手

$ git clone https://github.com/verilog-to-routing/vtr-verilog-to-routing

2.ZUMA環境の入手

$ git clone https://github.com/adbrant/zuma-fpga/

3.VTRのコンパイル

$ cd {VTRのディレクトリ}

$ make

これにてオープンソースで動作する論理合成・配置配線ツールの環境が整いました。

まだあまり調査が進んでおりませんがツールとしては下記があるようです。

・ODIN-II: Verilogエラボレータ

 verilog をネットリストへ変換

・ABC: 最適化&テクノロジマッパ

 ネットリストの最適化

・VPR: 配置配線

 ルーティング情報ファイルの出力

4.ZUMAディレクトリ内toolpathのパスの変更

$ cd {ZUMAのディレクトリ}

$ vi toolpath

ツールパスを修正

5.ZUMAディレクトリexampleにてcompile.shの実行

$ vi zuma_config.py

にて

params.vpr7 = True

に変更

$ vi ../source/InitFpga.py

にて

l.161 line = fh.readline() # read edges

l.162 if 'name' in line: <- 追加

l.163 line = fh.readline() <- 追加

l.164 nums _ re.findall(r'\d+', line)


の修正

$ ./compile.sh

ZUMAにてルーティング情報ファイルを読み込み自作FPGA向けのビットファイル .hex が生成されると思います。


おそらくZUMA環境では

・FPGAに自作のFPGA動作環境とファイル一式

・ルーティング情報からビットファイルを生成するための環境

を提供しているものと思われます。

そのためZUMA環境、および自作のFPGAのアーキテクチヤの修正により自作FPGAを比較的短時間で作っていくことが可能だと思われます。

■参考文献

[1]http://www.ece.ubc.ca/~lemieux/publications/brant-fccm2012.pdf

[2]http://www.users.miamioh.edu/jamiespa/html_papers/fpga_12.pdf