2014-09-18 2 views
1

Tcl을 사용하여 ModelSim의 주어진 라이브러리 (내가 10.3c PE를 사용하고 있습니다)에 디자인 요소가 존재하는지 (컴파일되었는지) 확인하고 싶습니다. 적절한 기능을 찾지 못하는 것 같습니다. 이 이론과 같은 코드 :디자인 요소가 스크립트가있는 라이브러리에 존재하는지 확인

if {[design_object exists $lib.$entity]} { 
    ... 

이상적인 것은 아니지만, 내가 가진 특정 사용자 지정 라이브러리를 확인할 수 있습니다

if {[file exists $lib_path]} { 
    ... 

이것은 물론 파일 시스템 액세스를 사용, 이상적 동안 나는에 좋아하는 것 논리적 이름을 확인하십시오.이 해결 방법은 제한된 목적으로는 충분합니다.

ModelSim은 컴파일 된 엔티티에 대한 개별 파일을 만들지 않으므로 불행히도 디자인 엔티티와 완전히 똑같지는 않습니다. 엔티티 이름에 대해 라이브러리의 _info 파일을 구문 분석하는 것이 고려되었지만 비교적 긴 작업 일 수 있습니다. 이 작업을 수행하는 기본 제공 방법이 있습니까? ModelSim의 Tcl 확장은 심지어 논리적 이름 (시뮬레이션 컨텍스트 외부)에 대한 액세스를 제공합니까?

+0

Modelsim 엔티티가 명령에 매핑 되었습니까? 그렇다면 _ 작은 _을 _ 검사하여 _ 확인할 수 있습니다. 그렇지 않으면 정말 도움이되는 일반적인 Tcl에는 아무 것도 없습니다. Modelsim이 제공해야 할 기능이 될 것입니다. (사용자 정의 핸들을 이해할 수 있기 때문에 ...) –

답변

2

vdir 명령은 Modelsim 라이브러리의 내용을 프로그래밍 방식으로 검사해야하는 명령입니다. 각 행에 오브젝트 유형이 있고 오브젝트 이름이 오는 다중 행. 자열을 리턴합니다. 엔티티는 다음과 같이 추출 할 수 다음 _info 파일을 보면

proc get_vdir_entities {lib_name} { 
    set contents [split [vdir -lib $lib_name] "\n"] 
    set rval {} 
    foreach c $contents { 
    if [regexp "^ENTITY" $c] { 
     lappend rval [lindex $c 1] 
    } 
    } 
    return $rval 
} 

set entities [get_vdir_entities "work"] 

이전 솔루션

모든 컴파일 된 개체가 자신의 이름을 접두어에 "E"를 문자열로 기록되어 있음을 보여줍니다. 쉘에있는 간단한 테스트는 나를 위해 포괄적 인 목록을 만들어 :이 "62 20 31 0A"진수의 이러한 문자열 전에 일관된 접두사이고 그들이 0A 진수로 종료됩니다 같은

strings _info | sed -n -e "/^E/ p" 

것 같습니다. 다음을 사용하여 순수 Tcl로 추출 할 수 있습니다.

proc get_modelsim_entities {info_file} { 
    set fh [open $info_file r] 
    fconfigure $fh -translation binary 
    set fields [split [read $fh] "\n"] 
    close $fh 

    set rval {} 
    foreach f $fields { 
    if [regexp -nocase "^E\[a-z0-9_\]+$" $f] { 
     lappend rval [string range $f 1 end] 
    } 
    } 

    return $rval 
} 


set entities [get_modelsim_entities "path/to/your/_info"] 
+0

나는 파일을 파싱하지 않으려 고합니다. 특히 무작위로 검사를 자주 수행하고 싶을 때가 있습니다. . – fru1tbat

+0

'vdir'을 더 살펴보면, 하나의 엔티티를 더 쉽게 확인하기위한 호출을하는 ''인수를 취할 수있는 것처럼 보입니다. 감사! – fru1tbat