2015-01-08 7 views
0

ModelSim (6.5 PE)에서 TCL 스크립트 (TCL 버전 8.4)를 사용하여 VHDL 코드의 단위 테스트를 자동화하려고합니다.ModelSim onbreak에서 트리거 된 어설 션의 컨텍스트 가져 오기

relevant TCL-reference manual을 기반으로 다음과 같이 onbreak {} 명령을 사용하여 어설 션을 처리 할 수 ​​있습니다. 제어 된 방법으로 시뮬레이션을 계속하거나 중지 할 수 있습니다.

그러나 그 핸들러에서 더 많은 컨텍스트, 특히 파일 이름, 줄 번호 및 중단을 트리거 한 어설 션의 레이블을 얻을 수 있기를 바랍니다. 그런 다음이 정보를 연속 통합 도구로 전달합니다.

proc break_handler {} { 
    upvar #0 now now 
    # this is where I would need some more information about the current break point: 
    set break_point_information "???" 
    puts "Break: after $now with $break_point_information!" 

    # prevent infinite simulation: 
    if {$some_condition} { 
     stop 
    } else { 
     run -continue 
    } 
} 

# Skipped: scripted compilation of project 

# Stop on Note (1) ... Failure (4) 
set BreakOnAssertion 1 
onbreak { break_handler } 

# Skipped: scripted simulation start and report generation 

내가 원하는 정보는 본질적으로 이미 따라서

# ** Warning: End of Testbench 
# Time: 1234 ns Iteration: 0 Process: /something/testing File: C:/something.vhd 
# Break in Process testing at C:/comething.vhd line 1234 

으로 콘솔에 인쇄, 나는 아마 기록하고 transcript file을 구문 분석 할 수있다. 그러나 그것은 내가 처음부터 피하고 싶었던 것입니다 ... 내가 가장 가까운 것은 [runStatus -full]을 사용하고 있지만 그 정보는 훨씬 적습니다 (예 : break simulation_stop).

+0

어설 션 오류 및 기타 오류 조건에 대한 정보를 얻는 유일한 방법은 성적 증명서입니다. 스크립트 언어 (내부 Tcl interp가 아님)를 통해 서브 프로세스에서 vsim을 실행하는 경우 각 명령 호출에 대해 stdout을 구문 분석하여 문제가있는 경우 전체 스크립트를 읽지 않아도됩니다. –

+0

@KevinThibedeau 불행히도 내가 바라는 것이 아니지만 확인해 주셔서 감사합니다. 당신이 당신의 코멘트를 공식화하는 방식은 당신이 이것에 대해 확실히 확신하고 있음을 의미합니다. 시트 타블 소스가 있습니까? – mbschenkel

+0

매뉴얼. Modelsim은 시뮬레이션을 통해 "정교한"작업을 수행하는 것에 대한 훌륭한 지원을 해본 적이 없습니다. –

답변

2

우리가 개발 한 무료 오픈 소스 VUnit (https://github.com/LarsAsplund/vunit)이 원하는 것을 제공합니다. 오류 위치를 가리키고 호출 스택을 제공합니다. 오류가 없다면 기본적으로 testbench에 의해 true로 설정된 내부 신호가 있습니다 (끝에있는 test_runner_cleanup 프로 시저). 그 신호가 어떤 이유로 든 설정되지 않았다면 (테스트 벤치가 실패한 어설 션에서 멈추도록 설정되어 있다면 프로 시저가 전혀 호출되지 않을 수 있습니다) 파이썬 스크립트에서 호출 한 tcl 코드 조각이이를 볼 것입니다. 여기에 tcl 코드가 있습니다.

run -all 
set failed [expr [examine -internal ${status_boolean}]!=TRUE] 
if {$failed} { 
    catch { 
     # tb command can fail when error comes from pli 
     echo 
     echo "Stack trace result from 'tb' command" 
     echo [tb] 
     echo 
     echo "Surrounding code from 'see' command" 
     echo [see] 
    } 
} 
+0

좋은 툴킷입니다. 공유해 주셔서 감사합니다. vund가 vhdl에서 사본을 파싱하지 않고 해당 정보를 얻고 있습니까? 아니면 실제로 Modelim tcl 명령으로이 정보를 얻을 수 있습니까? – mbschenkel

+1

Tcl. 자세한 내용을 공유하도록 답변을 업데이트했습니다. – lasplund