Hm, ohne Kenntnis vom Modelsim verstehe ich immer noch nicht so richtig,
was du vor hast. Ich vermute folgendes:
- du hast einen String inst, der durch Slash getrennte Gruppennamen
enthält, also etwa
- aus dem möchtest du den Befehl
1 | add wave -group vhdl -group gruppe1 -group g2 -group g3 -color ...
|
zusammenbasteln. Im Moment baust du dir in group ungefähr folgenden
String zusammen
1 | -group gruppe1 -group g2 -group g3
|
und übergibst den an add. Dein String wird aber wieder nicht
aufgebrochen, die add-Prozedur bekommt jetzt als Name einer Gruppe den
ganzen String übergeben.
Ich sehe zwei Baustellen: eine ist eher weltanschaulich. Die Methode mit
der du den String baust, ist nämlich umständlich und fehleranfällig, z.
B. wenn die Gruppen Leerzeichen enthalten. Ich würde die Gruppenliste so
bauen
1 | set inst g1/g2/g3
|
2 |
|
3 | set hirac [list]
|
4 | foreach i [split $inst /] {lappend hirac -group $i}
|
Jetzt steht in hirac
1 | -group g1 -group g2 -group g3
|
Zweite Baustelle: hirac soll in einzelne Parameter aufgebrochen werden.
Bei alten TCLs (vor 8.5) gab es dazu nur eine unangenehme Möglichkeit
1 | eval add wave -group vhdl $group -color #00BFFF $sig
|
Da Unangenehme ist: mit eval wird das Kommando komplett evaluiert, wenn
die Gruppennamen böse Zeichen (z. B. Leerzeichen oder []) enthalten,
gibt es Ärger. Um einen boshaften Fall zu zeigen: Evaluiert man den
Gruppenname "[exec rm -fr]" ist unter Umständen die Platte leer. Ab TCL
8.5 geht stattdessen
1 | add wave -group vhdl {*}$group -color #00BFFF $sig
|
wenn Modelsims TCL neu genug ist, nimm die zweite Methode. In beiden
Fällen gehört vor $group kein -group, denn das -group steht ja schon in
der Variablen.
Jetzt sehe ich grade die "breaking news". Naja, jetzt schicke ich meinen
Post trotzdem ab.
Viel Spass
B.