2017-02-06 5 views
3

Warum hat die folgende Anweisung zur Taktgenerierung keine 100% ige Codeabdeckung in ModelSim/QuestaSim?Warum hat diese gleichzeitige Anweisung weniger als 100% Codeabdeckung?

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

Dies ist das vollständige Beispiel:

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; 

Wenn ich diesen sonst Zweig hinzu: else unaffected, dann 100% Abdeckung ich.

Die gleichzeitige Signalzuordnung wird in Prozesse mit sequenziellen Signalzuordnungen umgesetzt (LRM 11.6). Ein nicht betroffener Zweig wird in eine Nullanweisung übersetzt (LRM 11.6, Anmerkung 2; LRM 10.5.2.1).

Ich bin mir nicht sicher, warum ModelSim/QuestaSim mich auffordert, einen expliziten Else-Zweig zu schreiben, der keine Wellenform enthält.

Antwort

2

Nicht ganz eine Antwort, aber ich kann berichten, dass ghdl mit den gcc-Backend-Berichten 100% Abdeckung für dieses Beispiel erstellt.

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 

erzeugt den folgenden HTML-Bericht enter image description here

Also, das ist eine Frage für Modelsim technische Unterstützung sein kann.

Branch-Coverage über gcc/ghdl/gcov ist nicht so zufriedenstellend: Einige der fortgeschritteneren Konstrukte von VHDL wie Signalzuweisungen beinhalten interne Verzweigungen, und gcc unterscheidet nicht zwischen diesen und tatsächlichen Verzweigungen im VHDL-Code. So funktioniert Filialabdeckung aber mit viel Unordnung. (Ironischerweise scheinen Ausnahmen in C++, die mit g ++/gcov profiliert wurden, das gleiche Clutter-Problem zu erleiden).

+0

Dank Brian, was zu laufen wird benötigt, um '' lcov' und genhtml' auf Linux (Debian Testing?) Es sieht aus wie ich leicht Abdeckungsstatistiken in unsere [PoC integrieren könnte -Bibliothek] (https://github.com/VLSI-EDA/PoC). – Paebbels

+2

Soweit ich mich erinnern kann, ist "apt-get install lcov" - genhtml Teil des Pakets. Aber sehen Sie sich Vorbehalte bei anderen Q/A an, es sieht so aus, als ob bei der Code-Abdeckung kein Simulator vollkommen glatt ist. –

1

Welcher Coverage-Typ meinen Sie? Einfache Aussageabdeckung oder Verzweigung oder Umschaltabdeckung? Für alle diese 3 Typen bekomme ich volle Abdeckung der Uhrgenerierungserklärung. Vielleicht ist es ein Problem mit einer älteren Modelsim/Questa Version, die du benutzt? Ich benutze Modelsim DE 10.6 (Revision 2016.12).

Meine tcl-Befehle sind:

vcom -2008 +cover coverage1.vhdl 
vsim -novopt -coverage coverage1_tb 
run -all 
Verwandte Themen