
ModelSIMのTranscriptウィンドウから、とりあえずLEDに見えるものを表示できました。
load tk84
#pack [button .b -text Botan -command exit]
#pack [button .b1 -text BotanA -command exit]
pack [canvas .c_led]
set x 10
set y 20
set w 10
for {set i 7} {$i >= 0} {incr i -1} {
incr x 20
set name led
append name $i
.c create text [expr $x + 5] [expr $y - 5] -text $i
.c create oval $x $y [expr $x + $w] [expr $y + $w] \
-fill "red" -outline "dark red" -width 1 -tag $name
}
.c_led bind led0 <Enter> {
%W itemconfigure led0 -fill "salmon"
}
.c_led bind led0 <Leave> {
%W itemconfigure led0 -fill "gray"
}

貧弱だった見た目を大幅に改善、なんだか動きそう。7セグの表示がおかしいのはデコーダ回路を未作成だから。
ただしこの段階で、whenで起こされた後examineで信号状態を見るという、NOODLYBOXでやったことの応用に成功しています。
# ModelSIM上でLED Panelを出すスクリプト
load tk84
proc seven_seg_yoko {x y name} {
.c_led create polygon $x $y [incr x 5] [incr y -5] [incr x 20] $y \
[incr x 5] [incr y 5] [incr x -5] [incr y 5] [incr x -20] $y \
-fill "black" -outline "dark red" -tag $name
}
proc seven_seg_tate {x y name} {
.c_led create polygon $x $y [incr x 5] [incr y 5] [incr x -3] [incr y 20] \
[incr x -5] [incr y 5] [incr x -5] [incr y -5] [incr x 3] [incr y -20] \
-fill "black" -outline "dark red" -tag $name
}
proc seven_seg {x y name} {
seven_seg_yoko $x $y ${name}a
seven_seg_tate [expr $x + 31] [expr $y + 2] ${name}b
seven_seg_tate [expr $x + 28] [expr $y + 35] ${name}c
seven_seg_yoko [expr $x - 7] [expr $y + 66] ${name}d
seven_seg_tate [expr $x - 6] [expr $y + 35] ${name}e
seven_seg_tate [expr $x - 2] [expr $y + 2] ${name}f
seven_seg_yoko [expr $x - 4] [expr $y + 34] ${name}g
#dot
.c_led create oval [expr $x + 28] [expr $y + 66] \
[expr $x + 38] [expr $y + 76] \
-fill "black" -outline "dark red" -width 1 -tag ${name}dot
}
proc change_led {} {
array set color {0 black 1 red x black}
set value [examine -radix 2 /test_counter/count]
#puts stdout $value
for {set i 0} {$i <= 7} {incr i} {
set bit [string index $value [expr 7 - $i]]
.c_led itemconfigure led${i} -fill $color($bit)
}
change_seven_seg
}
proc change_seven_seg {} {
array set color {0 black 1 red x black}
array set pos {0 a 1 b 2 c 3 d 4 e 5 f 6 g 7 dot}
set value [examine -radix 2 /test_counter/count]
#puts stdout $value
for {set i 0} {$i <= 7} {incr i} {
set bit [string index $value [expr 7 - $i]]
.c_led itemconfigure seg0$pos($i) -fill $color($bit)
}
}
#-----------------------------------------------------
# ウィンドウタイトルが"tk"のままだとカッコ悪いので、名前を変える
wm title . "LED Panel"
# スクリプトを再読み込みしても問題を起こさないように、
# キャンバスが作成済みなら、削除してから再作成する
if {[info command .c_led] ne ""} {
destroy .c_led
}
pack [canvas .c_led -width 200 -height 150 -bg black]
#pack [button .b -text Botan -command exit]
#pack [button .b1 -text BotanA -command exit]
# LEDの表示
set x 10
set y 20
set w 10
for {set i 7} {$i >= 0} {incr i -1} {
.c_led create text [expr $x + 5] [expr $y - 5] -text $i -fill white
.c_led create oval $x $y [expr $x + $w] [expr $y + $w] \
-fill "black" -outline "dark red" -width 1 -tag led${i}
incr x 20
}
# 7セグメントLEDの表示
seven_seg 50 50 seg0
seven_seg 110 50 seg1
#.c_led bind led0 <Enter> {
# %W itemconfigure led0 -fill "salmon"
#}
when -label Kicked { /test_counter/count } { change_led }

最終形態。incr Tclを使ってカプセル化したのでずっと使いやすくなりました。
実行可能なサンプルの解説、HDLソースを含めたファイルの取得は TkTestHowTo を参照してください。
ソース
注意点