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

Subversion Repositories w11

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

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 21 wfjm
# $Id: perf.tcl 516 2013-05-05 21:24:52Z mueller $
2 11 wfjm
#
3 18 wfjm
# Copyright 2011-2013 by Walter F.J. Mueller <W.F.J.Mueller@gsi.de>
4 11 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 18 wfjm
# 2013-01-04   469   1.0.2  perf_blk: add optional 2nd arg: trace
17
# 2012-12-27   465   1.0.1  adopt format, cover small ms and large kb 
18 11 wfjm
# 2011-04-17   376   1.0    Initial version
19
#
20
 
21
package provide rbbram 1.0
22
 
23
namespace eval rbbram {
24
  #
25
  # perf_blk: determine wblk/rblk write performance
26
  # 
27 18 wfjm
  proc perf_blk {{tmax 1000} {trace 0}} {
28 11 wfjm
    if {$tmax < 1} { error "-E: perf_blk: tmax argument must be >= 1" }
29
 
30
    set amax [regget rbbram::CNTL(addr) -1]
31
    set rval \
32
"nblk   1 wblk   |  2 wblk   |  4 wblk   |  1 rblk   |  2 rblk   |  4 rblk   "
33
    append rval \
34
"\n      ms/r  kB/s  ms/r  kB/s  ms/r  kB/s  ms/r  kB/s  ms/r  kB/s  ms/r  kB/s"
35
 
36
    foreach nblk {1 2 4 8 16 32 64 128 256} {
37
      set wbuf0 {}
38
      set wbuf1 {}
39
      set wbuf2 {}
40
      set wbuf3 {}
41
      for {set i 0} {$i < $nblk} {incr i} {
42
        lappend wbuf0 $i
43 21 wfjm
        lappend wbuf1 [expr {0x1000 + $i}]
44
        lappend wbuf2 [expr {0x2000 + $i}]
45
        lappend wbuf3 [expr {0x3000 + $i}]
46 11 wfjm
      }
47
 
48
      set pval {}
49
 
50
      # single wblk
51 18 wfjm
      if {$trace} { puts "1 wblk for $nblk" }
52 11 wfjm
      set tbeg [clock clicks -milliseconds]
53
      set addr 0x0000
54
      for {set i 1} {1} {incr i} {
55
        rlc exec \
56
          -wreg br.cntl $addr  \
57
          -wblk br.data $wbuf0
58 21 wfjm
        set trun [expr {[clock clicks -milliseconds] - $tbeg}]
59 11 wfjm
        if {$trun > $tmax} { break }
60 21 wfjm
        set addr [expr {( $addr + $nblk ) & $amax}]
61 11 wfjm
      }
62
      lappend pval 1 $i $trun
63
 
64
      # double wblk
65 18 wfjm
      if {$trace} { puts "2 wblk for $nblk" }
66 11 wfjm
      set tbeg [clock clicks -milliseconds]
67
      set addr 0x0000
68
      for {set i 1} {1} {incr i} {
69
        rlc exec \
70
          -wreg br.cntl $addr  \
71
          -wblk br.data $wbuf0 \
72
          -wblk br.data $wbuf1
73 21 wfjm
        set trun [expr {[clock clicks -milliseconds] - $tbeg}]
74 11 wfjm
        if {$trun > $tmax} { break }
75 21 wfjm
        set addr [expr {( $addr + 2 * $nblk ) & $amax}]
76 11 wfjm
      }
77
      lappend pval 2 $i $trun
78
 
79
      # quad wblk
80 18 wfjm
      if {$trace} { puts "4 wblk for $nblk" }
81 11 wfjm
      set tbeg [clock clicks -milliseconds]
82
      set addr 0x0000
83
      for {set i 1} {1} {incr i} {
84
        rlc exec \
85
          -wreg br.cntl $addr  \
86
          -wblk br.data $wbuf0 \
87
          -wblk br.data $wbuf1 \
88
          -wblk br.data $wbuf2 \
89
          -wblk br.data $wbuf3
90 21 wfjm
        set trun [expr {[clock clicks -milliseconds] - $tbeg}]
91 11 wfjm
        if {$trun > $tmax} { break }
92 21 wfjm
        set addr [expr {( $addr + 4 * $nblk ) & $amax}]
93 11 wfjm
      }
94
      lappend pval 4 $i $trun
95
 
96
      # single rblk
97 18 wfjm
      if {$trace} { puts "1 rblk for $nblk" }
98 11 wfjm
      set tbeg [clock clicks -milliseconds]
99
      set addr 0x0000
100
      for {set i 1} {1} {incr i} {
101
        rlc exec \
102
          -wreg br.cntl $addr \
103
          -rblk br.data $nblk rbuf0
104 21 wfjm
        set trun [expr {[clock clicks -milliseconds] - $tbeg}]
105 11 wfjm
        if {$trun > $tmax} { break }
106 21 wfjm
        set addr [expr {( $addr + $nblk ) & $amax}]
107 11 wfjm
      }
108
      lappend pval 1 $i $trun
109
 
110
      # double rblk
111 18 wfjm
      if {$trace} { puts "2 rblk for $nblk" }
112 11 wfjm
      set tbeg [clock clicks -milliseconds]
113
      set addr 0x0000
114
      for {set i 1} {1} {incr i} {
115
        rlc exec \
116
          -wreg br.cntl $addr \
117
          -rblk br.data $nblk rbuf0 \
118
          -rblk br.data $nblk rbuf1
119 21 wfjm
        set trun [expr {[clock clicks -milliseconds] - $tbeg}]
120 11 wfjm
        if {$trun > $tmax} { break }
121 21 wfjm
        set addr [expr {( $addr + 2 * $nblk ) & $amax}]
122 11 wfjm
      }
123
      lappend pval 2 $i $trun
124
 
125
      # quad rblk
126 18 wfjm
      if {$trace} { puts "4 rblk for $nblk" }
127 11 wfjm
      set tbeg [clock clicks -milliseconds]
128
      set addr 0x0000
129
      for {set i 1} {1} {incr i} {
130
        rlc exec \
131
          -wreg br.cntl $addr \
132
          -rblk br.data $nblk rbuf0 \
133
          -rblk br.data $nblk rbuf1 \
134
          -rblk br.data $nblk rbuf2 \
135
          -rblk br.data $nblk rbuf3
136 21 wfjm
        set trun [expr {[clock clicks -milliseconds] - $tbeg}]
137 11 wfjm
        if {$trun > $tmax} { break }
138 21 wfjm
        set addr [expr {( $addr + 4 * $nblk ) & $amax}]
139 11 wfjm
      }
140
      lappend pval 4 $i $trun
141
 
142
      set oline [format "\n%4d" $nblk]
143
      foreach {nr i trun} $pval {
144 21 wfjm
        set ms [expr {double($trun) / double($nr*$i)}]
145
        set kb [expr {double(2*$nr*$i*$nblk) / double($trun)}]
146 17 wfjm
        if { $ms < 9.94 } {
147
          append oline [format " %5.2f" $ms]
148
        } else {
149
          append oline [format " %5.1f" $ms]
150
        }
151
        if { $kb > 999.9 } {
152
          append oline [format " %5.0f" $kb]
153
        } else {
154
          append oline [format " %5.1f" $kb]
155
        }
156 11 wfjm
      }
157
 
158
      append rval $oline
159
    }
160
    return $rval
161
  }
162
}

powered by: WebSVN 2.1.0

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