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

Subversion Repositories bustap-jtag

[/] [bustap-jtag/] [trunk/] [cmd/] [xilinx/] [chipscope_vio_console.tcl] - Diff between revs 19 and 20

Only display areas with differences | Details | Blame | View Log

Rev 19 Rev 20
##**************************************************************
##**************************************************************
## Module             : chipscope_vio_console.tcl
## Module             : chipscope_vio_console.tcl
## Platform           : Windows xp sp2
## Platform           : Windows xp sp2
## Author             : Bibo Yang  (ash_riple@hotmail.com)
## Author             : Bibo Yang  (ash_riple@hotmail.com)
## Organization       : www.opencores.org
## Organization       : www.opencores.org
## Revision           : 2.3
## Revision           : 2.5
## Date               : 2012/11/22
## Date               : 2014/02/08
## Description        : Tcl/Tk GUI for the up_monitor
## Description        : Tcl/Tk GUI for the up_monitor
##**************************************************************
##**************************************************************
 
 
############################
############################
## include the XILINX procs
## include the XILINX procs
############################
############################
# Get the Cse DLL's and globals
# Get the Cse DLL's and globals
if {[info exists env(XIL_CSE_TCL)]} {
if {[info exists env(XIL_CSE_TCL)]} {
    if {[string length $env(XIL_CSE_TCL)] > 0} {
    if {[string length $env(XIL_CSE_TCL)] > 0} {
        puts "Sourcing from XIL_CSE_TCL: $env(XIL_CSE_TCL) ..."
        puts "Sourcing from XIL_CSE_TCL: $env(XIL_CSE_TCL) ..."
        source $env(XIL_CSE_TCL)/csejtag.tcl
        source $env(XIL_CSE_TCL)/csejtag.tcl
        source $env(XIL_CSE_TCL)/csefpga.tcl
        source $env(XIL_CSE_TCL)/csefpga.tcl
        source $env(XIL_CSE_TCL)/csecore.tcl
        source $env(XIL_CSE_TCL)/csecore.tcl
        source $env(XIL_CSE_TCL)/csevio.tcl
        source $env(XIL_CSE_TCL)/csevio.tcl
    } else {
    } else {
        puts "Sourcing from XILINX: $env(XILINX)/cse/tcl ..."
        puts "Sourcing from XILINX: $env(XILINX)/cse/tcl ..."
        source $env(XILINX)/cse/tcl/csejtag.tcl
        source $env(XILINX)/cse/tcl/csejtag.tcl
        source $env(XILINX)/cse/tcl/csefpga.tcl
        source $env(XILINX)/cse/tcl/csefpga.tcl
        source $env(XILINX)/cse/tcl/csecore.tcl
        source $env(XILINX)/cse/tcl/csecore.tcl
        source $env(XILINX)/cse/tcl/csevio.tcl
        source $env(XILINX)/cse/tcl/csevio.tcl
    }
    }
} else {
} else {
    puts "Sourcing from XILINX: $env(XILINX)/cse/tcl ..."
    puts "Sourcing from XILINX: $env(XILINX)/cse/tcl ..."
    source $env(XILINX)/cse/tcl/csejtag.tcl
    source $env(XILINX)/cse/tcl/csejtag.tcl
    source $env(XILINX)/cse/tcl/csefpga.tcl
    source $env(XILINX)/cse/tcl/csefpga.tcl
    source $env(XILINX)/cse/tcl/csecore.tcl
    source $env(XILINX)/cse/tcl/csecore.tcl
    source $env(XILINX)/cse/tcl/csevio.tcl
    source $env(XILINX)/cse/tcl/csevio.tcl
}
}
 
 
namespace import ::chipscope::*
namespace import ::chipscope::*
 
 
###########################
###########################
## define cable parameters
## define cable parameters
###########################
###########################
# Create global variables
# Create global variables
set ILA_STATUS_WORD_BIT_LEN  512
set ILA_STATUS_WORD_BIT_LEN  512
 
 
# Parallel IV Cable
# Parallel IV Cable
set PARALLEL_CABLE_ARGS [list "port=LPT1" "frequency=2500000"]
set PARALLEL_CABLE_ARGS [list "port=LPT1" "frequency=2500000"]
# "frequency=5000000 | 2500000 | 1250000 | 625000 | 200000"
# "frequency=5000000 | 2500000 | 1250000 | 625000 | 200000"
 
 
# Platform USB Cable
# Platform USB Cable
set PLATFORM_USB_CABLE_ARGS [list "port=USB2" "frequency=3000000"]
set PLATFORM_USB_CABLE_ARGS [list "port=USB2" "frequency=3000000"]
# frequency="12000000 | 6000000 | 3000000 | 1500000 | 750000"
# frequency="12000000 | 6000000 | 3000000 | 1500000 | 750000"
 
 
# Digilent Cable
# Digilent Cable
# Digilent Cables have default arguments, if there is only one cable connected it will automatically connect to it.
# Digilent Cables have default arguments, if there is only one cable connected it will automatically connect to it.
set DIGILENT_CABLE_ARGS {}
set DIGILENT_CABLE_ARGS {}
 
 
###########################
###########################
## setup the chain
## setup the chain
###########################
###########################
proc scan_chain {} {
proc scan_chain {} {
        global PLATFORM_USB_CABLE_ARGS
        global PLATFORM_USB_CABLE_ARGS
        global CSEJTAG_TARGET_PLATFORMUSB
        global CSEJTAG_TARGET_PLATFORMUSB
        global PARALLEL_CABLE_ARGS
        global PARALLEL_CABLE_ARGS
        global CSEJTAG_TARGET_PARALLEL
        global CSEJTAG_TARGET_PARALLEL
        global DIGILENT_CABLE_ARGS
        global DIGILENT_CABLE_ARGS
        global CSEJTAG_TARGET_DIGILENT
        global CSEJTAG_TARGET_DIGILENT
        global CSEJTAG_SCAN_DEFAULT
        global CSEJTAG_SCAN_DEFAULT
        global CSEJTAG_LOCKED_ME
        global CSEJTAG_LOCKED_ME
        global CSEJTAG_TEST_LOGIC_RESET
        global CSEJTAG_TEST_LOGIC_RESET
        global CSEJTAG_SHIFT_READ
        global CSEJTAG_SHIFT_READ
        global CSEJTAG_RUN_TEST_IDLE
        global CSEJTAG_RUN_TEST_IDLE
 
 
        global log
        global log
        $log insert end "JTAG Chain Scanning report:\n"
        $log insert end "JTAG Chain Scanning report:\n"
        $log insert end "****************************************\n"
        $log insert end "****************************************\n"
        global blaster_cables
        global blaster_cables
        set blaster_cables [list -usb -par -dig]
        set blaster_cables [list -usb -par -dig]
        set cable_num 0
        set cable_num 0
        foreach blaster_cable $blaster_cables {
        foreach blaster_cable $blaster_cables {
                incr cable_num
                incr cable_num
                if {[string equal "-usb" $blaster_cable]} {
                if {[string equal "-usb" $blaster_cable]} {
                        set blaster_cable_name "Platform USB Cable"
                        set blaster_cable_name "Platform USB Cable"
                } elseif {[string equal "-par" $blaster_cable]} {
                } elseif {[string equal "-par" $blaster_cable]} {
                        set blaster_cable_name "Parallel Cable"
                        set blaster_cable_name "Parallel Cable"
                } elseif {[string equal "-dig" $blaster_cable]} {
                } elseif {[string equal "-dig" $blaster_cable]} {
                        set blaster_cable_name "Digilent Cable"
                        set blaster_cable_name "Digilent Cable"
                }
                }
                $log insert end "@$cable_num: $blaster_cable_name\n"
                $log insert end "@$cable_num: $blaster_cable_name\n"
        }
        }
        $log insert end "\n****************************************\n"
        $log insert end "\n****************************************\n"
 
 
        global device_list
        global device_list
        set device_list ""
        set device_list ""
        foreach blaster_cable $blaster_cables {
        foreach blaster_cable $blaster_cables {
                if {[string equal "-usb" $blaster_cable]} {
                if {[string equal "-usb" $blaster_cable]} {
                        set blaster_cable_name "Platform USB Cable"
                        set blaster_cable_name "Platform USB Cable"
                        set CABLE_NAME $CSEJTAG_TARGET_PLATFORMUSB
                        set CABLE_NAME $CSEJTAG_TARGET_PLATFORMUSB
                        set CABLE_ARGS $PLATFORM_USB_CABLE_ARGS
                        set CABLE_ARGS $PLATFORM_USB_CABLE_ARGS
                } elseif {[string equal "-par" $blaster_cable]} {
                } elseif {[string equal "-par" $blaster_cable]} {
                        set blaster_cable_name "Parallel Cable"
                        set blaster_cable_name "Parallel Cable"
                        set CABLE_NAME $CSEJTAG_TARGET_PARALLEL
                        set CABLE_NAME $CSEJTAG_TARGET_PARALLEL
                        set CABLE_ARGS $PARALLEL_CABLE_ARGS
                        set CABLE_ARGS $PARALLEL_CABLE_ARGS
                } elseif {[string equal "-dig" $blaster_cable]} {
                } elseif {[string equal "-dig" $blaster_cable]} {
                        set blaster_cable_name "Digilent Cable"
                        set blaster_cable_name "Digilent Cable"
                        set CABLE_NAME $CSEJTAG_TARGET_DIGILENT
                        set CABLE_NAME $CSEJTAG_TARGET_DIGILENT
                        set CABLE_ARGS $DIGILENT_CABLE_ARGS
                        set CABLE_ARGS $DIGILENT_CABLE_ARGS
                }
                }
                $log insert end "$blaster_cable_name:\n"
                $log insert end "$blaster_cable_name:\n"
                lappend device_list $blaster_cable_name
                lappend device_list $blaster_cable_name
 
 
                if {[catch {
                if {[catch {
                # start chipscope session
                # start chipscope session
                set handle [csejtag_session create 0 $blaster_cable]
                set handle [csejtag_session create 0 $blaster_cable]
                # open cable
                # open cable
                csejtag_target open $handle $CABLE_NAME 0 $CABLE_ARGS
                csejtag_target open $handle $CABLE_NAME 0 $CABLE_ARGS
                # lock cable
                # lock cable
                set cablelock [csejtag_target lock $handle 5000]
                set cablelock [csejtag_target lock $handle 5000]
 
 
                csejtag_tap autodetect_chain $handle $CSEJTAG_SCAN_DEFAULT
                csejtag_tap autodetect_chain $handle $CSEJTAG_SCAN_DEFAULT
                set deviceCount [csejtag_tap get_device_count $handle]
                set deviceCount [csejtag_tap get_device_count $handle]
                csejtag_tap navigate $handle $CSEJTAG_TEST_LOGIC_RESET 0 0
                csejtag_tap navigate $handle $CSEJTAG_TEST_LOGIC_RESET 0 0
                for {set deviceIndex 0} {$deviceIndex < $deviceCount} {incr deviceIndex} {
                for {set deviceIndex 0} {$deviceIndex < $deviceCount} {incr deviceIndex} {
                        set idcodeBuffer [csejtag_tap get_device_idcode $handle $deviceIndex]
                        set idcodeBuffer [csejtag_tap get_device_idcode $handle $deviceIndex]
                        set deviceName [csejtag_db get_device_name_for_idcode $handle $idcodeBuffer]
                        set deviceName [csejtag_db get_device_name_for_idcode $handle $idcodeBuffer]
                        set idcode [format "%x" [binaryStringToInt $idcodeBuffer]]
                        set idcode [format "%x" [binaryStringToInt $idcodeBuffer]]
                        $log insert end "@[expr $deviceIndex+1]: $deviceName (0x$idcode)\n"
                        $log insert end "@[expr $deviceIndex+1]: $deviceName (0x$idcode)\n"
                        lappend device_list $deviceName
                        lappend device_list $deviceName
                }
                }
 
 
#altera         #lappend device_list $blaster_cable
#altera         #lappend device_list $blaster_cable
                #if [catch {get_device_names -hardware_name $blaster_cable} error_msg] {
                #if [catch {get_device_names -hardware_name $blaster_cable} error_msg] {
                #       $log insert end $error_msg
                #       $log insert end $error_msg
                #       lappend device_list $error_msg
                #       lappend device_list $error_msg
                #} else {
                #} else {
                #       foreach test_device [get_device_names -hardware_name $blaster_cable] {
                #       foreach test_device [get_device_names -hardware_name $blaster_cable] {
                #               $log insert end "$test_device\n"
                #               $log insert end "$test_device\n"
                #       }
                #       }
                #       lappend device_list [get_device_names -hardware_name $blaster_cable]
                #       lappend device_list [get_device_names -hardware_name $blaster_cable]
                #}
                #}
 
 
                # unlock cable
                # unlock cable
                csejtag_target unlock $handle
                csejtag_target unlock $handle
                # close device
                # close device
                csejtag_target close $handle
                csejtag_target close $handle
                # end chipscope session
                # end chipscope session
                csejtag_session destroy $handle
                csejtag_session destroy $handle
                } result]} {
                } result]} {
                        lappend device_list $result
                        lappend device_list $result
                        $log insert end "$result\n"
                        $log insert end "$result\n"
                }
                }
        }
        }
}
}
 
 
proc open_jtag_device {{blaster_cable "-dig"}} {
proc open_jtag_device {{blaster_cable "-dig"}} {
        global handle
        global handle
        global CABLE_NAME
        global CABLE_NAME
        global CABLE_ARGS
        global CABLE_ARGS
        global CSEJTAG_SCAN_DEFAULT
        global CSEJTAG_SCAN_DEFAULT
 
 
        if {[info exist handle]} { close_jtag_device }
        if {[info exist handle]} { close_jtag_device }
        set handle [csejtag_session create 0 $blaster_cable]
        set handle [csejtag_session create 0 $blaster_cable]
        csejtag_target open $handle $CABLE_NAME 0 $CABLE_ARGS
        csejtag_target open $handle $CABLE_NAME 0 $CABLE_ARGS
        set cablelock [csejtag_target lock $handle 5000]
        set cablelock [csejtag_target lock $handle 5000]
        csejtag_tap autodetect_chain $handle $CSEJTAG_SCAN_DEFAULT
        csejtag_tap autodetect_chain $handle $CSEJTAG_SCAN_DEFAULT
 
 
#altera #open_device -hardware_name $test_cable -device_name $test_device
#altera #open_device -hardware_name $test_cable -device_name $test_device
        ## Retrieve device id code.
        ## Retrieve device id code.
        #device_lock -timeout 5
        #device_lock -timeout 5
        #device_ir_shift -ir_value 6 -no_captured_ir_value
        #device_ir_shift -ir_value 6 -no_captured_ir_value
        #set idcode "0x[device_dr_shift -length 32 -value_in_hex]"
        #set idcode "0x[device_dr_shift -length 32 -value_in_hex]"
        #device_unlock
        #device_unlock
        return 0
        return 0
}
}
 
 
proc close_jtag_device {} {
proc close_jtag_device {} {
        global handle
        global handle
        if {[info exist handle]} {
        if {[info exist handle]} {
                catch {csejtag_target unlock $handle}
                catch {csejtag_target unlock $handle}
                catch {csejtag_target close $handle}
                catch {csejtag_target close $handle}
                catch {csejtag_session destroy $handle}
                catch {csejtag_session destroy $handle}
                unset handle
                unset handle
        }
        }
}
}
 
 
proc select_device {{cableNum 3} {deviceNum 2}} {
proc select_device {{cableNum 3} {deviceNum 2}} {
        global log
        global log
        global device_list
        global device_list
        global blaster_cables
        global blaster_cables
        global handle
        global handle
        global PLATFORM_USB_CABLE_ARGS
        global PLATFORM_USB_CABLE_ARGS
        global CSEJTAG_TARGET_PLATFORMUSB
        global CSEJTAG_TARGET_PLATFORMUSB
        global PARALLEL_CABLE_ARGS
        global PARALLEL_CABLE_ARGS
        global CSEJTAG_TARGET_PARALLEL
        global CSEJTAG_TARGET_PARALLEL
        global DIGILENT_CABLE_ARGS
        global DIGILENT_CABLE_ARGS
        global CSEJTAG_TARGET_DIGILENT
        global CSEJTAG_TARGET_DIGILENT
        global CABLE_NAME
        global CABLE_NAME
        global CABLE_ARGS
        global CABLE_ARGS
 
 
        $log insert end "\n****************************************\n"
        $log insert end "\n****************************************\n"
        set test_cable [lindex $device_list [expr 2*$cableNum-2]]
        set test_cable [lindex $device_list [expr 2*$cableNum-2]]
        $log insert end "Selected Cable : $test_cable\n"
        $log insert end "Selected Cable : $test_cable\n"
        set test_device [lindex $device_list [expr 2*$cableNum-2+($deviceNum)]]
        set test_device [lindex $device_list [expr 2*$cableNum-2+($deviceNum)]]
        $log insert end "Selected Device: $test_device\n"
        $log insert end "Selected Device: $test_device\n"
 
 
        set blaster_cable [lindex $blaster_cables [expr $cableNum-1]]
        set blaster_cable [lindex $blaster_cables [expr $cableNum-1]]
        if {[string equal "-usb" $blaster_cable]} {
        if {[string equal "-usb" $blaster_cable]} {
                set blaster_cable_name "Platform USB Cable"
                set blaster_cable_name "Platform USB Cable"
                set CABLE_NAME $CSEJTAG_TARGET_PLATFORMUSB
                set CABLE_NAME $CSEJTAG_TARGET_PLATFORMUSB
                set CABLE_ARGS $PLATFORM_USB_CABLE_ARGS
                set CABLE_ARGS $PLATFORM_USB_CABLE_ARGS
        } elseif {[string equal "-par" $blaster_cable]} {
        } elseif {[string equal "-par" $blaster_cable]} {
                set blaster_cable_name "Parallel Cable"
                set blaster_cable_name "Parallel Cable"
                set CABLE_NAME $CSEJTAG_TARGET_PARALLEL
                set CABLE_NAME $CSEJTAG_TARGET_PARALLEL
                set CABLE_ARGS $PARALLEL_CABLE_ARGS
                set CABLE_ARGS $PARALLEL_CABLE_ARGS
        } elseif {[string equal "-dig" $blaster_cable]} {
        } elseif {[string equal "-dig" $blaster_cable]} {
                set blaster_cable_name "Digilent Cable"
                set blaster_cable_name "Digilent Cable"
                set CABLE_NAME $CSEJTAG_TARGET_DIGILENT
                set CABLE_NAME $CSEJTAG_TARGET_DIGILENT
                set CABLE_ARGS $DIGILENT_CABLE_ARGS
                set CABLE_ARGS $DIGILENT_CABLE_ARGS
        }
        }
 
 
        open_jtag_device $blaster_cable
        open_jtag_device $blaster_cable
 
 
        global deviceIndex
        global deviceIndex
        set deviceIndex [expr $deviceNum-1]
        set deviceIndex [expr $deviceNum-1]
 
 
        #set test_cable [lindex $device_list [expr 2*$cableNum-2]]
        #set test_cable [lindex $device_list [expr 2*$cableNum-2]]
        #$log insert end "Selected Cable : $test_cable\n"
        #$log insert end "Selected Cable : $test_cable\n"
        #set test_device [lindex [lindex $device_list [expr 2*$cableNum-1]] [expr $deviceNum-1]]
        #set test_device [lindex [lindex $device_list [expr 2*$cableNum-1]] [expr $deviceNum-1]]
        #$log insert end "Selected Device: $test_device\n"
        #$log insert end "Selected Device: $test_device\n"
#altera #set jtagIdCode [open_jtag_device $test_cable $test_device]
#altera #set jtagIdCode [open_jtag_device $test_cable $test_device]
        #$log insert end "Device ID code : $jtagIdCode\n"
        #$log insert end "Device ID code : $jtagIdCode\n"
 
 
        reset_fifo
        reset_fifo
        query_usedw
        query_usedw
}
}
 
 
########################
########################
## operate the VIO core
## operate the VIO core
########################
########################
proc reset_fifo {} {
proc reset_fifo {} {
        global handle
        global handle
        global deviceIndex
        global deviceIndex
        global CSEVIO_SYNC_INPUT
        global CSEVIO_SYNC_INPUT
        global CSEVIO_SYNC_OUTPUT
        global CSEVIO_SYNC_OUTPUT
 
 
        set userRegNumber 1
        set userRegNumber 1
        set coreIndex 0
        set coreIndex 0
        set coreRef [list $deviceIndex $userRegNumber $coreIndex]
        set coreRef [list $deviceIndex $userRegNumber $coreIndex]
 
 
        csevio_init_core $handle $coreRef
        csevio_init_core $handle $coreRef
        csevio_define_signal $handle $coreRef "reset" $CSEVIO_SYNC_OUTPUT 1
        csevio_define_signal $handle $coreRef "reset" $CSEVIO_SYNC_OUTPUT 1
        set outputTclArray(reset) 1
        set outputTclArray(reset) 1
        csevio_write_values $handle $coreRef outputTclArray
        csevio_write_values $handle $coreRef outputTclArray
        set outputTclArray(reset) 0
        set outputTclArray(reset) 0
        csevio_write_values $handle $coreRef outputTclArray
        csevio_write_values $handle $coreRef outputTclArray
        csevio_terminate_core $handle $coreRef
        csevio_terminate_core $handle $coreRef
 
 
        return 0
        return 0
}
}
 
 
proc query_usedw {} {
proc query_usedw {} {
        global fifoUsedw
        global fifoUsedw
        global handle
        global handle
        global deviceIndex
        global deviceIndex
        global CSEVIO_SYNC_INPUT
        global CSEVIO_SYNC_INPUT
        global CSEVIO_SYNC_OUTPUT
        global CSEVIO_SYNC_OUTPUT
 
 
        set userRegNumber 1
        set userRegNumber 1
        set coreIndex 0
        set coreIndex 0
        set coreRef [list $deviceIndex $userRegNumber $coreIndex]
        set coreRef [list $deviceIndex $userRegNumber $coreIndex]
 
 
        csevio_init_core $handle $coreRef
        csevio_init_core $handle $coreRef
        csevio_define_bus $handle $coreRef "usedWord" $CSEVIO_SYNC_INPUT [list 82 83 84 85 86 87 88 89 90 91]
        csevio_define_bus $handle $coreRef "usedWord" $CSEVIO_SYNC_INPUT [list 98 99 100 101 102 103 104 105 106 107]
        csevio_read_values $handle $coreRef inputTclArray
        csevio_read_values $handle $coreRef inputTclArray
        set usedw $inputTclArray(usedWord)
        set usedw $inputTclArray(usedWord)
        csevio_terminate_core $handle $coreRef
        csevio_terminate_core $handle $coreRef
 
 
        set tmp 0x
        set tmp 0x
        append tmp $usedw
        append tmp $usedw
        set usedw [format "%i" $tmp]
        set usedw [format "%i" $tmp]
        set fifoUsedw $usedw
        set fifoUsedw $usedw
        return $usedw
        return $usedw
}
}
 
 
proc read_fifo {} {
proc read_fifo {} {
        global handle
        global handle
        global deviceIndex
        global deviceIndex
        global CSEVIO_SYNC_INPUT
        global CSEVIO_SYNC_INPUT
        global CSEVIO_SYNC_OUTPUT
        global CSEVIO_SYNC_OUTPUT
 
 
        set userRegNumber 1
        set userRegNumber 1
        set coreIndex 0
        set coreIndex 0
        set coreRef [list $deviceIndex $userRegNumber $coreIndex]
        set coreRef [list $deviceIndex $userRegNumber $coreIndex]
 
 
        csevio_init_core $handle $coreRef
        csevio_init_core $handle $coreRef
        csevio_define_signal $handle $coreRef "readen" $CSEVIO_SYNC_OUTPUT 0
        csevio_define_signal $handle $coreRef "readen" $CSEVIO_SYNC_OUTPUT 0
        set outputTclArray(readen) 1
        set outputTclArray(readen) 1
        csevio_write_values $handle $coreRef outputTclArray
        csevio_write_values $handle $coreRef outputTclArray
        set outputTclArray(readen) 0
        set outputTclArray(readen) 0
        csevio_write_values $handle $coreRef outputTclArray
        csevio_write_values $handle $coreRef outputTclArray
        csevio_terminate_core $handle $coreRef
        csevio_terminate_core $handle $coreRef
 
 
        csevio_init_core $handle $coreRef
        csevio_init_core $handle $coreRef
        csevio_define_bus $handle $coreRef "fifoContent" $CSEVIO_SYNC_INPUT [list  0  1  2  3  4  5  6  7  8  9\
        csevio_define_bus $handle $coreRef "fifoContent" $CSEVIO_SYNC_INPUT [list  0  1  2  3  4  5  6  7  8  9\
                                                                                  10 11 12 13 14 15 16 17 18 19\
                                                                                  10 11 12 13 14 15 16 17 18 19\
                                                                                  20 21 22 23 24 25 26 27 28 29\
                                                                                  20 21 22 23 24 25 26 27 28 29\
                                                                                  30 31 32 33 34 35 36 37 38 39\
                                                                                  30 31 32 33 34 35 36 37 38 39\
                                                                                  40 41 42 43 44 45 46 47 48 49\
                                                                                  40 41 42 43 44 45 46 47 48 49\
                                                                                  50 51 52 53 54 55 56 57 58 59\
                                                                                  50 51 52 53 54 55 56 57 58 59\
                                                                                  60 61 62 63 64 65 66 67 68 69\
                                                                                  60 61 62 63 64 65 66 67 68 69\
                                                                                  70 71 72 73 74 75 76 77 78 79\
                                                                                  70 71 72 73 74 75 76 77 78 79\
                                                                                  80 81]
                                                                                  80 81 82 83 84 85 86 87 88 89\
 
                                                                                  90 91 92 93 94 95 96 97]
        csevio_read_values $handle $coreRef inputTclArray
        csevio_read_values $handle $coreRef inputTclArray
        set fifo_data $inputTclArray(fifoContent)
        set fifo_data $inputTclArray(fifoContent)
        csevio_terminate_core $handle $coreRef
        csevio_terminate_core $handle $coreRef
 
 
        return $fifo_data
        return $fifo_data
}
}
 
 
proc config_addr {{mask 0100000000} {mask_id 1}} {
proc config_addr {{mask 0100000000} {mask_id 1}} {
        global log
        global log
        global handle
        global handle
        global deviceIndex
        global deviceIndex
        global CSEVIO_SYNC_INPUT
        global CSEVIO_SYNC_INPUT
        global CSEVIO_SYNC_OUTPUT
        global CSEVIO_SYNC_OUTPUT
 
 
        set userRegNumber 1
        set userRegNumber 1
        set coreIndex 1
        set coreIndex 1
        set coreRef [list $deviceIndex $userRegNumber $coreIndex]
        set coreRef [list $deviceIndex $userRegNumber $coreIndex]
 
 
        set mask_leng [string length $mask]
        set mask_leng [string length $mask]
        if {$mask_leng!=10} {
        if {$mask_leng!=10} {
                $log insert end "\nError: Wrong address mask length @$mask_id: [expr $mask_leng-2]. Expects: 8.\n"
                $log insert end "\nError: Wrong address mask length @$mask_id: [expr $mask_leng-2]. Expects: 8.\n"
 
 
        } else {
        } else {
                csevio_init_core $handle $coreRef
                csevio_init_core $handle $coreRef
                csevio_define_bus $handle $coreRef "addr" $CSEVIO_SYNC_OUTPUT [list  0  1  2  3  4  5  6  7  8  9\
                csevio_define_bus $handle $coreRef "addr" $CSEVIO_SYNC_OUTPUT [list  0  1  2  3  4  5  6  7  8  9\
                                                                                    10 11 12 13 14 15 16 17 18 19\
                                                                                    10 11 12 13 14 15 16 17 18 19\
                                                                                    20 21 22 23 24 25 26 27 28 29\
                                                                                    20 21 22 23 24 25 26 27 28 29\
                                                                                    30 31 32 33 34 35 36 37 38 39]
                                                                                    30 31 32 33 34 35 36 37 38 39]
                set outputTclArray(addr) $mask
                set outputTclArray(addr) $mask
                csevio_write_values $handle $coreRef outputTclArray
                csevio_write_values $handle $coreRef outputTclArray
                csevio_terminate_core $handle $coreRef
                csevio_terminate_core $handle $coreRef
        }
        }
        return 0
        return 0
}
}
 
 
proc config_trig {{trig 00000000000000} {pnum 000}} {
proc config_trig {{trig 00000000000000} {pnum 000}} {
        global log
        global log
        global handle
        global handle
        global deviceIndex
        global deviceIndex
        global CSEVIO_SYNC_INPUT
        global CSEVIO_SYNC_INPUT
        global CSEVIO_SYNC_OUTPUT
        global CSEVIO_SYNC_OUTPUT
 
 
        set userRegNumber 1
        set userRegNumber 1
        set coreIndex 2
        set coreIndex 2
        set coreRef [list $deviceIndex $userRegNumber $coreIndex]
        set coreRef [list $deviceIndex $userRegNumber $coreIndex]
 
 
        set trig_leng [string length $trig]
        set trig_leng [string length $trig]
        if {$trig_leng!=14} {
        if {$trig_leng!=18} {
                $log insert end "\nError: Wrong trigger condition length: [expr $trig_leng-2]. Expects: 4+8.\n"
                $log insert end "\nError: Wrong trigger condition length: [expr $trig_leng-2]. Expects: 8+8.\n"
        } else {
        } else {
        if {[format "%d" 0x$pnum]>=511} {
        if {[format "%d" 0x$pnum]>=511} {
                $log insert end "\nError: Wrong trigger pre-capture value: [format "%d" 0x$pnum]. Expects: 0~510.\n"
                $log insert end "\nError: Wrong trigger pre-capture value: [format "%d" 0x$pnum]. Expects: 0~510.\n"
        } else {
        } else {
                csevio_init_core $handle $coreRef
                csevio_init_core $handle $coreRef
                csevio_define_bus $handle $coreRef "trig" $CSEVIO_SYNC_OUTPUT [list  0  1  2  3  4  5  6  7  8  9\
                csevio_define_bus $handle $coreRef "trig" $CSEVIO_SYNC_OUTPUT [list  0  1  2  3  4  5  6  7  8  9\
                                                                                    10 11 12 13 14 15 16 17 18 19\
                                                                                    10 11 12 13 14 15 16 17 18 19\
                                                                                    20 21 22 23 24 25 26 27 28 29\
                                                                                    20 21 22 23 24 25 26 27 28 29\
                                                                                    30 31 32 33 34 35 36 37 38 39\
                                                                                    30 31 32 33 34 35 36 37 38 39\
                                                                                    40 41 42 43 44 45 46 47 48 49\
                                                                                    40 41 42 43 44 45 46 47 48 49\
                                                                                    50 51 52 53 54 55 56 57 58 59\
                                                                                    50 51 52 53 54 55 56 57 58 59\
                                                                                    60 61 62 63 64 65]
                                                                                    60 61 62 63 64 65 66 67 68 69\
 
                                                                                    70 71 72 73 74 75 76 77 78 79\
 
                                                                                    80 81]
                set outputTclArray(trig) [append pnum $trig]
                set outputTclArray(trig) [append pnum $trig]
                csevio_write_values $handle $coreRef outputTclArray
                csevio_write_values $handle $coreRef outputTclArray
                csevio_terminate_core $handle $coreRef
                csevio_terminate_core $handle $coreRef
        }
        }
        }
        }
        return 0
        return 0
}
}
 
 
##########################
##########################
## upper level operations
## upper level operations
##########################
##########################
proc updateAddrConfig {} {
proc updateAddrConfig {} {
        global address_span1
        global address_span1
        global address_span2
        global address_span2
        global address_span3
        global address_span3
        global address_span4
        global address_span4
        global address_span5
        global address_span5
        global address_span6
        global address_span6
        global address_span7
        global address_span7
        global address_span8
        global address_span8
        global address_span9
        global address_span9
        global address_span10
        global address_span10
        global address_span11
        global address_span11
        global address_span12
        global address_span12
        global address_span13
        global address_span13
        global address_span14
        global address_span14
        global address_span15
        global address_span15
        global address_span16
        global address_span16
        global address_span_en1
        global address_span_en1
        global address_span_en2
        global address_span_en2
        global address_span_en3
        global address_span_en3
        global address_span_en4
        global address_span_en4
        global address_span_en5
        global address_span_en5
        global address_span_en6
        global address_span_en6
        global address_span_en7
        global address_span_en7
        global address_span_en8
        global address_span_en8
        global address_span_en9
        global address_span_en9
        global address_span_en10
        global address_span_en10
        global address_span_en11
        global address_span_en11
        global address_span_en12
        global address_span_en12
        global address_span_en13
        global address_span_en13
        global address_span_en14
        global address_span_en14
        global address_span_en15
        global address_span_en15
        global address_span_en16
        global address_span_en16
        global addr_wren
        global addr_wren
        global addr_rden
        global addr_rden
        for {set i 1} {$i<=16} {incr i} {
        for {set i 1} {$i<=16} {incr i} {
                set    mask [format "%1X" [expr $i-1]]
                set    mask [format "%1X" [expr $i-1]]
                append mask [format "%1X" [expr $addr_wren*8+$addr_rden*4+[set address_span_en$i]]]
                append mask [format "%1X" [expr $addr_wren*8+$addr_rden*4+[set address_span_en$i]]]
                append mask [set address_span$i]
                append mask [set address_span$i]
                config_addr $mask $i
                config_addr $mask $i
        }
        }
}
}
 
 
proc initAddrConfig {} {
proc initAddrConfig {} {
        global log
        global log
        global address_span1
        global address_span1
        global address_span2
        global address_span2
        global address_span3
        global address_span3
        global address_span4
        global address_span4
        global address_span5
        global address_span5
        global address_span6
        global address_span6
        global address_span7
        global address_span7
        global address_span8
        global address_span8
        global address_span9
        global address_span9
        global address_span10
        global address_span10
        global address_span11
        global address_span11
        global address_span12
        global address_span12
        global address_span13
        global address_span13
        global address_span14
        global address_span14
        global address_span15
        global address_span15
        global address_span16
        global address_span16
        for {set i 1} {$i<=8} {incr i} {
        for {set i 1} {$i<=8} {set i [expr $i+2]} {
                if {[set address_span$i]==""} {
                if {[set address_span$i]==""} {
                        set address_span$i ffff0000
                        set address_span$i fffffffc
        }
        }
        }
        }
        for {set i 9} {$i<=16} {incr i} {
        for {set i 2} {$i<=8} {set i [expr $i+2]} {
                if {[set address_span$i]==""} {
                if {[set address_span$i]==""} {
                        set address_span$i 00000000
                        set address_span$i 00000000
        }
        }
}
}
 
        for {set i 9} {$i<=16} {incr i} {
 
                if {[set address_span$i]==""} {
 
                        set address_span$i ffffffff
 
        }
 
        }
}
}
 
 
proc initTrigConfig {} {
proc initTrigConfig {} {
        global triggerAddr
        global triggerAddr
        global triggerData
        global triggerData
        global triggerPnum
        global triggerPnum
        if {[set triggerAddr]==""} {
        if {[set triggerAddr]==""} {
                set triggerAddr ffff
                set triggerAddr 00000000
        }
        }
        if {[set triggerData]==""} {
        if {[set triggerData]==""} {
                set triggerData a5a5a5a5
                set triggerData a5a5a5a5
        }
        }
        if {[set triggerPnum]==""} {
        if {[set triggerPnum]==""} {
                set triggerPnum 0
                set triggerPnum 0
        }
        }
}
}
 
 
proc updateTrigger {{trigCmd 0}} {
proc updateTrigger {{trigCmd 0}} {
        global triggerAddr
        global triggerAddr
        global triggerData
        global triggerData
        global triggerPnum
        global triggerPnum
        global trig_wren
        global trig_wren
        global trig_rden
        global trig_rden
        global trig_aden
        global trig_aden
        global trig_daen
        global trig_daen
        set    triggerValue [format "%1X" [expr $trig_aden*8+$trig_daen*4+0]]
        set    triggerValue [format "%1X" [expr $trig_aden*8+$trig_daen*4+0]]
        append triggerValue [format "%1X" [expr $trig_wren*8+$trig_rden*4+$trigCmd]]
        append triggerValue [format "%1X" [expr $trig_wren*8+$trig_rden*4+$trigCmd]]
        append triggerValue $triggerAddr
        append triggerValue $triggerAddr
        append triggerValue $triggerData
        append triggerValue $triggerData
        config_trig $triggerValue [format "%03X" $triggerPnum]
        config_trig $triggerValue [format "%03X" $triggerPnum]
}
}
 
 
proc startTrigger {} {
proc startTrigger {} {
        global trig_wren
        global trig_wren
        global trig_rden
        global trig_rden
        global trig_aden
        global trig_aden
        global trig_daen
        global trig_daen
        global log
        global log
        if {[expr $trig_wren+$trig_rden]==2} {
        if {[expr $trig_wren+$trig_rden]==2} {
                $log insert end "\nWarning: @WR & @RD, unreachable trigger condition.\n"
                $log insert end "\nWarning: @WR & @RD, unreachable trigger condition.\n"
        }
        }
        set trigEnable [expr $trig_wren+$trig_rden+$trig_aden+$trig_daen]
        set trigEnable [expr $trig_wren+$trig_rden+$trig_aden+$trig_daen]
        if {$trigEnable>0} {
        if {$trigEnable>0} {
                updateTrigger 2
                updateTrigger 2
                reset_fifo
                reset_fifo
                query_usedw
                query_usedw
                updateTrigger 3
                updateTrigger 3
        } else {
        } else {
                updateTrigger 0
                updateTrigger 0
        }
        }
}
}
 
 
proc reset_fifo_ptr {} {
proc reset_fifo_ptr {} {
        reset_fifo
        reset_fifo
        query_usedw
        query_usedw
}
}
 
 
proc query_fifo_usedw {} {
proc query_fifo_usedw {} {
        query_usedw
        query_usedw
}
}
 
 
proc read_fifo_content {} {
proc read_fifo_content {} {
        global log
        global log
        global fifoUsedw
        global fifoUsedw
        $log insert end "\n****************************************\n"
        $log insert end "\n****************************************\n"
        for {set i 0} {$i<$fifoUsedw} {incr i} {
        for {set i 0} {$i<$fifoUsedw} {incr i} {
                set fifoContent [read_fifo]
                set fifoContent [read_fifo]
                set ok_trig [expr [format "%d" 0x[string index $fifoContent 0]]/2]
                set ok_trig [expr [format "%d" 0x[string index $fifoContent 0]]/2]
                set wr_cptr [expr [format "%d" 0x[string index $fifoContent 0]]%2]
                set wr_cptr [expr [format "%d" 0x[string index $fifoContent 0]]%2]
                set tm_cptr [format "%d"       0x[string range $fifoContent  1  8]]
                set tm_cptr [format "%d"       0x[string range $fifoContent  1  8]]
                set ad_cptr                      [string range $fifoContent  9 12]
                set ad_cptr                      [string range $fifoContent  9 16]
                set da_cptr                      [string range $fifoContent 13 20]
                set da_cptr                      [string range $fifoContent 17 24]
                if $ok_trig {
                if $ok_trig {
                        $log insert end "@@@@@@@@@@@@@@@@@@@@\n"
                        $log insert end "@@@@@@@@@@@@@@@@@@@@\n"
                }
                }
                if $wr_cptr {
                if $wr_cptr {
                        $log insert end "WR 0x8000$ad_cptr 0x$da_cptr @$tm_cptr\n"
                        $log insert end "wr 0x$ad_cptr 0x$da_cptr @$tm_cptr\n"
                } else {
                } else {
                        $log insert end "RD 0x8000$ad_cptr 0x$da_cptr @$tm_cptr\n"
                        $log insert end "rd 0x$ad_cptr 0x$da_cptr @$tm_cptr\n"
                }
                }
        }
        }
        query_usedw
        query_usedw
}
}
 
 
proc clear_log {} {
proc clear_log {} {
        global log
        global log
        $log delete insert end
        $log delete insert end
}
}
 
 
proc quit {} {
proc quit {} {
        global exit_console
        global exit_console
        close_jtag_device
        close_jtag_device
        destroy .mainframe
        destroy .mainframe
        destroy .
        destroy .
        set exit_console 1
        set exit_console 1
}
}
 
 
##############################
##############################
## Miscellence functions
## Miscellence functions
##############################
##############################
proc binaryStringToInt {binarystring} {
proc binaryStringToInt {binarystring} {
    set len [string length $binarystring]
    set len [string length $binarystring]
    set retval 0
    set retval 0
    for {set i 0} {$i < $len} {incr i} {
    for {set i 0} {$i < $len} {incr i} {
        set retval [expr $retval << 1]
        set retval [expr $retval << 1]
        if {[string index $binarystring $i] == "1"} {
        if {[string index $binarystring $i] == "1"} {
            set retval [expr $retval | 1]
            set retval [expr $retval | 1]
        }
        }
    }
    }
    return $retval
    return $retval
}
}
 
 
##############################
##############################
## Main to setup GUI
## Main to setup GUI
##############################
##############################
# set the varialble to keep Tk GUI
# set the varialble to keep Tk GUI
set exit_console 0
set exit_console 0
 
 
# set the main window
# set the main window
wm withdraw .
wm withdraw .
toplevel .mainframe
toplevel .mainframe
wm title .mainframe "www.OpenCores.org: uP Transaction Monitor"
wm title .mainframe "www.OpenCores.org: uP Transaction Monitor"
pack propagate .mainframe true
pack propagate .mainframe true
 
 
# set the www.OpenCores.org logo
# set the www.OpenCores.org logo
frame .mainframe.fig -bg white
frame .mainframe.fig -bg white
pack .mainframe.fig -expand true -fill both
pack .mainframe.fig -expand true -fill both
image create photo logo -format gif -file "../common/OpenCores.gif"
image create photo logo -format gif -file "../common/OpenCores.gif"
label .mainframe.fig.logo -image logo -bg white
label .mainframe.fig.logo -image logo -bg white
pack .mainframe.fig.logo
pack .mainframe.fig.logo
 
 
# set the JTAG utility
# set the JTAG utility
frame .mainframe.jtag -relief groove -borderwidth 5
frame .mainframe.jtag -relief groove -borderwidth 5
pack .mainframe.jtag
pack .mainframe.jtag
button .mainframe.jtag.scan -text {Scan JTAG Chain} -command {scan_chain}
button .mainframe.jtag.scan -text {Scan JTAG Chain} -command {scan_chain}
button .mainframe.jtag.select -text {Select JTAG Device :} -command {select_device $cableNum $deviceNum}
button .mainframe.jtag.select -text {Select JTAG Device :} -command {select_device $cableNum $deviceNum}
button .mainframe.jtag.deselect -text {DeSelect JTAG Device} -command {close_jtag_device}
button .mainframe.jtag.deselect -text {DeSelect JTAG Device} -command {close_jtag_device}
label .mainframe.jtag.cable -text {Cable @}
label .mainframe.jtag.cable -text {Cable @}
label .mainframe.jtag.devic -text {Device @}
label .mainframe.jtag.devic -text {Device @}
entry .mainframe.jtag.cable_num -textvariable cableNum -width 5
entry .mainframe.jtag.cable_num -textvariable cableNum -width 5
entry .mainframe.jtag.devic_num -textvariable deviceNum -width 5
entry .mainframe.jtag.devic_num -textvariable deviceNum -width 5
pack .mainframe.jtag.scan .mainframe.jtag.select \
pack .mainframe.jtag.scan .mainframe.jtag.select \
     .mainframe.jtag.cable .mainframe.jtag.cable_num \
     .mainframe.jtag.cable .mainframe.jtag.cable_num \
     .mainframe.jtag.devic .mainframe.jtag.devic_num \
     .mainframe.jtag.devic .mainframe.jtag.devic_num \
     .mainframe.jtag.deselect \
     .mainframe.jtag.deselect \
     -side left -ipadx 0
     -side left -ipadx 0
 
 
