Почему в модели ModelSim/QuestaSim используется следующий оператор генерации часов, а не 100% -ный охват кода?Почему этот параллельный оператор занимает менее 100% покрытия кода?
clk <= not clk after 5 ns when not finished;
Это полный пример:
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% покрытие.
Назначение параллельного сигнала преобразуется в процессы с последовательными назначениями сигналов (LRM 11.6). Незатронутая ветвь преобразуется в нулевой оператор (LRM 11.6, Примечание 2, LRM 10.5.2.1).
Я не уверен, почему ModelSim/QuestaSim требует от меня писать явную ветвь else, которая не содержит формы сигнала.
Благодаря Брайан, что нужно для запуска '' lcov' и genhtml' на Linux (Debian Testing?) Похоже, что я мог бы легко интегрировать статистику покрытия в нашем [PoC -Library] (https://github.com/VLSI-EDA/PoC). – Paebbels
Насколько я помню, 'apt-get install lcov' - genhtml является частью пакета. Но см. Оговорки о других Q/A, похоже, что ни симулятор не является полностью гладким при покрытии кода. –