OpenCores
URL https://opencores.org/ocsvn/bustap-jtag/bustap-jtag/trunk

Subversion Repositories bustap-jtag

[/] [bustap-jtag/] [trunk/] [cmd/] [altera/] [virtual_jtag_console.tcl] - Blame information for rev 23

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 6 ash_riple
##**************************************************************
2 8 ash_riple
## Module             : virtual_jtag_console.tcl
3 6 ash_riple
## Platform           : Windows xp sp2
4
## Author             : Bibo Yang  (ash_riple@hotmail.com)
5
## Organization       : www.opencores.org
6 20 ash_riple
## Revision           : 2.5
7
## Date               : 2014/02/08
8 6 ash_riple
## Description        : Tcl/Tk GUI for the up_monitor
9
##**************************************************************
10
 
11 2 ash_riple
proc reset_fifo {{jtag_index_0 0}} {
12 23 ash_riple
  global test_cable
13
  global test_device
14
  open_device -hardware_name $test_cable -device_name $test_device
15 6 ash_riple
        device_lock -timeout 5
16 2 ash_riple
        device_virtual_ir_shift -instance_index $jtag_index_0 -ir_value 2 -no_captured_ir_value
17
        device_virtual_dr_shift -instance_index $jtag_index_0  -length 32 -dr_value 00000000 -value_in_hex -no_captured_dr_value
18
        device_unlock
19 23 ash_riple
  close_device
20 2 ash_riple
        return 0
21
}
22
 
23
proc query_usedw {{jtag_index_0 0}} {
24 23 ash_riple
  global test_cable
25
  global test_device
26
  open_device -hardware_name $test_cable -device_name $test_device
27 2 ash_riple
        global fifoUsedw
28 6 ash_riple
        device_lock -timeout 5
29 2 ash_riple
        device_virtual_ir_shift -instance_index $jtag_index_0 -ir_value 1 -no_captured_ir_value
30
        set usedw [device_virtual_dr_shift -instance_index $jtag_index_0 -length 9 -value_in_hex]
31
        device_unlock
32
                set tmp 0x
33
                append tmp $usedw
34
                set usedw [format "%i" $tmp]
35
        set fifoUsedw $usedw
36 23 ash_riple
  close_device
37 2 ash_riple
        return $usedw
38
}
39
 
40
proc read_fifo {{jtag_index_0 0}} {
41 23 ash_riple
  global test_cable
42
  global test_device
43
  open_device -hardware_name $test_cable -device_name $test_device
44 6 ash_riple
        device_lock -timeout 5
45 2 ash_riple
        device_virtual_ir_shift -instance_index $jtag_index_0 -ir_value 1 -no_captured_ir_value
46
        device_virtual_ir_shift -instance_index $jtag_index_0 -ir_value 3 -no_captured_ir_value
47 23 ash_riple
        set fifo_data [device_virtual_dr_shift -instance_index $jtag_index_0 -length 98 -value_in_hex]
48 2 ash_riple
        device_unlock
49 23 ash_riple
  close_device
50 2 ash_riple
        return $fifo_data
51
}
52
 
53 8 ash_riple
proc config_addr {{jtag_index_1 1} {mask 0100000000} {mask_id 1}} {
54 23 ash_riple
  global test_cable
55
  global test_device
56
  open_device -hardware_name $test_cable -device_name $test_device
57 8 ash_riple
        global log
58
        set mask_leng [string length $mask]
59
        if {$mask_leng!=10} {
60
                $log insert end "\nError: Wrong address mask length @$mask_id: [expr $mask_leng-2]. Expects: 8.\n"
61 23 ash_riple
                set addr_mask 0000000000
62 8 ash_riple
        } else {
63
                device_lock -timeout 5
64
                device_virtual_ir_shift -instance_index $jtag_index_1 -ir_value 1 -no_captured_ir_value
65
                set addr_mask [device_virtual_dr_shift -instance_index $jtag_index_1 -dr_value $mask -length 40 -value_in_hex]
66
                device_unlock
67
        }
68 23 ash_riple
  close_device
69
        return $addr_mask
70 2 ash_riple
}
71
 
