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 10

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 10 ash_riple
        $log insert end "`define USE_SIM_STIMULUS\n\n"
384 9 ash_riple
        $log insert end "`define FIFO_SLD_SIM_ACTION $fifo_sim_act\n"
385
        $log insert end "`define FIFO_SLD_SIM_N_SCAN $fifo_sim_num\n"
386
        $log insert end "`define FIFO_SLD_SIM_T_LENG $fifo_sim_len\n\n"
387
        $log insert end "`define ADDR_SLD_SIM_ACTION $addr_sim_act\n"
388
        $log insert end "`define ADDR_SLD_SIM_N_SCAN $addr_sim_num\n"
389
        $log insert end "`define ADDR_SLD_SIM_T_LENG $addr_sim_len\n\n"
390
        $log insert end "`define TRIG_SLD_SIM_ACTION $trig_sim_act\n"
391
        $log insert end "`define TRIG_SLD_SIM_N_SCAN $trig_sim_num\n"
392
        $log insert end "`define TRIG_SLD_SIM_T_LENG $trig_sim_len\n\n"
393
 
394 10 ash_riple
        set fileId [open ../../rtl/altera/jtag_sim_define.h w]
395 9 ash_riple
        puts $fileId [$log get 1.0 end]
396
        close $fileId
397
}
398
 
399
proc quit_console {} {
400
        global exit_console
401
        destroy .console
402
        set exit_console 1
403
}
404
 
405
proc back_sim {} {
406
        global exit_console
407
        #destroy .console
408
        set exit_console 1
409
}
410
 
411
proc start_sim {} {
412
        do sim.do
413
}
414
 
415
proc pause_sim {} {
416
        vsim_break
417
}
418
 
419
# initialize
420
set exit_console 0
421
reset_stimulus
422
destroy .console
423
 
424
# set the main window
425
toplevel .console
426
wm title .console "www.OpenCores.org: uP Transaction Monitor: Simulation Console"
427
pack propagate .console true
428
 
429
# set the www.OpenCores.org logo
430
frame .console.fig -bg white
431
pack .console.fig -expand true -fill both
432
image create photo logo -format gif -file "../../cmd/common/OpenCores.gif"
433
label .console.fig.logo -image logo -bg white
434
pack .console.fig.logo
435
 
436
# set the inclusive address entries
437
frame .console.f1 -relief groove -borderwidth 5
438
pack .console.f1
439
label .console.f1.incl_addr -text {Inclusive Addr:}
440
entry .console.f1.address_span1 -textvariable address_span1 -width 8
441
entry .console.f1.address_span2 -textvariable address_span2 -width 8
442
entry .console.f1.address_span3 -textvariable address_span3 -width 8
443
entry .console.f1.address_span4 -textvariable address_span4 -width 8
444
entry .console.f1.address_span5 -textvariable address_span5 -width 8
445
entry .console.f1.address_span6 -textvariable address_span6 -width 8
446
entry .console.f1.address_span7 -textvariable address_span7 -width 8
447
entry .console.f1.address_span8 -textvariable address_span8 -width 8
448
checkbutton .console.f1.address_span_en1 -variable address_span_en1
449
checkbutton .console.f1.address_span_en2 -variable address_span_en2
450
checkbutton .console.f1.address_span_en3 -variable address_span_en3
451
checkbutton .console.f1.address_span_en4 -variable address_span_en4
452
checkbutton .console.f1.address_span_en5 -variable address_span_en5
453
checkbutton .console.f1.address_span_en6 -variable address_span_en6
454
checkbutton .console.f1.address_span_en7 -variable address_span_en7
455
checkbutton .console.f1.address_span_en8 -variable address_span_en8
456
pack .console.f1.incl_addr \
457
     .console.f1.address_span_en1 .console.f1.address_span1 \
458
     .console.f1.address_span_en2 .console.f1.address_span2 \
459
     .console.f1.address_span_en3 .console.f1.address_span3 \
460
     .console.f1.address_span_en4 .console.f1.address_span4 \
461
     .console.f1.address_span_en5 .console.f1.address_span5 \
462
     .console.f1.address_span_en6 .console.f1.address_span6 \
463
     .console.f1.address_span_en7 .console.f1.address_span7 \
464
     .console.f1.address_span_en8 .console.f1.address_span8 \
465
     -side left -ipadx 0
466
 
