#はじめに
フィボナッチを求める回路をVHDLとMessagePack-RPCでFPGAに実装してみた(ZYNQ編)で作ったFibnacci_Server をVivadoを使って単体でシミュレーションする方法について示します。
#用意するもの
- Xilinx Vivado 2015.3
- Ruby 1.9.3 以降
- Dummy_Plug 1.6.0
Dummy_Plug は AXI4/AXI4-Stream のBFM(バスファンクションモデル)ライブラリです。
#ブロック図
AXI4_Stream_Master_Player、AXI4_Stream_Slave_PlayerはYAML形式のシナリオファイルを読み込んでAXI4-Stream I/F信号の入出力を行うためのDummy_Plugライブラリのコンポーネントです。
#手順
##リポジトリと各submodule をダウンロード
shell% git clone git://github.com/ikwzm/msgpack-vhdl-examples.git
shell% cd msgpack-vhdl-examples
shell% git submodule init
shell% git submodule update
##テストシナリオの作成
AXI4_Stream_Master_PlayerおよびAXI4_Stream_Slave_Player用のテストシナリオを作ります。
shell% cd examples/fibonacci/src/test/scenarios
shell% ruby test_1.rb
test_1.rb はテストシナリオ(YAML形式)を生成するためのrubyスクリプトです。
##Vivado プロジェクトの作成
Vivado プロジェクトを作成するためのTclファイル(create_project.tcl)を用意しています。
Vivadoを起動して次のメニューからTclファイルを実行してください。
Vivado > Tools > Run Tcl Script... > examples/fibonacci/sim/vivado/vhdl/create_project.tcl
##シミュレーションを実行
Vivado プロジェクトを開き、次のようにシミュレーションを実行してください。
Vivado > Flow > Run Simulation > Run Behavioral Simulation
参考までに、実行したときに波形の一部を以下に示します。
クロックの周波数は100MHzです。
fib(42)を実行するのに、MessagePack-RPCのシリアライズとデシリアライズを含めないFIB単体では430nsec((42+1)×10nsec)、MessagePack-RPCのシリアライズとデシリアライズを含めて650nsec(420nsec+13×10nsec)、かかっていることがわかります。
#参照
MessagePack for VHDL (https://github.com/ikwzm/msgpack-vhdl)
MessagePack for VHDL Examples (https://github.com/ikwzm/msgpack-vhdl-examples)
MessagePack-RPCを使ってFPGAを制御
フィボナッチを求める回路をVHDLとMessagePack-RPCでFPGAに実装してみた(ZYNQ編)