# set the inclusive address entries
# set the inclusive address entries
frame .mainframe.f1 -relief groove -borderwidth 5
frame .mainframe.f1 -relief groove -borderwidth 5
pack .mainframe.f1
pack .mainframe.f1
label .mainframe.f1.incl_addr -text {Inclusive Addr:}
label .mainframe.f1.incl_addr -text {Inclusive Addr:}
entry .mainframe.f1.address_span1 -textvariable address_span1 -width 8
entry .mainframe.f1.address_span1 -textvariable address_span1 -width 8
entry .mainframe.f1.address_span2 -textvariable address_span2 -width 8
entry .mainframe.f1.address_span2 -textvariable address_span2 -width 8
entry .mainframe.f1.address_span3 -textvariable address_span3 -width 8
entry .mainframe.f1.address_span3 -textvariable address_span3 -width 8
entry .mainframe.f1.address_span4 -textvariable address_span4 -width 8
entry .mainframe.f1.address_span4 -textvariable address_span4 -width 8
entry .mainframe.f1.address_span5 -textvariable address_span5 -width 8
entry .mainframe.f1.address_span5 -textvariable address_span5 -width 8
entry .mainframe.f1.address_span6 -textvariable address_span6 -width 8
entry .mainframe.f1.address_span6 -textvariable address_span6 -width 8
entry .mainframe.f1.address_span7 -textvariable address_span7 -width 8
entry .mainframe.f1.address_span7 -textvariable address_span7 -width 8
entry .mainframe.f1.address_span8 -textvariable address_span8 -width 8
entry .mainframe.f1.address_span8 -textvariable address_span8 -width 8
checkbutton .mainframe.f1.address_span_en1 -variable address_span_en1
checkbutton .mainframe.f1.address_span_en1 -variable address_span_en1
checkbutton .mainframe.f1.address_span_en2 -variable address_span_en2
checkbutton .mainframe.f1.address_span_en2 -variable address_span_en2
checkbutton .mainframe.f1.address_span_en3 -variable address_span_en3
checkbutton .mainframe.f1.address_span_en3 -variable address_span_en3
checkbutton .mainframe.f1.address_span_en4 -variable address_span_en4
checkbutton .mainframe.f1.address_span_en4 -variable address_span_en4
checkbutton .mainframe.f1.address_span_en5 -variable address_span_en5
checkbutton .mainframe.f1.address_span_en5 -variable address_span_en5
checkbutton .mainframe.f1.address_span_en6 -variable address_span_en6
checkbutton .mainframe.f1.address_span_en6 -variable address_span_en6
checkbutton .mainframe.f1.address_span_en7 -variable address_span_en7
checkbutton .mainframe.f1.address_span_en7 -variable address_span_en7
checkbutton .mainframe.f1.address_span_en8 -variable address_span_en8
checkbutton .mainframe.f1.address_span_en8 -variable address_span_en8
 
