Diary/2013-4-24
ghdlを使う
FreeHDLを使おうとしたこともあったけど,
結局,VHDLで書いたモジュールは,ISimでシミュレーションしてました.
...とはいえCUI環境で手軽にシミュレーションできると嬉しいなあと
気になっていたGHDLを試すことに.
とりあえず,↓なパス構成でシミュレーションしてみる.
./for_test_test_sim.VHD ./for_test_test.vhd ./for_test.vhd
コンパイルして
ghdl -a --ieee=synopsys for_test_test_sim.VHD for_test_test.vhd for_test.vhd
シミュレーション
ghdl -r --ieee=synopsys for_test_test_sim --vcd=out.vcd
シミュレーションの終了を書いていなければ,適当なタイミングでCtrl-Cで止める
シミュレーション結果はGtkWaveで確認できる.
ちなみに,for_test.vhdは,Javaからコンパイルしたもの.
他のパスのモジュールも使えるかテスト.
./sumsim_sim.VHD ./sumsim.vhd ./sum.vhd ../vhdl/simpledualportram.vhd
コンパイルして
ghdl -a --ieee=synopsys sumsim_sim.VHD sumsim.vhd sum.vhd ../vhdl/simpledualportram.vhd
...エラーだ.
../vhdl/simpledualportram.vhd:32:30: operator "=" is overloaded ../vhdl/simpledualportram.vhd:32:30: possible interpretations are: ../../../../libraries/synopsys/std_logic_unsigned.vhdl:64:14: function "=" [std_logic_vector, std_logic_vector return boolean] ../../../../libraries/ieee/std_logic_1164.v93:69:10: implicit function "=" [std_logic_vector, std_logic_vector return boolean] ../vhdl/simpledualportram.vhd:32:30: (you may like to use the -fexplicit option)
http://ghdl.free.fr/site/uploads/Main/ghdl_user_guide/IEEE-library-pitfalls.html
によると,要はsimpledualportram.vhdで使っているieee.std_logic_unsigned.allの代わりに
ieee.numeric_std.allを使え,ということらしいので書き換え.
関連して,
RAM(conv_integer(waddr)) <= wdata;
としていたところを
RAM(to_integer(unsigned(waddr))) <= wdata;
に書き換え.
コンパイルして
ghdl -a --ieee=synopsys sumsim_sim.VHD sumsim.vhd sum.vhd ../vhdl/simpledualportram.vhd
シミュレーション
ghdl -r --ieee=synopsys sumsim_sim --vcd=out.vcd
今度は成功♪
ieee.numeric_std.allを使うよう修正したsimpledualportramが
FPGAでうまく動くことも確認.