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 6

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

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

powered by: WebSVN 2.1.0

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