label .mainframe.f1.address_span_text1 -text {H:}
 
label .mainframe.f1.address_span_text2 -text {L:}
 
label .mainframe.f1.address_span_text3 -text {H:}
 
label .mainframe.f1.address_span_text4 -text {L:}
 
label .mainframe.f1.address_span_text5 -text {H:}
 
label .mainframe.f1.address_span_text6 -text {L:}
 
label .mainframe.f1.address_span_text7 -text {H:}
 
label .mainframe.f1.address_span_text8 -text {L:}
pack .mainframe.f1.incl_addr \
pack .mainframe.f1.incl_addr \
     .mainframe.f1.address_span_en1 .mainframe.f1.address_span1 \
     .mainframe.f1.address_span_en1 .mainframe.f1.address_span_text1 .mainframe.f1.address_span1 .mainframe.f1.address_span_text2 .mainframe.f1.address_span2 \
     .mainframe.f1.address_span_en2 .mainframe.f1.address_span2 \
     .mainframe.f1.address_span_en3 .mainframe.f1.address_span_text3 .mainframe.f1.address_span3 .mainframe.f1.address_span_text4 .mainframe.f1.address_span4 \
     .mainframe.f1.address_span_en3 .mainframe.f1.address_span3 \
     .mainframe.f1.address_span_en5 .mainframe.f1.address_span_text5 .mainframe.f1.address_span5 .mainframe.f1.address_span_text6 .mainframe.f1.address_span6 \
     .mainframe.f1.address_span_en4 .mainframe.f1.address_span4 \
     .mainframe.f1.address_span_en7 .mainframe.f1.address_span_text7 .mainframe.f1.address_span7 .mainframe.f1.address_span_text8 .mainframe.f1.address_span8 \
     .mainframe.f1.address_span_en5 .mainframe.f1.address_span5 \
 
     .mainframe.f1.address_span_en6 .mainframe.f1.address_span6 \
 
     .mainframe.f1.address_span_en7 .mainframe.f1.address_span7 \
 
     .mainframe.f1.address_span_en8 .mainframe.f1.address_span8 \
 
     -side left -ipadx 0
     -side left -ipadx 0
 
 
