FREEのVHDLコンパイラGHDL



http://ghdl.free.fr/gcc を使った VHDL コンパイラ/シミュレータ の GHDL がありました。i686-pcアーキテクチャLinux 上で動作とあります。

makeファイルを auto-generate した後、回路のビルドに make も使えるようです。さらに SDF(2.1)ファイルも読めるようですね。

一方 Verilog は、http://www.icarus.com/eda/verilog/ に Icarus Verilog があります。結構使っている方も多いようです。

まずは VHDL compiler/simulaterの GHDL(http://ghdl.free.fr/)の報告に入ります。サイト覗いてみたら昨日2/26に0.17がリリースされていました。


moto@roadster:~$ cd /tmp
moto@roadster:/tmp$ wget http://ghdl.free.fr/ghdl-0.17-i686-pc-linux.tar
moto@roadster:/tmp$ tar xvf ghdl-0.17-i686-pc-linux.tar
moto@roadster:/tmp$ cd ghdl-0.17-i686-pc-linux
moto@roadster:/tmp/ghdl-0.17-i686-pc-linux$ bunzip2 ghdl-0.17-i686-pc-linux.tar.bz2
moto@roadster:/tmp/ghdl-0.17-i686-pc-linux$ su
# tar -C / -xvf ghdl-0.17-i686-pc-linux.tar

こんな感じでバイナリーパッケージをダウンロード後インストールします。インストールできたら versionを確認してみます。


moto@roadster:~/ghdl/sim$ ghdl -v
GHDL 0.17 (20050226) [Sokcho edition]
(Use the GCC back-end.)
Written by Tristan Gingold.

Copyright (C) 2003, 2004, 2005 Tristan Gingold.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
moto@roadster:~/ghdl/sim$

はい、最新です。^^v

VHDLシミュレーションのために、簡単な記述を用意しましてみました。

基本的な構成と思われる、

  1. 定数パッケージの test_pack.vhd
  2. 本体の counter.vhd
  3. テストベンチの bench.vhd

の三本です。


moto@roadster:~/ghdl/sim$
moto@roadster:~/ghdl/sim$ ls -l ../src
合計 20
-rw-r--r-- 1 moto users 5889 2月 26日 14:03 bench.vhd
-rw-r--r-- 1 moto users 1175 2月 26日 14:06 counter.vhd
-rw-r--r-- 1 moto users 418 2月 26日 17:09 test_pack.vhd
moto@roadster:~/ghdl/sim$

まず適当なディレクトリ下で、オブジェクト等を格納する work ディレクトリを

作っておきます。


moto@roadster:~/ghdl/sim$ mkdir work

ではさっそくコンパイル。オプションは -a でアナライズと呼ぶようです。

後のオプションは--ieeeがsynopsysを使う(そのままですね) -gはエラー行を報告、--workdirはwork指定です。


moto@roadster:~/ghdl/sim$ ghdl -a --ieee=synopsys -g --workdir=work ../src/test_pack.vhd
moto@roadster:~/ghdl/sim$ ghdl -a --ieee=synopsys -g --workdir=work ../src/counter.vhd
moto@roadster:~/ghdl/sim$ ghdl -a --ieee=synopsys -g --workdir=work ../src/bench.vhd
moto@roadster:~/ghdl/sim$

このコンパイラには一ヶ所癖があって、if の評価式は以下のようにする必要がありました。もちろんこのように変更しても、modelsim等のコンパイラでも実行可能です。

signal main_timer : std_logic_vector(5 downto 0);

として、

if(main_timer < "111111")then

こういう書式は

if ieee.std_logic_unsigned."<" (main_timer, "111111") then

にしてやる必要がありました。

既存の記述をコンパイルするなら、Perlあたりで一括変換してやればよさそうですね。

そして、結合して回路を実行形式にします。これはエラボレートと呼ぶようです。


moto@roadster:~/ghdl/sim$ ghdl -e --ieee=synopsys --workdir=work bench
moto@roadster:~/ghdl/sim$ ls -l bench
-rwxr-xr-x 1 moto users 559934 2月 27日 12:09 bench*

これでできました。あとはシミュレーションの実行です。コマンドライン


moto@roadster:~/ghdl/sim$ ./bench --stop-time=2000ns --vcd=aa.vcd
../../../src/synopsys/std_logic_arith.vhdl:255:20:(assertion warning):
There is an 'U'|'X'|'W'|'Z'|'-' in an arithmetic operand, the result will be 'X'(es).
./bench:info: simulation stopped by --stop-time
moto@roadster:~/ghdl/sim$ ls -l aa.vcd
-rw-r--r-- 1 moto users 6560 2月 27日 12:10 aa.vcd

なにやら言ってきましたが、終わっています。あとは aa.vcd を

gtkwave で見ればよいですね。gtkwaveは現行板の1.3.24はうまくコンパイルできず、

開発板の2.0.0pre5がコンパイル可能でした。この辺は深く突っ込まないで下さい(笑)。


moto@roadster:/tmp$ wget ftp://ftp.cs.man.ac.uk/pub/amulet/gtkwave/2.0/gtkwave-2.0.0pre5.tar.gz
moto@roadster:/tmp$ tar xzvf gtkwave-2.0.0pre5.tar.gz
moto@roadster:/tmp$ cd gtkwave-2.0.0pre5
moto@roadster:/tmp/gtkwave-2.0.0pre5$ ./configure
moto@roadster:/tmp/gtkwave-2.0.0pre5$ make
moto@roadster:/tmp/gtkwave-2.0.0pre5$ su
# make install

でgtkwave をinstll したあと、


moto@roadster:~/ghdl/sim$ gtkwave aa.vcd

で波形が見られました。

f:id:lifesized:20070818122222p:image

あと、


moto@roadster:~/ghdl/sim$ ghdl --gen-makefile --ieee=synopsys --workdir=work bench > makefile

と言う感じで makefile を作っておけば、回路修正後も make 一発でコンパイル可能です。

使ってみた感触は、とてもいいです。こういったコマンドラインから叩けるコンパイラは手に馴染む感じがして思考の流れも妨げられず、とても好きです。いつも Linux で仕事していますので、コンパイルエラー消しから、簡単なデバッグ等、積極的に使っていこうと思います。またいろいろ問題も出てくるかもしれませんが、バージョンアップも頻繁なようなので、開発元にバグ報告などしていきたいものです。これでmodelsimのライセンス不足にも悩まされずにすみます。