Verilog
FPGA

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