# set the exclusive address entries
# set the exclusive address entries
frame .mainframe.f2 -relief groove -borderwidth 5
frame .mainframe.f2 -relief groove -borderwidth 5
pack .mainframe.f2
pack .mainframe.f2
label .mainframe.f2.excl_addr -text {Exclusive Addr:}
label .mainframe.f2.excl_addr -text {Exclusive Addr:}
entry .mainframe.f2.address_span9  -textvariable address_span9  -width 8
entry .mainframe.f2.address_span9  -textvariable address_span9  -width 8
entry .mainframe.f2.address_span10 -textvariable address_span10 -width 8
entry .mainframe.f2.address_span10 -textvariable address_span10 -width 8
entry .mainframe.f2.address_span11 -textvariable address_span11 -width 8
entry .mainframe.f2.address_span11 -textvariable address_span11 -width 8
entry .mainframe.f2.address_span12 -textvariable address_span12 -width 8
entry .mainframe.f2.address_span12 -textvariable address_span12 -width 8
entry .mainframe.f2.address_span13 -textvariable address_span13 -width 8
entry .mainframe.f2.address_span13 -textvariable address_span13 -width 8
entry .mainframe.f2.address_span14 -textvariable address_span14 -width 8
entry .mainframe.f2.address_span14 -textvariable address_span14 -width 8
entry .mainframe.f2.address_span15 -textvariable address_span15 -width 8
entry .mainframe.f2.address_span15 -textvariable address_span15 -width 8
entry .mainframe.f2.address_span16 -textvariable address_span16 -width 8
entry .mainframe.f2.address_span16 -textvariable address_span16 -width 8
checkbutton .mainframe.f2.address_span_en9  -variable address_span_en9
checkbutton .mainframe.f2.address_span_en9  -variable address_span_en9
checkbutton .mainframe.f2.address_span_en10 -variable address_span_en10
checkbutton .mainframe.f2.address_span_en10 -variable address_span_en10
checkbutton .mainframe.f2.address_span_en11 -variable address_span_en11
checkbutton .mainframe.f2.address_span_en11 -variable address_span_en11
checkbutton .mainframe.f2.address_span_en12 -variable address_span_en12
checkbutton .mainframe.f2.address_span_en12 -variable address_span_en12
checkbutton .mainframe.f2.address_span_en13 -variable address_span_en13
checkbutton .mainframe.f2.address_span_en13 -variable address_span_en13
checkbutton .mainframe.f2.address_span_en14 -variable address_span_en14
checkbutton .mainframe.f2.address_span_en14 -variable address_span_en14
checkbutton .mainframe.f2.address_span_en15 -variable address_span_en15
checkbutton .mainframe.f2.address_span_en15 -variable address_span_en15
checkbutton .mainframe.f2.address_span_en16 -variable address_span_en16
checkbutton .mainframe.f2.address_span_en16 -variable address_span_en16
 