72 14 ash_riple
proc config_trig {{jtag_index_2 2} {trig 00000000000000} {pnum 000}} {
73 23 ash_riple
  global test_cable
74
  global test_device
75
  open_device -hardware_name $test_cable -device_name $test_device
76 8 ash_riple
        global log
77
        set trig_leng [string length $trig]
78 23 ash_riple
        if {$trig_leng!=18} {
79
                $log insert end "\nError: Wrong trigger condition length: [expr $trig_leng-2]. Expects: 8+8.\n"
80 8 ash_riple
        } else {
81
                device_lock -timeout 5
82
                device_virtual_ir_shift -instance_index $jtag_index_2 -ir_value 1 -no_captured_ir_value
83 23 ash_riple
                set addr_trig [device_virtual_dr_shift -instance_index $jtag_index_2 -dr_value $trig -length 72 -value_in_hex]
84 15 ash_riple
                device_unlock
85
        }
86
        if {[format "%d" 0x$pnum]>=511} {
87
                $log insert end "\nError: Wrong trigger pre-capture value: [format "%d" 0x$pnum]. Expects: 0~510.\n"
88
        } else {
89
                device_lock -timeout 5
90 11 ash_riple
                device_virtual_ir_shift -instance_index $jtag_index_2 -ir_value 2 -no_captured_ir_value
91 15 ash_riple
                set pnum_trig [device_virtual_dr_shift -instance_index $jtag_index_2 -dr_value $pnum -length 10 -value_in_hex]
92 8 ash_riple
                device_unlock
93
        }
94 23 ash_riple
  close_device
95 15 ash_riple
        return $addr_trig
96 2 ash_riple
}
97
 
98
proc open_jtag_device {{test_cable "USB-Blaster [USB-0]"} {test_device "@2: EP2SGX90 (0x020E30DD)"}} {
99 23 ash_riple
  open_device -hardware_name $test_cable -device_name $test_device
100 2 ash_riple
        # Retrieve device id code.
101 6 ash_riple
        device_lock -timeout 5
102 2 ash_riple
        device_ir_shift -ir_value 6 -no_captured_ir_value
103
        set idcode "0x[device_dr_shift -length 32 -value_in_hex]"
104
        device_unlock
105 23 ash_riple
  close_device
106 2 ash_riple
        return $idcode
107
}
108
 
109
proc close_jtag_device {} {
110
        close_device
111
}
112
 
113
proc scan_chain {} {
114
        global log
115
        $log insert end "JTAG Chain Scanning report:\n"
116
        $log insert end "****************************************\n"
117
        set blaster_cables [get_hardware_names]
118
        set cable_num 0
119
        foreach blaster_cable $blaster_cables {
120
                incr cable_num
121
                $log insert end "@$cable_num: $blaster_cable\n"
122
        }
123
        $log insert end "\n****************************************\n"
124
        global device_list
125
        set device_list ""
126
        foreach blaster_cable $blaster_cables {
127
                $log insert end "$blaster_cable:\n"
128
                lappend device_list $blaster_cable
129
                if [catch {get_device_names -hardware_name $blaster_cable} error_msg] {
130
                        $log insert end $error_msg
131
                        lappend device_list $error_msg
132
                } else {
133
                        foreach test_device [get_device_names -hardware_name $blaster_cable] {
134
                                $log insert end "$test_device\n"
135
                        }
136
                        lappend device_list [get_device_names -hardware_name $blaster_cable]
137
                }
138
        }
139
}
140
 
141
proc select_device {{cableNum 1} {deviceNum 1}} {
142
        global log
143
        global device_list
144 23 ash_riple
        global test_cable
145
        global test_device
146 2 ash_riple
        $log insert end "\n****************************************\n"
147
        set test_cable [lindex $device_list [expr 2*$cableNum-2]]
148
        $log insert end "Selected Cable : $test_cable\n"
149
        set test_device [lindex [lindex $device_list [expr 2*$cableNum-1]] [expr $deviceNum-1]]
150
        $log insert end "Selected Device: $test_device\n"
151
        set jtagIdCode [open_jtag_device $test_cable $test_device]
152
        $log insert end "Device ID code : $jtagIdCode\n"
153 23 ash_riple
 
154 2 ash_riple
        reset_fifo 0
155
        query_usedw 0
156
}
157
 
