トップ 一覧 Farm 検索 ヘルプ 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でうまく動くことも確認.