OpenCores
URL https://opencores.org/ocsvn/w11/w11/trunk

Subversion Repositories w11

[/] [w11/] [tags/] [w11a_V0.61/] [tools/] [tcl/] [rbemon/] [util.tcl] - Blame information for rev 26

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 21 wfjm
# $Id: util.tcl 516 2013-05-05 21:24:52Z mueller $
2 10 wfjm
#
3 21 wfjm
# Copyright 2011-2013 by Walter F.J. Mueller <W.F.J.Mueller@gsi.de>
4 10 wfjm
#
5
# This program is free software; you may redistribute and/or modify it under
6
# the terms of the GNU General Public License as published by the Free
7
# Software Foundation, either version 2, or at your option any later version.
8
#
9
# This program is distributed in the hope that it will be useful, but
10
# WITHOUT ANY WARRANTY, without even the implied warranty of MERCHANTABILITY
11
# or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
12
# for complete details.
13
#
14
#  Revision History:
15
# Date         Rev Version  Comment
16 11 wfjm
# 2011-04-17   376   1.0.1  add proc read
17 10 wfjm
# 2011-04-02   375   1.0    Initial version
18
#
19
 
20
package provide rbemon 1.0
21
 
22
package require rutil
23
package require rlink
24
 
25
namespace eval rbemon {
26
  #
27
  # setup register descriptions for rbd_eyemon
28
  #
29
  regdsc CNTL {ena01 3} {ena10 2} {clr 1} {go 0}
30
  regdsc RDIV {rdiv 7 8}
31
  regdsc ADDR {addr 9 10 "-"} {laddr 9 8} {waddr 0}
32
  #
33
  # setup: amap definitions for rbd_eyemon
34
  # 
35
  proc setup {base} {
36 21 wfjm
    rlc amap -insert em.cntl [expr {$base + 0x00}]
37
    rlc amap -insert em.rdiv [expr {$base + 0x01}]
38
    rlc amap -insert em.addr [expr {$base + 0x02}]
39
    rlc amap -insert em.data [expr {$base + 0x03}]
40 10 wfjm
  }
41
  #
42
  # init: reset rbd_eyemon (stop monitor, clear rdiv and addr)
43
  # 
44
  proc init {} {
45
    rlc exec \
46
      -wreg em.cntl 0x0000 \
47
      -wreg em.rdiv 0x0000
48
  }
49
  #
50
  # clear: clear eyemon data
51
  #
52
  proc clear {} {
53
    set clrbit [regbld rbemon::CNTL clr]
54
    rlc exec -rreg em.cntl cur_cntl
55 21 wfjm
    rlc exec -wreg em.cntl [expr {$cur_cntl | $clrbit}]
56 10 wfjm
    set clrrun $clrbit
57
    set npoll 0
58
    while {$clrrun != 0} {
59
      rlc exec -rreg em.cntl cur_cntl
60 21 wfjm
      set clrrun [expr {$cur_cntl & $clrbit}]
61 10 wfjm
      incr npoll 1
62
      if {$npoll > 10} {
63
        error "-E: rbemon::clear failed, CNTL.clr didn't go back to 0"
64
      }
65
    }
66
    return ""
67
  }
68
  #
69
  # start: start the eyemon
70
  #
71
  proc start {{ena01 0} {ena10 0}} {
72
    if {$ena01 == 0 && $ena10 == 0} {
73
      set ena01 1
74
      set ena10 1
75
    }
76
    rlc exec -wreg em.cntl [regbld rbemon::CNTL go \
77
                    [list ena01 $ena01] [list ena10 $ena10] ]
78
  }
79
  #
80
  # stop: stop the eyemon
81
  #
82
  proc stop {} {
83
    rlc exec -wreg em.cntl 0x0000
84
  }
85 11 wfjm
  #
86
  # read: read eyemon data
87
  #
88
  proc read {{nval 512}} {
89
    set addr 0
90
    set rval {}
91
    while {$nval > 0} {
92 21 wfjm
      set nblk [expr {$nval << 1}]
93 11 wfjm
      if {$nblk > 256} {set nblk 256}
94
      rlc exec \
95
        -wreg em.addr $addr \
96
        -rblk em.data $nblk rawdat
97
      foreach {dl dh} $rawdat {
98 21 wfjm
        lappend rval [expr {( $dh << 16 ) | $dl}]
99 11 wfjm
      }
100
      incr addr $nblk
101 21 wfjm
      set nval [expr {$nval - ( $nblk >> 1 ) }]
102 11 wfjm
    }
103
    return $rval
104
  }
105 10 wfjm
 
106
}

powered by: WebSVN 2.1.0

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