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.
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
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. –