2017-02-06 14 views
3

Почему в модели 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, которая не содержит формы сигнала.

ответ

2

Не совсем ответ, но я могу сообщить, что ghdl, построенный с помощью gcc backend, сообщает об этом 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 

производит следующий отчет о HTML enter image description here

Таким образом, это может быть вопрос технической поддержки ModelSim.

Неполадки с точки зрения охвата филиала gcc/ghdl/gcov: некоторые из более продвинутых конструкций VHDL, такие как назначение сигналов, связаны с внутренними ветвями, а gcc не различает эти и фактические ветви в коде VHDL. Таким образом, охват филиалов работает, но с большим количеством беспорядков. (Как ни странно, исключения в C++, профилированные с использованием g ++/gcov, по-видимому, страдают от одной и той же проблемы с помехами).

+0

Благодаря Брайан, что нужно для запуска '' lcov' и genhtml' на Linux (Debian Testing?) Похоже, что я мог бы легко интегрировать статистику покрытия в нашем [PoC -Library] (https://github.com/VLSI-EDA/PoC). – Paebbels

+2

Насколько я помню, 'apt-get install lcov' - genhtml является частью пакета. Но см. Оговорки о других Q/A, похоже, что ни симулятор не является полностью гладким при покрытии кода. –

1

Какой тип покрытия кода вы имеете в виду? Простое покрытие оператора, или ответвление или переключение? Для всех этих трех типов я получаю полный обзор инструкции генерации тактовых импульсов. Может быть, это проблема со старой версией Modelsim/Questa, которую вы используете? Я использую Modelsim DE 10.6 (версия 2016.12).

Мои Tcl команды:

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

 Смежные вопросы

  • Нет связанных вопросов^_^