Andreas schrieb:
>>Übrigens braucht man Strichpunkte in Tcl nur, wenn mehrere Kommandos in
>>einer Zeile stehen sollen. Am Zeilenende sind sie weder nötig noch
>>üblich.
>
> okay danke für den Hinweis.
Inzwischen habe ich einen Blick in die Doku von ModelSim geworfen und da
scheinen die Strichpunkte doch üblich zu sein. Allgemein läßt man sie in
Tcl aber normalerweise weg.
> set temp [searchlog -expr {$signalname 'hasX} {1 ps} $signalname]
> [...]
> searchlog -expr {tb_rom_ctrl:i_rom_ctrl:rom_ip_DQ_io'hasX} {1ps}
> tb_rom_ctrl:i_rom_ctrl:rom_ip_DQ_io
Ich kenne mich nur mit Tcl selbst aus, nicht mit ModelSim, es fällt mir
aber auf, daß in der proc vor "'hasX" ein Leerzeichen steht, im direkten
Aufruf aber nicht. Könnte das das Problem sein? Auch das Argument {1 ps}
schreibst Du mal mit und mal ohne Leerzeichen.
Außerdem wäre da noch die Frage, ob searchlog auf dem Argument von -expr
Variablensubstitution macht oder nicht. Funktioniert denn folgendes
außerhalb einer proc?1 | set signal "tb_rom_ctrl:i_rom_ctrl:rom_ip_DQ_io"
|
2 | searchlog -expr {$signal'hasX} {1 ps} $signal]
|
Falls das den gleichen Fehler bringt, wie in der proc, probier's mal mit
Anführungszeichen um das Argument von -expr, statt der geschweiften
Klammern, also so:
1 | searchlog -expr "$signal'hasX" {1 ps} $signal]
|
Die Suche nach dem letzten Element in Deiner proc ist übrigens etwas
umständlich, denn sowohl [lindex] als auch [string index] erlauben als
Index-Parameter auch die speziellen Werte "end", "end-1" und in neueren
Tcl-Versionen auch "end-<nummer>". Das Ganze könnte also so aussehen:
1 | set temp [lindex $temp 0]
|
2 | set state [string index $temp end]
|
oder noch kompakter:
1 | set state [string index [lindex $temp 0] end]
|
Edit: Ach, und die echo-Zeile wird so wie sie dasteht wohl auch zu einer
Fehlermeldung führen.