为什么以下时钟生成语句在 ModelSim/QuestaSim 中没有 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 branch: else unaffected
,那么我将获得 100% 的覆盖率。
并发信号分配被转换为具有顺序信号分配的进程 (LRM 11.6)。未受影响的分支被转换为空语句(LRM 11.6,注 2;LRM 10.5.2.1)。
我不确定为什么 ModelSim/QuestaSim 要求我编写一个明确的 else 分支,其中不包含任何波形。