467
# set the exclusive address entries
468
frame .console.f2 -relief groove -borderwidth 5
469
pack .console.f2
470
label .console.f2.excl_addr -text {Exclusive Addr:}
471
entry .console.f2.address_span9  -textvariable address_span9  -width 8
472
entry .console.f2.address_span10 -textvariable address_span10 -width 8
473
entry .console.f2.address_span11 -textvariable address_span11 -width 8
474
entry .console.f2.address_span12 -textvariable address_span12 -width 8
475
entry .console.f2.address_span13 -textvariable address_span13 -width 8
476
entry .console.f2.address_span14 -textvariable address_span14 -width 8
477
entry .console.f2.address_span15 -textvariable address_span15 -width 8
478
entry .console.f2.address_span16 -textvariable address_span16 -width 8
479
checkbutton .console.f2.address_span_en9  -variable address_span_en9
480
checkbutton .console.f2.address_span_en10 -variable address_span_en10
481
checkbutton .console.f2.address_span_en11 -variable address_span_en11
482
checkbutton .console.f2.address_span_en12 -variable address_span_en12
483
checkbutton .console.f2.address_span_en13 -variable address_span_en13
484
checkbutton .console.f2.address_span_en14 -variable address_span_en14
485
checkbutton .console.f2.address_span_en15 -variable address_span_en15
486
checkbutton .console.f2.address_span_en16 -variable address_span_en16
487
pack .console.f2.excl_addr \
488
     .console.f2.address_span_en9  .console.f2.address_span9  \
489
     .console.f2.address_span_en10 .console.f2.address_span10 \
490
     .console.f2.address_span_en11 .console.f2.address_span11 \
491
     .console.f2.address_span_en12 .console.f2.address_span12 \
492
     .console.f2.address_span_en13 .console.f2.address_span13 \
493
     .console.f2.address_span_en14 .console.f2.address_span14 \
494
     .console.f2.address_span_en15 .console.f2.address_span15 \
495
     .console.f2.address_span_en16 .console.f2.address_span16 \
496
     -side left -ipadx 0
497
initAddrConfig
498
 
499
# set the address configuration buttons
500
frame .console.addr_cnfg -relief groove -borderwidth 5
501
pack .console.addr_cnfg
502
checkbutton .console.addr_cnfg.wren -text {WR} -variable addr_wren
503
checkbutton .console.addr_cnfg.rden -text {RD} -variable addr_rden
504
button .console.addr_cnfg.config -text {Apply Address Filter} -command {updateAddrConfig}
505
pack .console.addr_cnfg.wren .console.addr_cnfg.rden .console.addr_cnfg.config \
506
     -side left -ipadx 0
507
 
508
# set the transaction trigger controls
509
frame .console.trig -relief groove -borderwidth 5
510
pack .console.trig
511
button .console.trig.starttrig -text {Apply Trigger Condition} -command {startTrigger}
512
entry .console.trig.trigvalue_addr -textvar triggerAddr -width 4
513
entry .console.trig.trigvalue_data -textvar triggerData -width 8
514
checkbutton .console.trig.trigaddr -text {@Addr:} -variable trig_aden
515
checkbutton .console.trig.trigdata -text {@Data:} -variable trig_daen
516
checkbutton .console.trig.wren -text {@WR} -variable trig_wren
517
checkbutton .console.trig.rden -text {@RD} -variable trig_rden
518
pack .console.trig.wren .console.trig.rden \
519
     .console.trig.trigaddr .console.trig.trigvalue_addr \
520
     .console.trig.trigdata .console.trig.trigvalue_data \
521
     .console.trig.starttrig \
522
     -side left -ipadx 0
523
initTrigConfig
524
 
525
# set the control buttons
526
frame .console.fifo -relief groove -borderwidth 5
527
pack .console.fifo
528
button .console.fifo.reset -text {Reset FIFO} -command {reset_fifo_ptr}
529
button .console.fifo.loop -text {Query Used Word} -command {query_fifo_usedw}
530
label .console.fifo.usedw  -textvariable fifoUsedw -relief sunken -width 4
531
button .console.fifo.read       -text {Read FIFO} -command {read_fifo_content}
532
pack .console.fifo.reset .console.fifo.loop .console.fifo.usedw .console.fifo.read \
533
     -side left -ipadx 0
534
 
535
# set the control buttons
536
frame .console.sim -relief groove -borderwidth 5
537
pack .console.sim
538
button .console.sim.reset -text {Reset Stimulus} -command {reset_stimulus}
539
button .console.sim.generate -text {Generate Stimulus} -command {generate_stimulus}
540
button .console.sim.start -text {Start Simulation} -command {start_sim}
541
button .console.sim.pause -text {Pause Simulation} -command {pause_sim}
542
button .console.sim.back -text {Back to Simulation} -command {back_sim}
543
button .console.sim.quit -text {Quit} -command {quit_console}
544
pack .console.sim.reset .console.sim.generate .console.sim.back .console.sim.quit \
545
     -side left -ipadx 0
546
 
547
# set the log window
548
frame .console.log -relief groove -borderwidth 5
549
set log [text .console.log.text -width 80 -height 25 \
550
        -borderwidth 2 -relief sunken -setgrid true \
551
        -yscrollcommand {.console.log.scroll set}]
552
scrollbar .console.log.scroll -command {.console.log.text yview}
553
pack .console.log.scroll -side right -fill y
554
pack .console.log.text -side left -fill both -expand true
555
pack .console.log -side top -fill both -expand true
556
 
557
# make the program wait for exit signal
558
vwait exit_console
559
 

powered by: WebSVN 2.1.0

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