158 6 ash_riple
proc updateAddrConfig {} {
159 2 ash_riple
        global address_span1
160
        global address_span2
161
        global address_span3
162
        global address_span4
163
        global address_span5
164
        global address_span6
165
        global address_span7
166
        global address_span8
167
        global address_span9
168
        global address_span10
169
        global address_span11
170
        global address_span12
171
        global address_span13
172
        global address_span14
173
        global address_span15
174
        global address_span16
175 6 ash_riple
        global address_span_en1
176
        global address_span_en2
177
        global address_span_en3
178
        global address_span_en4
179
        global address_span_en5
180
        global address_span_en6
181
        global address_span_en7
182
        global address_span_en8
183
        global address_span_en9
184
        global address_span_en10
185
        global address_span_en11
186
        global address_span_en12
187
        global address_span_en13
188
        global address_span_en14
189
        global address_span_en15
190
        global address_span_en16
191
        global addr_wren
192
        global addr_rden
193
        for {set i 1} {$i<=16} {incr i} {
194
                set    mask [format "%1X" [expr $i-1]]
195
                append mask [format "%1X" [expr $addr_wren*8+$addr_rden*4+[set address_span_en$i]]]
196 2 ash_riple
                append mask [set address_span$i]
197 8 ash_riple
                config_addr 1 $mask $i
198 2 ash_riple
        }
199
}
200
 
201 6 ash_riple
proc initAddrConfig {} {
202 2 ash_riple
        global log
203
        global address_span1
204
        global address_span2
205
        global address_span3
206
        global address_span4
207
        global address_span5
208
        global address_span6
209
        global address_span7
210
        global address_span8
211
        global address_span9
212
        global address_span10
213
        global address_span11
214
        global address_span12
215
        global address_span13
216
        global address_span14
217
        global address_span15
218
        global address_span16
219 20 ash_riple
        for {set i 1} {$i<=8} {set i [expr $i+2]} {
220 11 ash_riple
                if {[set address_span$i]==""} {
221 20 ash_riple
                        set address_span$i fffffffc
222 2 ash_riple
        }
223 20 ash_riple
        }
224
        for {set i 2} {$i<=8} {set i [expr $i+2]} {
225
                if {[set address_span$i]==""} {
226
                        set address_span$i 00000000
227 11 ash_riple
        }
228 20 ash_riple
        }
229 2 ash_riple
        for {set i 9} {$i<=16} {incr i} {
230 11 ash_riple
                if {[set address_span$i]==""} {
231 20 ash_riple
                        set address_span$i ffffffff
232 2 ash_riple
        }
233 20 ash_riple
        }
234 2 ash_riple
}
235
 
236 11 ash_riple
proc initTrigConfig {} {
237
        global triggerAddr
238
        global triggerData
239
        global triggerPnum
240
        if {[set triggerAddr]==""} {
241 20 ash_riple
                set triggerAddr 00000000
242 11 ash_riple
        }
243
        if {[set triggerData]==""} {
244
                set triggerData a5a5a5a5
245
        }
246
        if {[set triggerPnum]==""} {
247
                set triggerPnum 0
248
        }
249
}
250
 
251 6 ash_riple
proc updateTrigger {{trigCmd 0}} {
252 2 ash_riple
        global triggerAddr
253
        global triggerData
254 11 ash_riple
        global triggerPnum
255 6 ash_riple
        global trig_wren
256
        global trig_rden
257
        global trig_aden
258
        global trig_daen
259
        set    triggerValue [format "%1X" [expr $trig_aden*8+$trig_daen*4+0]]
260
        append triggerValue [format "%1X" [expr $trig_wren*8+$trig_rden*4+$trigCmd]]
261 2 ash_riple
        append triggerValue $triggerAddr
262
        append triggerValue $triggerData
263 15 ash_riple
        config_trig 2 $triggerValue [format "%03X" $triggerPnum]
264 2 ash_riple
}
265
 
266
proc startTrigger {} {
267 6 ash_riple
        global trig_wren
268
        global trig_rden
269
        global trig_aden
270
        global trig_daen
271 17 ash_riple
        global log
272
        if {[expr $trig_wren+$trig_rden]==2} {
273
                $log insert end "\nWarning: @WR & @RD, unreachable trigger condition.\n"
274
        }
275 6 ash_riple
        set trigEnable [expr $trig_wren+$trig_rden+$trig_aden+$trig_daen]
276
        if {$trigEnable>0} {
277
                updateTrigger 2
278
                reset_fifo 0
279
                query_usedw 0
280
                updateTrigger 3
281
        } else {
282
                updateTrigger 0
283
        }
284 2 ash_riple
}
285
 
286
proc reset_fifo_ptr {} {
287
        reset_fifo 0
288
        query_usedw 0
289
}
290
 
291
proc query_fifo_usedw {} {
292
        query_usedw 0
293
}
294
 
