2016-08-09 18 views
1

このpage(2005年のArnim Luger出典)は、ツールチェーン{GHDL + gcov}がVHDLコードカバレッジを実行できることを説明しています。gcov(Ubuntu 16.04 LTS)を使用したGHDL +コードカバレッジ

質問:今日のGCC、GCOV、GHDLの最新バージョンではまだ動作していますか?

次のコマンドは

$ ghdl -a -Wc,-ftest-coverage -Wc,-fprofile-arcs tb_example.vhd 
ghdl: unknown option '-Wc,-ftest-coverage' for command '-a' 

を失敗した私のセットアップは以下の通りです:

$ gcc -v 
Using built-in specs. 
COLLECT_GCC=gcc 
COLLECT_LTO_WRAPPER=/usr/gnat/bin/../libexec/gcc/x86_64-pc-linux-gnu/4.9.4/lto-wrapper 
Target: x86_64-pc-linux-gnu 
Configured with: ../src/configure --enable-languages=ada,c,c++ --enable-dual-exceptions --enable-_cxa_atexit --enable-threads=posix --with-bugurl=URL:mailto:[email protected] --disable-nls --without-libiconv-prefix --disable-libstdcxx-pch --disable-libada --enable-checking=release --disable-multilib --with-mpfr=/boron.a/gnatmail/sandbox/gpl-2016/x86_64-linux/mpfr_stable/install --with-gmp=/boron.a/gnatmail/sandbox/gpl-2016/x86_64-linux/gmp_stable/install --with-mpc=/boron.a/gnatmail/sandbox/gpl-2016/x86_64-linux/mpc_stable/install --with-build-time-tools=/boron.a/gnatmail/sandbox/gpl-2016/x86_64-linux/gcc/build/buildtools/bin --prefix=/boron.a/gnatmail/sandbox/gpl-2016/x86_64-linux/gcc/pkg --build=x86_64-pc-linux-gnu 
Thread model: posix 
gcc version 4.9.4 20160426 (for GNAT GPL 2016 20160515) (GCC) 

$ gcov -v 
gcov (GCC) 4.9.4 20160426 (for GNAT GPL 2016 20160515) 
Copyright (C) 2015 Free Software Foundation, Inc. 
This is free software; see the source for copying conditions. 
There is NO warranty; not even for MERCHANTABILITY or 
FITNESS FOR A PARTICULAR PURPOSE. 

$ ghdl -v 
GHDL 0.34dev (20151126) [Dunoon edition] 
Compiled with GNAT Version: GPL 2016 (20160515-49) 
mcode code generator 
Written by Tristan Gingold. 

Copyright (C) 2003 - 2015 Tristan Gingold. 
GHDL is free software, covered by the GNU General Public License. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 

$ cat /proc/version 
Linux version 4.4.0-34-generic ([email protected]) (gcc version 5.3.1 20160413 (Ubuntu 5.3.1-14ubuntu2.1)) #53-Ubuntu SMP Wed Jul 27 16:06:39 UTC 2016 

私はMCODEバックエンド手順でビルを使用してGHDLをインストールしました。それが悪の根源だろうか?

ありがとうございました!

答えて

2

はい、現在のghdlはコードカバレッジをサポートしています。

最新のghdlバージョンを使用していることを確認してください。ただし、ghdlは3つのコード生成バックエンド(LLVM、gccおよび独自のJITコンパイラ、mcode)をサポートしていますが、現在gccバックエンドのみがgcovによるコードカバレッジをサポートしています。具体的には、構築したmcodeのバージョンは動作しません。

Ubuntuに適したパッケージでなければなりません - 私はDebian Jessieのソースからビルドするためのビルド手順を持っていません。これはUbuntuにも役立つはずです。 (もし必要なら、私はそれらを掘り出すでしょう)。

ghdl --version 
GHDL 0.34dev (20151126) [Dunoon edition] 
Compiled with GNAT Version: 4.9.3 
GCC back-end code generator 
Written by Tristan Gingold. 

チェック...

は、今あなたが供給する必要があるいくつかのコンパイル時のフラグがある...

ghdl -a --std=08 -g -fprofile-arcs -ftest-coverage myfile.vhd 
ghdl -a --std=08 -g -fprofile-arcs -ftest-coverage my_TB.vhd 

と精緻化のための(-Wl,は、リンカオプションの前に)...

ghdl -e --std=08 -Wl,-lgcov -Wl,--coverage my_tb 
./my_tb 

.gcno,.gcdaファイルのセットはで後処理する必要があります(またはlcovおよびgenhtml、よりきれいなレポートの場合)

VunitおよびOSVVMライブラリでも動作します。

VHDLの信号割り当てのセマンティクスは、生成された実行可能ファイル内で多くの偽の分岐に変換されるため、ブランチカバレッジはあまりうまく機能しません。

VUnitでは、「コードカバレッジ」実験オプションを使用していません。 代わりに、関連するフラグを設定し、vu.main()関数を実行してその戻り値をキャッチし、lcovを後処理ステップとして呼び出します。不完全なrun.pyスクリプトの例は、次のとおりです。

lib.add_compile_option("ghdl.flags", ["-fprofile-arcs"]) 
vu.set_sim_option("ghdl.flags", ["-Wl,-lgcov"]) 
try: 
    vu.main() 
except SystemExit as exc: 
    all_ok = exc.code == 0 

if all_ok: 
    subprocess.call(["lcov", "--capture", "--directory", ".", "--output-file", "code_coverage.info"]) 
    subprocess.call(["genhtml", "code_coverage.info", "--output-directory", "code_html"]) 
+0

おかげさまで答えをありがとう。非常に役立ちます。私は試してみたいと思います。私はここでフィードバックをします。 –

+0

私はバックエンドとしてGCCを使って再構築しました。ケーキの上のチェリーは、VUnitが生成するxmlにカバレッジ結果を直接含めることになります。 VUnit xmlにカバレッジを簡単に含めることは可能ですか? (今のところ私は.gcda +を持っています。VUnitの実行によって生成されたgcnoですが、最後にgcov bymyselfを実行しなければなりません。結果はxmlにありません) –

+0

実験的なVUnitのカバレッジのサポートは他のシミュレータをサポートするように開始されました。 – lasplund

関連する問題