トップ 差分 一覧 Farm ソース 検索 ヘルプ PDF RSS ログイン

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