295
proc read_fifo_content {} {
296
        global log
297
        global fifoUsedw
298
        $log insert end "\n****************************************\n"
299
        for {set i 0} {$i<$fifoUsedw} {incr i} {
300
                set fifoContent [read_fifo 0]
301 6 ash_riple
                set ok_trig [expr [format "%d" 0x[string index $fifoContent 0]]/2]
302
                set wr_cptr [expr [format "%d" 0x[string index $fifoContent 0]]%2]
303 12 ash_riple
                set tm_cptr [format "%d"       0x[string range $fifoContent  1  8]]
304 20 ash_riple
                set ad_cptr                      [string range $fifoContent  9 16]
305
                set da_cptr                      [string range $fifoContent 17 24]
306 6 ash_riple
                if $ok_trig {
307
                        $log insert end "@@@@@@@@@@@@@@@@@@@@\n"
308
                }
309
                if $wr_cptr {
310 20 ash_riple
                        $log insert end "wr 0x$ad_cptr 0x$da_cptr @$tm_cptr\n"
311 6 ash_riple
                } else {
312 20 ash_riple
                        $log insert end "rd 0x$ad_cptr 0x$da_cptr @$tm_cptr\n"
313 6 ash_riple
                }
314 2 ash_riple
        }
315
        query_usedw 0
316
}
317
 
318
proc clear_log {} {
319
        global log
320
        $log delete insert end
321
}
322
 
323
proc quit {} {
324
        global exit_console
325 20 ash_riple
        destroy .mainframe
326
        destroy .
327 2 ash_riple
        set exit_console 1
328
}
329
 
330
# set the QuartusII special Tk command
331
init_tk
332
set exit_console 0
333
 
334
# set the main window
335 20 ash_riple
wm withdraw .
336
toplevel .mainframe
337
wm title .mainframe "www.OpenCores.org: uP Transaction Monitor"
338
pack propagate .mainframe true
339 2 ash_riple
 
340 6 ash_riple
# set the www.OpenCores.org logo
341 20 ash_riple
frame .mainframe.fig -bg white
342
pack .mainframe.fig -expand true -fill both
343 6 ash_riple
image create photo logo -format gif -file "../common/OpenCores.gif"
344 20 ash_riple
label .mainframe.fig.logo -image logo -bg white
345
pack .mainframe.fig.logo
346 2 ash_riple
 
347 6 ash_riple
# set the JTAG utility
348 20 ash_riple
frame .mainframe.jtag -relief groove -borderwidth 5
349
pack .mainframe.jtag
350
button .mainframe.jtag.scan -text {Scan JTAG Chain} -command {scan_chain}
351
button .mainframe.jtag.select -text {Select JTAG Device :} -command {select_device $cableNum $deviceNum}
352
button .mainframe.jtag.deselect -text {DeSelect JTAG Device} -command {close_jtag_device}
353
label .mainframe.jtag.cable -text {Cable @}
354
label .mainframe.jtag.devic -text {Device @}
355
entry .mainframe.jtag.cable_num -textvariable cableNum -width 5
356
entry .mainframe.jtag.devic_num -textvariable deviceNum -width 5
357
pack .mainframe.jtag.scan .mainframe.jtag.select \
358
     .mainframe.jtag.cable .mainframe.jtag.cable_num \
359
     .mainframe.jtag.devic .mainframe.jtag.devic_num \
360
     .mainframe.jtag.deselect \
361 6 ash_riple
     -side left -ipadx 0
362 2 ash_riple
 
