2014-04-05 2 views
1

이 양식의 Modelsim 신호 값을 tcl에 x y 검색하려면 어떻게해야합니까? x 및 y를 개별적으로 처리 할 수 ​​있습니까?tcl로 modelsim 신호 가져 오기

현재 I는 신호 값을

때 {/의 currentState/comp_occupy} {집합 완 [EXA {/의 currentState/comp_occupy}]}

이 추적하도록 TCL이 라인을 가지고 신호는 위젯에서 x y처럼 보이는 Modelsim의 2D 배열입니다.

이 조각은 내가이 PROC 나갈 것은이 {x y}처럼 변수

trace variable comp w grid_monitor 

proc grid_monitor {name arrayindex op} { 
    global comp flag_ttt cells 
    if {$flag_ttt == 1} { 
     puts $comp 
     puts [llength $comp] 
     } 

} 

것을 추적해야하지만 난 x와 y를 분리하는 방법을 모른다. 처음에는 그게 목록이라고 생각했지만 llength은 1을 반환합니다!

어떻게하면 될 수 있습니까? 아니면 오히려 어떻게 그것을 적절한 목록으로 바꿀 수 있습니까?

감사

+0

proc에서'put $ comp' 출력은 무엇입니까? – Jerry

+0

예를 들어이'{1 3}'. 그것은 목록처럼 보이지만 모두 하나의 요소 인 것처럼 보입니다. – Yasin

+0

글쎄,리스트에'[list {1 3} '과 같이'puts [lindex [list {1 3}] 0'을 쓰면'{1 3}'이됩니다. 그것을 나눌 필요가 있습니다. 'puts [llength [split $ comp]]'를 시도하십시오. – Jerry

답변

1

우리는 중괄호 문자 중괄호가 있다고 설립 이래, 당신은 그들을 트리밍 할 수 있습니다. 일단 완료, 당신은 그 목록을 얻으려면 분할 할 수 있습니다 :

proc grid_monitor {name arrayindex op} { 
    global comp flag_ttt cells 
    if {$flag_ttt == 1} { 
     set new_comp [split [string trim $comp "{}"]] 
     puts $new_comp 
     puts [llength $new_comp] 
    } 
} 

string trim$comp에서 따옴표 내에 포함 된 문자를 잘라 것, 즉 {}입니다. 그런 다음 split은 공간에 문자열을 분할하여 목록을 제공합니다. 위에 xy을 할당 할 경우

, 당신은 사용할 수 있습니다 lindex 또는 lassign (나중에 Tcl8.5 또는 경우) :

proc grid_monitor {name arrayindex op} { 
    global comp flag_ttt cells 
    if {$flag_ttt == 1} { 
     set new_comp [split [string trim $comp "{}"]] 
     puts $new_comp 
     puts [llength $new_comp] 
     set x [lindex $new_comp 0] 
     set y [lindex $new_comp 1] 
     puts "x is $x and y is $y" 
    } 
} 

또는 ...을

set new_comp [split [string trim $comp "{}"]] 
puts $new_comp 
puts [llength $new_comp] 
lassign $new_comp x y 
puts "x is $x and y is $y" 
0

Tcl 8.5에서 유효한 목록을 포함하는 문자열을 변환하는 구문은 새로운 확장 연산자를 사용합니다.

set comp {*}$comp 
이것은이 가장 무엇을 할 인터프리터를 사용하여 수동으로 마사지를 피한다

eval set comp $comp 

: ModelSim을 현재 버전이 8.4 이상으로 업그레이드 한 경우

그것은하는 당신이 평가와 동일한 기능을 수행 할 필요가 명확하지 않다 끈.

관련 문제