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

Subversion Repositories w11

[/] [w11/] [tags/] [w11a_V0.61/] [tools/] [tcl/] [rbbram/] [perf.tcl] - Diff between revs 21 and 26

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

Rev 21 Rev 26
# $Id: perf.tcl 516 2013-05-05 21:24:52Z mueller $
# $Id: perf.tcl 516 2013-05-05 21:24:52Z mueller $
#
#
# Copyright 2011-2013 by Walter F.J. Mueller <W.F.J.Mueller@gsi.de>
# Copyright 2011-2013 by Walter F.J. Mueller <W.F.J.Mueller@gsi.de>
#
#
# This program is free software; you may redistribute and/or modify it under
# This program is free software; you may redistribute and/or modify it under
# the terms of the GNU General Public License as published by the Free
# the terms of the GNU General Public License as published by the Free
# Software Foundation, either version 2, or at your option any later version.
# Software Foundation, either version 2, or at your option any later version.
#
#
# This program is distributed in the hope that it will be useful, but
# This program is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY, without even the implied warranty of MERCHANTABILITY
# WITHOUT ANY WARRANTY, without even the implied warranty of MERCHANTABILITY
# or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
# or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
# for complete details.
# for complete details.
#
#
#  Revision History:
#  Revision History:
# Date         Rev Version  Comment
# Date         Rev Version  Comment
# 2013-01-04   469   1.0.2  perf_blk: add optional 2nd arg: trace
# 2013-01-04   469   1.0.2  perf_blk: add optional 2nd arg: trace
# 2012-12-27   465   1.0.1  adopt format, cover small ms and large kb 
# 2012-12-27   465   1.0.1  adopt format, cover small ms and large kb 
# 2011-04-17   376   1.0    Initial version
# 2011-04-17   376   1.0    Initial version
#
#
 
 
package provide rbbram 1.0
package provide rbbram 1.0
 
 
namespace eval rbbram {
namespace eval rbbram {
  #
  #
  # perf_blk: determine wblk/rblk write performance
  # perf_blk: determine wblk/rblk write performance
  # 
  # 
  proc perf_blk {{tmax 1000} {trace 0}} {
  proc perf_blk {{tmax 1000} {trace 0}} {
    if {$tmax < 1} { error "-E: perf_blk: tmax argument must be >= 1" }
    if {$tmax < 1} { error "-E: perf_blk: tmax argument must be >= 1" }
 
 
    set amax [regget rbbram::CNTL(addr) -1]
    set amax [regget rbbram::CNTL(addr) -1]
    set rval \
    set rval \
"nblk   1 wblk   |  2 wblk   |  4 wblk   |  1 rblk   |  2 rblk   |  4 rblk   "
"nblk   1 wblk   |  2 wblk   |  4 wblk   |  1 rblk   |  2 rblk   |  4 rblk   "
    append rval \
    append rval \
"\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"
"\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"
 
 
    foreach nblk {1 2 4 8 16 32 64 128 256} {
    foreach nblk {1 2 4 8 16 32 64 128 256} {
      set wbuf0 {}
      set wbuf0 {}
      set wbuf1 {}
      set wbuf1 {}
      set wbuf2 {}
      set wbuf2 {}
      set wbuf3 {}
      set wbuf3 {}
      for {set i 0} {$i < $nblk} {incr i} {
      for {set i 0} {$i < $nblk} {incr i} {
        lappend wbuf0 $i
        lappend wbuf0 $i
        lappend wbuf1 [expr {0x1000 + $i}]
        lappend wbuf1 [expr {0x1000 + $i}]
        lappend wbuf2 [expr {0x2000 + $i}]
        lappend wbuf2 [expr {0x2000 + $i}]
        lappend wbuf3 [expr {0x3000 + $i}]
        lappend wbuf3 [expr {0x3000 + $i}]
      }
      }
 
 
      set pval {}
      set pval {}
 
 
      # single wblk
      # single wblk
      if {$trace} { puts "1 wblk for $nblk" }
      if {$trace} { puts "1 wblk for $nblk" }
      set tbeg [clock clicks -milliseconds]
      set tbeg [clock clicks -milliseconds]
      set addr 0x0000
      set addr 0x0000
      for {set i 1} {1} {incr i} {
      for {set i 1} {1} {incr i} {
        rlc exec \
        rlc exec \
          -wreg br.cntl $addr  \
          -wreg br.cntl $addr  \
          -wblk br.data $wbuf0
          -wblk br.data $wbuf0
        set trun [expr {[clock clicks -milliseconds] - $tbeg}]
        set trun [expr {[clock clicks -milliseconds] - $tbeg}]
        if {$trun > $tmax} { break }
        if {$trun > $tmax} { break }
        set addr [expr {( $addr + $nblk ) & $amax}]
        set addr [expr {( $addr + $nblk ) & $amax}]
      }
      }
      lappend pval 1 $i $trun
      lappend pval 1 $i $trun
 
 
      # double wblk
      # double wblk
      if {$trace} { puts "2 wblk for $nblk" }
      if {$trace} { puts "2 wblk for $nblk" }
      set tbeg [clock clicks -milliseconds]
      set tbeg [clock clicks -milliseconds]
      set addr 0x0000
      set addr 0x0000
      for {set i 1} {1} {incr i} {
      for {set i 1} {1} {incr i} {
        rlc exec \
        rlc exec \
          -wreg br.cntl $addr  \
          -wreg br.cntl $addr  \
          -wblk br.data $wbuf0 \
          -wblk br.data $wbuf0 \
          -wblk br.data $wbuf1
          -wblk br.data $wbuf1
        set trun [expr {[clock clicks -milliseconds] - $tbeg}]
        set trun [expr {[clock clicks -milliseconds] - $tbeg}]
        if {$trun > $tmax} { break }
        if {$trun > $tmax} { break }
        set addr [expr {( $addr + 2 * $nblk ) & $amax}]
        set addr [expr {( $addr + 2 * $nblk ) & $amax}]
      }
      }
      lappend pval 2 $i $trun
      lappend pval 2 $i $trun
 
 
      # quad wblk
      # quad wblk
      if {$trace} { puts "4 wblk for $nblk" }
      if {$trace} { puts "4 wblk for $nblk" }
      set tbeg [clock clicks -milliseconds]
      set tbeg [clock clicks -milliseconds]
      set addr 0x0000
      set addr 0x0000
      for {set i 1} {1} {incr i} {
      for {set i 1} {1} {incr i} {
        rlc exec \
        rlc exec \
          -wreg br.cntl $addr  \
          -wreg br.cntl $addr  \
          -wblk br.data $wbuf0 \
          -wblk br.data $wbuf0 \
          -wblk br.data $wbuf1 \
          -wblk br.data $wbuf1 \
          -wblk br.data $wbuf2 \
          -wblk br.data $wbuf2 \
          -wblk br.data $wbuf3
          -wblk br.data $wbuf3
        set trun [expr {[clock clicks -milliseconds] - $tbeg}]
        set trun [expr {[clock clicks -milliseconds] - $tbeg}]
        if {$trun > $tmax} { break }
        if {$trun > $tmax} { break }
        set addr [expr {( $addr + 4 * $nblk ) & $amax}]
        set addr [expr {( $addr + 4 * $nblk ) & $amax}]
      }
      }
      lappend pval 4 $i $trun
      lappend pval 4 $i $trun
 
 
      # single rblk
      # single rblk
      if {$trace} { puts "1 rblk for $nblk" }
      if {$trace} { puts "1 rblk for $nblk" }
      set tbeg [clock clicks -milliseconds]
      set tbeg [clock clicks -milliseconds]
      set addr 0x0000
      set addr 0x0000
      for {set i 1} {1} {incr i} {
      for {set i 1} {1} {incr i} {
        rlc exec \
        rlc exec \
          -wreg br.cntl $addr \
          -wreg br.cntl $addr \
          -rblk br.data $nblk rbuf0
          -rblk br.data $nblk rbuf0
        set trun [expr {[clock clicks -milliseconds] - $tbeg}]
        set trun [expr {[clock clicks -milliseconds] - $tbeg}]
        if {$trun > $tmax} { break }
        if {$trun > $tmax} { break }
        set addr [expr {( $addr + $nblk ) & $amax}]
        set addr [expr {( $addr + $nblk ) & $amax}]
      }
      }
      lappend pval 1 $i $trun
      lappend pval 1 $i $trun
 
 
      # double rblk
      # double rblk
      if {$trace} { puts "2 rblk for $nblk" }
      if {$trace} { puts "2 rblk for $nblk" }
      set tbeg [clock clicks -milliseconds]
      set tbeg [clock clicks -milliseconds]
      set addr 0x0000
      set addr 0x0000
      for {set i 1} {1} {incr i} {
      for {set i 1} {1} {incr i} {
        rlc exec \
        rlc exec \
          -wreg br.cntl $addr \
          -wreg br.cntl $addr \
          -rblk br.data $nblk rbuf0 \
          -rblk br.data $nblk rbuf0 \
          -rblk br.data $nblk rbuf1
          -rblk br.data $nblk rbuf1
        set trun [expr {[clock clicks -milliseconds] - $tbeg}]
        set trun [expr {[clock clicks -milliseconds] - $tbeg}]
        if {$trun > $tmax} { break }
        if {$trun > $tmax} { break }
        set addr [expr {( $addr + 2 * $nblk ) & $amax}]
        set addr [expr {( $addr + 2 * $nblk ) & $amax}]
      }
      }
      lappend pval 2 $i $trun
      lappend pval 2 $i $trun
 
 
      # quad rblk
      # quad rblk
      if {$trace} { puts "4 rblk for $nblk" }
      if {$trace} { puts "4 rblk for $nblk" }
      set tbeg [clock clicks -milliseconds]
      set tbeg [clock clicks -milliseconds]
      set addr 0x0000
      set addr 0x0000
      for {set i 1} {1} {incr i} {
      for {set i 1} {1} {incr i} {
        rlc exec \
        rlc exec \
          -wreg br.cntl $addr \
          -wreg br.cntl $addr \
          -rblk br.data $nblk rbuf0 \
          -rblk br.data $nblk rbuf0 \
          -rblk br.data $nblk rbuf1 \
          -rblk br.data $nblk rbuf1 \
          -rblk br.data $nblk rbuf2 \
          -rblk br.data $nblk rbuf2 \
          -rblk br.data $nblk rbuf3
          -rblk br.data $nblk rbuf3
        set trun [expr {[clock clicks -milliseconds] - $tbeg}]
        set trun [expr {[clock clicks -milliseconds] - $tbeg}]
        if {$trun > $tmax} { break }
        if {$trun > $tmax} { break }
        set addr [expr {( $addr + 4 * $nblk ) & $amax}]
        set addr [expr {( $addr + 4 * $nblk ) & $amax}]
      }
      }
      lappend pval 4 $i $trun
      lappend pval 4 $i $trun
 
 
      set oline [format "\n%4d" $nblk]
      set oline [format "\n%4d" $nblk]
      foreach {nr i trun} $pval {
      foreach {nr i trun} $pval {
        set ms [expr {double($trun) / double($nr*$i)}]
        set ms [expr {double($trun) / double($nr*$i)}]
        set kb [expr {double(2*$nr*$i*$nblk) / double($trun)}]
        set kb [expr {double(2*$nr*$i*$nblk) / double($trun)}]
        if { $ms < 9.94 } {
        if { $ms < 9.94 } {
          append oline [format " %5.2f" $ms]
          append oline [format " %5.2f" $ms]
        } else {
        } else {
          append oline [format " %5.1f" $ms]
          append oline [format " %5.1f" $ms]
        }
        }
        if { $kb > 999.9 } {
        if { $kb > 999.9 } {
          append oline [format " %5.0f" $kb]
          append oline [format " %5.0f" $kb]
        } else {
        } else {
          append oline [format " %5.1f" $kb]
          append oline [format " %5.1f" $kb]
        }
        }
      }
      }
 
 
      append rval $oline
      append rval $oline
    }
    }
    return $rval
    return $rval
  }
  }
}
}
 
 

powered by: WebSVN 2.1.0

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