363
# set the inclusive address entries
364 20 ash_riple
frame .mainframe.f1 -relief groove -borderwidth 5
365
pack .mainframe.f1
366
label .mainframe.f1.incl_addr -text {Inclusive Addr:}
367
entry .mainframe.f1.address_span1 -textvariable address_span1 -width 8
368
entry .mainframe.f1.address_span2 -textvariable address_span2 -width 8
369
entry .mainframe.f1.address_span3 -textvariable address_span3 -width 8
370
entry .mainframe.f1.address_span4 -textvariable address_span4 -width 8
371
entry .mainframe.f1.address_span5 -textvariable address_span5 -width 8
372
entry .mainframe.f1.address_span6 -textvariable address_span6 -width 8
373
entry .mainframe.f1.address_span7 -textvariable address_span7 -width 8
374
entry .mainframe.f1.address_span8 -textvariable address_span8 -width 8
375
checkbutton .mainframe.f1.address_span_en1 -variable address_span_en1
376
checkbutton .mainframe.f1.address_span_en2 -variable address_span_en2
377
checkbutton .mainframe.f1.address_span_en3 -variable address_span_en3
378
checkbutton .mainframe.f1.address_span_en4 -variable address_span_en4
379
checkbutton .mainframe.f1.address_span_en5 -variable address_span_en5
380
checkbutton .mainframe.f1.address_span_en6 -variable address_span_en6
381
checkbutton .mainframe.f1.address_span_en7 -variable address_span_en7
382
checkbutton .mainframe.f1.address_span_en8 -variable address_span_en8
383
label .mainframe.f1.address_span_text1 -text {H:}
384
label .mainframe.f1.address_span_text2 -text {L:}
385
label .mainframe.f1.address_span_text3 -text {H:}
386
label .mainframe.f1.address_span_text4 -text {L:}
387
label .mainframe.f1.address_span_text5 -text {H:}
388
label .mainframe.f1.address_span_text6 -text {L:}
389
label .mainframe.f1.address_span_text7 -text {H:}
390
label .mainframe.f1.address_span_text8 -text {L:}
391
pack .mainframe.f1.incl_addr \
392
     .mainframe.f1.address_span_en1 .mainframe.f1.address_span_text1 .mainframe.f1.address_span1 .mainframe.f1.address_span_text2 .mainframe.f1.address_span2 \
393
     .mainframe.f1.address_span_en3 .mainframe.f1.address_span_text3 .mainframe.f1.address_span3 .mainframe.f1.address_span_text4 .mainframe.f1.address_span4 \
394
     .mainframe.f1.address_span_en5 .mainframe.f1.address_span_text5 .mainframe.f1.address_span5 .mainframe.f1.address_span_text6 .mainframe.f1.address_span6 \
395
     .mainframe.f1.address_span_en7 .mainframe.f1.address_span_text7 .mainframe.f1.address_span7 .mainframe.f1.address_span_text8 .mainframe.f1.address_span8 \
396 6 ash_riple
     -side left -ipadx 0
397 2 ash_riple
 
398
# set the exclusive address entries
399 20 ash_riple
frame .mainframe.f2 -relief groove -borderwidth 5
400
pack .mainframe.f2
401
label .mainframe.f2.excl_addr -text {Exclusive Addr:}
402
entry .mainframe.f2.address_span9  -textvariable address_span9  -width 8
403
entry .mainframe.f2.address_span10 -textvariable address_span10 -width 8
404
entry .mainframe.f2.address_span11 -textvariable address_span11 -width 8
405
entry .mainframe.f2.address_span12 -textvariable address_span12 -width 8
406
entry .mainframe.f2.address_span13 -textvariable address_span13 -width 8
407
entry .mainframe.f2.address_span14 -textvariable address_span14 -width 8
408
entry .mainframe.f2.address_span15 -textvariable address_span15 -width 8
409
entry .mainframe.f2.address_span16 -textvariable address_span16 -width 8
410
checkbutton .mainframe.f2.address_span_en9  -variable address_span_en9
411
checkbutton .mainframe.f2.address_span_en10 -variable address_span_en10
412
checkbutton .mainframe.f2.address_span_en11 -variable address_span_en11
413
checkbutton .mainframe.f2.address_span_en12 -variable address_span_en12
414
checkbutton .mainframe.f2.address_span_en13 -variable address_span_en13
415
checkbutton .mainframe.f2.address_span_en14 -variable address_span_en14
416
checkbutton .mainframe.f2.address_span_en15 -variable address_span_en15
417
checkbutton .mainframe.f2.address_span_en16 -variable address_span_en16
418
label .mainframe.f2.address_span_text1 -text {H:}
419
label .mainframe.f2.address_span_text2 -text {L:}
420
label .mainframe.f2.address_span_text3 -text {H:}
421
label .mainframe.f2.address_span_text4 -text {L:}
422
label .mainframe.f2.address_span_text5 -text {H:}
423
label .mainframe.f2.address_span_text6 -text {L:}
424
label .mainframe.f2.address_span_text7 -text {H:}
425
label .mainframe.f2.address_span_text8 -text {L:}
426
pack .mainframe.f2.excl_addr \
427
     .mainframe.f2.address_span_en9  .mainframe.f2.address_span_text1 .mainframe.f2.address_span9  .mainframe.f2.address_span_text2 .mainframe.f2.address_span10 \
428
     .mainframe.f2.address_span_en11 .mainframe.f2.address_span_text3 .mainframe.f2.address_span11 .mainframe.f2.address_span_text4 .mainframe.f2.address_span12 \
