2017-02-06 9 views
3

다음 Clock Generation 문은 ModelSim/QuestaSim에서 100 % 코드 적용 범위가 아닙니다. 나는이 다른 지점에 추가하면왜이 동시 진술은 100 % 코드 커버리지 미만입니까?

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 % 적용을받을

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

이 전체 예입니다.

동시 신호 할당은 순차 신호 할당 (LRM 11.6)이있는 프로세스로 변환됩니다. 영향을받지 않는 브랜치는 널 문으로 변환됩니다 (LRM 11.6, 참고 2, LRM 10.5.2.1).

왜 ModelSim/QuestaSim에서 웨이브 폼이없는 명시 적 else 브랜치를 작성해야하는지 모르겠습니다.

답변

2

답변이 없지만 gcc 백엔드로 빌드 된 ghdl은이 예제에서 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 

는이 ModelSim을 기술 지원에 대한 질문이있을 수 있습니다, 그래서 다음 HTML 보고서를 enter image description here

을 생산하고 있습니다.

gcc/ghdl/gcov를 통한 브랜치 커버리지는 그리 만족스럽지 않다. 신호 할당과 같은 VHDL의 고급 구조 중 일부는 내부적으로 브랜치를 포함하며, gcc는 이러한 VHDL 코드와 실제 브랜치를 구분하지 않는다. 그래서 분기 커버리지는 작동하지만 혼란이 많습니다. (역설적으로 g ++/gcov를 사용하여 프로파일 링 된 C++의 예외는 동일한 혼란 문제를 겪고있는 것처럼 보입니다).

+0

감사합니다 -Library] (https://github.com/VLSI-EDA/PoC). – Paebbels

+2

내가 기억할 수있는 한,'apt-get install lcov' - genhtml은 패키지의 일부입니다. 그러나 다른 Q/A에 대한 경고를 보면 코드 커버리지에서 시뮬레이터가 완전히 부드럽게 보이지 않는 것처럼 보입니다. –

1

어떤 코드 서비스 유형을 의미합니까? 간단한 진술 범위 또는 분기 또는 토글 범위? 이 3 가지 유형 모두에 대해 나는 시계 생성 진술의 전체 내용을 다룬다. 아마 당신이 사용하는 구형 ModelSim/Questa 버전의 문제일까요? Modelsim DE 10.6 (Revision 2016.12)을 사용합니다.

내 TCL 명령은 다음과 같습니다

내가 쉽게 우리의 [의 PoC에 적용 통계를 통합 할 수 있었던 것처럼 브라이언, 리눅스에서`genhtml`을`lcov`를 실행하는 데 필요한 것 (데비안 테스트는?) 그것은 보이는
vcom -2008 +cover coverage1.vhdl 
vsim -novopt -coverage coverage1_tb 
run -all