2017-02-06 1 views
3

次のクロック生成ステートメントがModelSim/QuestaSimで100%のコードカバレッジでないのはなぜですか?私は、この他にブランチ追加する場合この同時実行文が100%未満のコードカバレッジを持つのはなぜですか?

library ieee; 
use  ieee.std_logic_1164.all; 

entity coverage1_tb is 
end entity; 

architecture tb of coverage1_tb is 
    signal clk  : std_logic := '1'; 
    signal finished : boolean := false; 
begin -- architecture tb 
    clk <= not clk after 10 ns when not finished; 
    --clk <= not clk after 10 ns when not finished else unaffected; 

    process 
    begin 
    wait until rising_edge(clk); 
    wait until rising_edge(clk); 

    wait until rising_edge(clk); 
    finished <= true; 
    wait; 
    end process; 
end architecture; 

else unaffectedを、その後、私は100%のカバレッジを取得

clk <= not clk after 5 ns when not finished; 

これは完全な例です。

同時シグナル割り当ては、順次シグナル割り当て(LRM 11.6)のプロセスに変換されます。影響を受けていないブランチはヌルステートメントに変換されます(LRM 11.6、注2; LRM 10.5.2.1)。

なぜModelSim/QuestaSimが波形を含まない明示的なelseブランチを書く必要があるのか​​分かりません。

答えて

2

私は、gccバックエンドで構築されたghdlがこの例では100%カバレッジを報告していると報告できます。

ghdl -a --std=08 -g -fprofile-arcs -ftest-coverage coverage1_tb.vhd 
ghdl -e --std=08 -Wl,-lgcov -Wl,--coverage coverage1_tb 
./coverage1_tb 
lcov --capture --directory . 
genhtml coverage.info --output-directory html 

だから、これはModelSimの技術サポートのための質問かもしれ下記のHTMLレポート enter image description here

を生成します。

gcc/ghdl/gcovによるブランチカバレッジはそれほど満足のいくものではありません。信号割り当てのようなVHDLの高度な構造の中には、内部でブランチが含まれているものがあり、gccではVHDLコードのこれらのブランチと実際のブランチを区別しません。そのため、ブランチカバレッジは機能しますが、多くの混乱があります。 (皮肉なことに、g ++/gcovを使用してプロファイルされたC++の例外は、同じクラッタの問題を抱えているように見えます)。

+0

おかげブライアン、私は簡単に私たちの[のPoCにカバレッジの統計情報を統合できるように見えます(Debianのテストを?) -Library](https://github.com/VLSI-EDA/PoC)。 – Paebbels

+2

私が覚えている限り、 'apt-get install lcov' - genhtmlはパッケージの一部です。しかし、他のQ/Aの警告を見ると、どちらのシミュレータもコードカバレッジで完全に滑らかではないように見えます。 –

1

どのコードカバレッジタイプを意味していますか?シンプルな文のカバレッジ、またはブランチまたはトグルカバレッジ?これら3つのタイプのすべてについて、私はクロック生成ステートメントの全面的なカバーを得る。あなたが使用している古いModelsim/Questaバージョンの問題かもしれませんか?私はModelsim DE 10.6(Revision 2016.12)を使用します。

私のTclコマンドは以下のとおりです。Linux上で `lcov`と` genhtml`実行するために必要なもの

vcom -2008 +cover coverage1.vhdl 
vsim -novopt -coverage coverage1_tb 
run -all 
関連する問題