label .mainframe.f2.address_span_text1 -text {H:}
 
label .mainframe.f2.address_span_text2 -text {L:}
 
label .mainframe.f2.address_span_text3 -text {H:}
 
label .mainframe.f2.address_span_text4 -text {L:}
 
label .mainframe.f2.address_span_text5 -text {H:}
 
label .mainframe.f2.address_span_text6 -text {L:}
 
label .mainframe.f2.address_span_text7 -text {H:}
 
label .mainframe.f2.address_span_text8 -text {L:}
pack .mainframe.f2.excl_addr \
pack .mainframe.f2.excl_addr \
     .mainframe.f2.address_span_en9  .mainframe.f2.address_span9  \
     .mainframe.f2.address_span_en9  .mainframe.f2.address_span_text1 .mainframe.f2.address_span9  .mainframe.f2.address_span_text2 .mainframe.f2.address_span10 \
     .mainframe.f2.address_span_en10 .mainframe.f2.address_span10 \
     .mainframe.f2.address_span_en11 .mainframe.f2.address_span_text3 .mainframe.f2.address_span11 .mainframe.f2.address_span_text4 .mainframe.f2.address_span12 \
     .mainframe.f2.address_span_en11 .mainframe.f2.address_span11 \
     .mainframe.f2.address_span_en13 .mainframe.f2.address_span_text5 .mainframe.f2.address_span13 .mainframe.f2.address_span_text6 .mainframe.f2.address_span14 \
     .mainframe.f2.address_span_en12 .mainframe.f2.address_span12 \
     .mainframe.f2.address_span_en15 .mainframe.f2.address_span_text7 .mainframe.f2.address_span15 .mainframe.f2.address_span_text8 .mainframe.f2.address_span16 \
     .mainframe.f2.address_span_en13 .mainframe.f2.address_span13 \
 
     .mainframe.f2.address_span_en14 .mainframe.f2.address_span14 \
 
     .mainframe.f2.address_span_en15 .mainframe.f2.address_span15 \
 
     .mainframe.f2.address_span_en16 .mainframe.f2.address_span16 \
 
     -side left -ipadx 0
     -side left -ipadx 0