429
     .mainframe.f2.address_span_en13 .mainframe.f2.address_span_text5 .mainframe.f2.address_span13 .mainframe.f2.address_span_text6 .mainframe.f2.address_span14 \
430
     .mainframe.f2.address_span_en15 .mainframe.f2.address_span_text7 .mainframe.f2.address_span15 .mainframe.f2.address_span_text8 .mainframe.f2.address_span16 \
431 6 ash_riple
     -side left -ipadx 0
432
initAddrConfig
433
 
434
# set the address configuration buttons
435 20 ash_riple
frame .mainframe.addr_cnfg -relief groove -borderwidth 5
436
pack .mainframe.addr_cnfg
437
checkbutton .mainframe.addr_cnfg.wren -text {WR} -variable addr_wren
438
checkbutton .mainframe.addr_cnfg.rden -text {RD} -variable addr_rden
439
button .mainframe.addr_cnfg.config -text {Apply Address Filter} -command {updateAddrConfig}
440
pack .mainframe.addr_cnfg.wren .mainframe.addr_cnfg.rden .mainframe.addr_cnfg.config \
441 6 ash_riple
     -side left -ipadx 0
442
 
443 2 ash_riple
# set the transaction trigger controls
444 20 ash_riple
frame .mainframe.trig -relief groove -borderwidth 5
445
pack .mainframe.trig
446
button .mainframe.trig.starttrig -text {Apply Trigger Condition} -command {startTrigger}
447
entry .mainframe.trig.trigvalue_addr -textvar triggerAddr -width 8
448
entry .mainframe.trig.trigvalue_data -textvar triggerData -width 8
449
checkbutton .mainframe.trig.trigaddr -text {@Addr:} -variable trig_aden
450
checkbutton .mainframe.trig.trigdata -text {@Data:} -variable trig_daen
451
checkbutton .mainframe.trig.wren -text {@WR} -variable trig_wren
452
checkbutton .mainframe.trig.rden -text {@RD} -variable trig_rden
453
label .mainframe.trig.pnum -text {Pre-Capture:}
454
entry .mainframe.trig.trigvalue_pnum -textvar triggerPnum -width 4
455
pack .mainframe.trig.pnum .mainframe.trig.trigvalue_pnum \
456
     .mainframe.trig.wren .mainframe.trig.rden \
457
     .mainframe.trig.trigaddr .mainframe.trig.trigvalue_addr \
458
     .mainframe.trig.trigdata .mainframe.trig.trigvalue_data \
459
     .mainframe.trig.starttrig \
460 6 ash_riple
     -side left -ipadx 0
461 11 ash_riple
initTrigConfig
462 2 ash_riple
 
463
# set the control buttons
464 20 ash_riple
frame .mainframe.fifo -relief groove -borderwidth 5
465
pack .mainframe.fifo
466
button .mainframe.fifo.reset -text {Reset FIFO} -command {reset_fifo_ptr}
467
button .mainframe.fifo.loop -text {Query Used Word} -command {query_fifo_usedw}
468
label .mainframe.fifo.usedw  -textvariable fifoUsedw -relief sunken -width 4
469
button .mainframe.fifo.read     -text {Read FIFO} -command {read_fifo_content}
470
button .mainframe.fifo.clear -text {Clear Log} -command {clear_log}
471
button .mainframe.fifo.quit -text {Quit} -command {quit}
472
pack .mainframe.fifo.reset .mainframe.fifo.loop .mainframe.fifo.usedw .mainframe.fifo.read .mainframe.fifo.clear .mainframe.fifo.quit \
473 6 ash_riple
     -side left -ipadx 0
474 2 ash_riple
 
475
# set the log window
476 20 ash_riple
frame .mainframe.log -relief groove -borderwidth 5
477
set log [text .mainframe.log.text -width 80 -height 25 \
478 2 ash_riple
        -borderwidth 2 -relief sunken -setgrid true \
479 20 ash_riple
        -yscrollcommand {.mainframe.log.scroll set}]
480
scrollbar .mainframe.log.scroll -command {.mainframe.log.text yview}
481
pack .mainframe.log.scroll -side right -fill y
482
pack .mainframe.log.text -side left -fill both -expand true
483
pack .mainframe.log -side top -fill both -expand true
484 2 ash_riple
 
485
# make the program wait for exit signal
486
vwait exit_console
487
 

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.