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

Subversion Repositories bustap-jtag

[/] [bustap-jtag/] [trunk/] [sim/] [altera/] [virtual_jtag_stimulus.tcl] - Blame information for rev 9

Go to most recent revision | Details | Compare with Previous | View Log

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

powered by: WebSVN 2.1.0

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