initAddrConfig
initAddrConfig
 
 
# set the address configuration buttons
# set the address configuration buttons
frame .mainframe.addr_cnfg -relief groove -borderwidth 5
frame .mainframe.addr_cnfg -relief groove -borderwidth 5
pack .mainframe.addr_cnfg
pack .mainframe.addr_cnfg
checkbutton .mainframe.addr_cnfg.wren -text {WR} -variable addr_wren
checkbutton .mainframe.addr_cnfg.wren -text {WR} -variable addr_wren
checkbutton .mainframe.addr_cnfg.rden -text {RD} -variable addr_rden
checkbutton .mainframe.addr_cnfg.rden -text {RD} -variable addr_rden
button .mainframe.addr_cnfg.config -text {Apply Address Filter} -command {updateAddrConfig}
button .mainframe.addr_cnfg.config -text {Apply Address Filter} -command {updateAddrConfig}
pack .mainframe.addr_cnfg.wren .mainframe.addr_cnfg.rden .mainframe.addr_cnfg.config \
pack .mainframe.addr_cnfg.wren .mainframe.addr_cnfg.rden .mainframe.addr_cnfg.config \
     -side left -ipadx 0
     -side left -ipadx 0
 
 
# set the transaction trigger controls
# set the transaction trigger controls
frame .mainframe.trig -relief groove -borderwidth 5
frame .mainframe.trig -relief groove -borderwidth 5
pack .mainframe.trig
pack .mainframe.trig
button .mainframe.trig.starttrig -text {Apply Trigger Condition} -command {startTrigger}
button .mainframe.trig.starttrig -text {Apply Trigger Condition} -command {startTrigger}
entry .mainframe.trig.trigvalue_addr -textvar triggerAddr -width 4
entry .mainframe.trig.trigvalue_addr -textvar triggerAddr -width 8
entry .mainframe.trig.trigvalue_data -textvar triggerData -width 8
entry .mainframe.trig.trigvalue_data -textvar triggerData -width 8
checkbutton .mainframe.trig.trigaddr -text {@Addr:} -variable trig_aden
checkbutton .mainframe.trig.trigaddr -text {@Addr:} -variable trig_aden
checkbutton .mainframe.trig.trigdata -text {@Data:} -variable trig_daen
checkbutton .mainframe.trig.trigdata -text {@Data:} -variable trig_daen
checkbutton .mainframe.trig.wren -text {@WR} -variable trig_wren
checkbutton .mainframe.trig.wren -text {@WR} -variable trig_wren
checkbutton .mainframe.trig.rden -text {@RD} -variable trig_rden
checkbutton .mainframe.trig.rden -text {@RD} -variable trig_rden
label .mainframe.trig.pnum -text {Pre-Capture:}
label .mainframe.trig.pnum -text {Pre-Capture:}
entry .mainframe.trig.trigvalue_pnum -textvar triggerPnum -width 4
entry .mainframe.trig.trigvalue_pnum -textvar triggerPnum -width 4
pack .mainframe.trig.pnum .mainframe.trig.trigvalue_pnum \
pack .mainframe.trig.pnum .mainframe.trig.trigvalue_pnum \
     .mainframe.trig.wren .mainframe.trig.rden \
     .mainframe.trig.wren .mainframe.trig.rden \
     .mainframe.trig.trigaddr .mainframe.trig.trigvalue_addr \
     .mainframe.trig.trigaddr .mainframe.trig.trigvalue_addr \
     .mainframe.trig.trigdata .mainframe.trig.trigvalue_data \
     .mainframe.trig.trigdata .mainframe.trig.trigvalue_data \
     .mainframe.trig.starttrig \
     .mainframe.trig.starttrig \
     -side left -ipadx 0
     -side left -ipadx 0
