!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でうまく動くことも確認.