initTrigConfig
initTrigConfig
 
 
# set the control buttons
# set the control buttons
frame .mainframe.fifo -relief groove -borderwidth 5
frame .mainframe.fifo -relief groove -borderwidth 5
pack .mainframe.fifo
pack .mainframe.fifo
button .mainframe.fifo.reset -text {Reset FIFO} -command {reset_fifo_ptr}
button .mainframe.fifo.reset -text {Reset FIFO} -command {reset_fifo_ptr}
button .mainframe.fifo.loop -text {Query Used Word} -command {query_fifo_usedw}
button .mainframe.fifo.loop -text {Query Used Word} -command {query_fifo_usedw}
label .mainframe.fifo.usedw  -textvariable fifoUsedw -relief sunken -width 4
label .mainframe.fifo.usedw  -textvariable fifoUsedw -relief sunken -width 4
button .mainframe.fifo.read     -text {Read FIFO} -command {read_fifo_content}
button .mainframe.fifo.read     -text {Read FIFO} -command {read_fifo_content}
button .mainframe.fifo.clear -text {Clear Log} -command {clear_log}
button .mainframe.fifo.clear -text {Clear Log} -command {clear_log}
button .mainframe.fifo.quit -text {Quit} -command {quit}
button .mainframe.fifo.quit -text {Quit} -command {quit}
pack .mainframe.fifo.reset .mainframe.fifo.loop .mainframe.fifo.usedw .mainframe.fifo.read .mainframe.fifo.clear .mainframe.fifo.quit \
pack .mainframe.fifo.reset .mainframe.fifo.loop .mainframe.fifo.usedw .mainframe.fifo.read .mainframe.fifo.clear .mainframe.fifo.quit \
     -side left -ipadx 0
     -side left -ipadx 0
 
 
# set the log window
# set the log window
frame .mainframe.log -relief groove -borderwidth 5
frame .mainframe.log -relief groove -borderwidth 5
set log [text .mainframe.log.text -width 80 -height 25 \
set log [text .mainframe.log.text -width 80 -height 25 \
        -borderwidth 2 -relief sunken -setgrid true \
        -borderwidth 2 -relief sunken -setgrid true \
        -yscrollcommand {.mainframe.log.scroll set}]
        -yscrollcommand {.mainframe.log.scroll set}]
scrollbar .mainframe.log.scroll -command {.mainframe.log.text yview}
scrollbar .mainframe.log.scroll -command {.mainframe.log.text yview}
pack .mainframe.log.scroll -side right -fill y
pack .mainframe.log.scroll -side right -fill y
pack .mainframe.log.text -side left -fill both -expand true
pack .mainframe.log.text -side left -fill both -expand true
pack .mainframe.log -side top -fill both -expand true
pack .mainframe.log -side top -fill both -expand true
 
 
# make the program wait for exit signal
# make the program wait for exit signal
vwait exit_console
vwait exit_console
 
 
 
 

powered by: WebSVN 2.1.0

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