URL
https://opencores.org/ocsvn/w11/w11/trunk
Subversion Repositories w11
Compare Revisions
- This comparison shows the changes necessary to convert path
/w11/trunk
- from Rev 28 to Rev 27
- ↔ Reverse comparison
Rev 28 → Rev 27
/tools/tcl/rlink/util.tcl
1,4 → 1,4
# $Id: util.tcl 617 2014-12-21 14:18:53Z mueller $ |
# $Id: util.tcl 609 2014-12-07 19:35:25Z mueller $ |
# |
# Copyright 2011-2014 by Walter F.J. Mueller <W.F.J.Mueller@gsi.de> |
# |
13,7 → 13,6
# |
# Revision History: |
# Date Rev Version Comment |
# 2014-12-21 617 2.0.1 add rbtout definition in STAT |
# 2014-12-07 609 2.0 use new rlink v4 iface; remove SINIT again |
# 2014-08-09 580 1.0.2 add run_rri |
# 2011-08-06 403 1.0.1 add SINT and SINIT defs for serport init |
26,7 → 25,7
package require rutil 1.0 |
|
namespace eval rlink { |
regdsc STAT {stat 7 4} {attn 3} {rbtout 2} {rbnak 1} {rberr 0} |
regdsc STAT {stat 7 4} {attn 3} {rbnak 1} {rberr 0} |
regdsc RLCNTL {anena 15} {atoena 14} {atoval 7 8} |
regdsc RLSTAT {lcmd 15 8} {babo 7} {rbsize 2 3} |
# |
/tools/tcl/rbtest/test_data.tcl
1,4 → 1,4
# $Id: test_data.tcl 617 2014-12-21 14:18:53Z mueller $ |
# $Id: test_data.tcl 603 2014-11-09 22:50:26Z mueller $ |
# |
# Copyright 2011-2014 by Walter F.J. Mueller <W.F.J.Mueller@gsi.de> |
# |
13,7 → 13,6
# |
# Revision History: |
# Date Rev Version Comment |
# 2014-12-21 617 2.0.1 use rbtout stat bit for timeout |
# 2014-11-09 603 2.0 use rlink v4 address layout and iface |
# 2011-03-27 374 1.0 Initial version |
# 2011-03-13 369 0.1 First Draft |
72,8 → 71,8
-wreg te.data 0xdead \ |
-rreg te.data -edata 0xdead \ |
-wreg te.cntl [regbld rbtest::CNTL {nbusy 0x3ff}] \ |
-wreg te.data 0xbeaf -estat [regbld rlink::STAT rbtout] $esdmsk \ |
-rreg te.data -estat [regbld rlink::STAT rbtout] $esdmsk \ |
-wreg te.data 0xbeaf -estat [regbld rlink::STAT rbnak] $esdmsk \ |
-rreg te.data -estat [regbld rlink::STAT rbnak] $esdmsk \ |
-wreg te.cntl 0x0000 \ |
-rreg te.data -edata 0xdead -edata 0xdead |
# |
/tools/tcl/rbtest/util.tcl
1,4 → 1,4
# $Id: util.tcl 617 2014-12-21 14:18:53Z mueller $ |
# $Id: util.tcl 603 2014-11-09 22:50:26Z mueller $ |
# |
# Copyright 2011-2014 by Walter F.J. Mueller <W.F.J.Mueller@gsi.de> |
# |
13,7 → 13,6
# |
# Revision History: |
# Date Rev Version Comment |
# 2014-12-21 617 2.0.1 use rbtout stat bit for timeout |
# 2014-11-09 603 2.0 use rlink v4 address layout and iface with 8 regs |
# 2011-03-27 374 1.0 Initial version |
# 2011-03-13 369 0.1 Frist draft |
62,7 → 61,7
rlc exec -estatdef 0 $esdmsk \ |
-rreg te.cntl sav_cntl \ |
-wreg te.cntl [regbld rbtest::CNTL {nbusy -1}] \ |
-rreg te.data -estat [regbld rlink::STAT rbtout] $esdmsk \ |
-rreg te.data -estat [regbld rlink::STAT rbnak] $esdmsk \ |
-rreg te.ncyc ncyc |
rlc exec -estatdef 0 $esdmsk \ |
-wreg te.cntl $sav_cntl |
72,10 → 71,10
# probe: determine rbd_tester environment (max nbusy, stat and attn wiring) |
# |
proc probe {} { |
set esdval 0x00 |
set esdmsk [regbld rlink::STAT {stat -1}] |
set esdmsktout [regbld rlink::STAT {stat -1} rbtout] |
set esdmskattn [regbld rlink::STAT {stat -1} attn] |
set esdval 0x00 |
set esdmsk [regbld rlink::STAT {stat -1}] |
set esdmsknak [regbld rlink::STAT {stat -1} rbnak] |
set esdmskatt [regbld rlink::STAT {stat -1} attn] |
set rbusy {} |
set rstat {} |
set rattn {} |
91,8 → 90,8
set valc [regbld rbtest::CNTL [list nbusy $nbusy]] |
rlc exec \ |
-wreg te.cntl $valc -estat $esdval $esdmsk\ |
-wreg te.data 0x0000 statwr -estat $esdval $esdmsktout \ |
-rreg te.data dummy statrd -estat $esdval $esdmsktout |
-wreg te.data 0x0000 statwr -estat $esdval $esdmsknak \ |
-rreg te.data dummy statrd -estat $esdval $esdmsknak |
if {[llength $wrerr] == 0 && [regget rlink::STAT(rbnak) $statwr] != 0} { |
lappend wrerr $i $j $nbusy |
} |
118,7 → 117,7
# |
rlc exec -attn |
for {set i 0} { $i < 16 } {incr i} { |
rlc exec -estatdef $esdval $esdmskattn \ |
rlc exec -estatdef $esdval $esdmskatt \ |
-wreg te.attn [expr {1 << $i}] \ |
-attn attnpat |
lappend rattn [list $i $attnpat] |
/tools/tcl/rbbram/perf.tcl
1,6 → 1,6
# $Id: perf.tcl 622 2014-12-28 20:45:26Z mueller $ |
# $Id: perf.tcl 609 2014-12-07 19:35:25Z mueller $ |
# |
# Copyright 2011-2014 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 |
# the terms of the GNU General Public License as published by the Free |
13,7 → 13,6
# |
# Revision History: |
# Date Rev Version Comment |
# 2014-12-27 622 1.1.1 don't use read buffers in rblk speed test |
# 2014-12-06 609 1.1 test 512,1024,2000 word wblk/rbld; retra buffer cut |
# 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 |
38,7 → 37,7
"\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" |
|
# 256 512 1024 |
foreach nblk {1 2 4 8 16 32 64 128 256 512 768 1024 1536 2000} { |
foreach nblk {1 2 4 8 16 32 64 128 256 512 1024 2000} { |
set wbuf0 {} |
set wbuf1 {} |
set wbuf2 {} |
54,13 → 53,13
|
# single wblk |
if {$trace} { puts "1 wblk for $nblk" } |
set tbeg [clock milliseconds] |
set tbeg [clock clicks -milliseconds] |
set addr 0x0000 |
for {set i 1} {1} {incr i} { |
rlc exec \ |
-wreg br.cntl $addr \ |
-wblk br.data $wbuf0 |
set trun [expr {[clock milliseconds] - $tbeg}] |
set trun [expr {[clock clicks -milliseconds] - $tbeg}] |
if {$trun > $tmax} { break } |
set addr [expr {( $addr + $nblk ) & $amax}] |
} |
68,7 → 67,7
|
# double wblk |
if {$trace} { puts "2 wblk for $nblk" } |
set tbeg [clock milliseconds] |
set tbeg [clock clicks -milliseconds] |
set addr 0x0000 |
for {set i 1} {1} {incr i} { |
rlc exec \ |
75,7 → 74,7
-wreg br.cntl $addr \ |
-wblk br.data $wbuf0 \ |
-wblk br.data $wbuf1 |
set trun [expr {[clock milliseconds] - $tbeg}] |
set trun [expr {[clock clicks -milliseconds] - $tbeg}] |
if {$trun > $tmax} { break } |
set addr [expr {( $addr + 2 * $nblk ) & $amax}] |
} |
83,7 → 82,7
|
# quad wblk |
if {$trace} { puts "4 wblk for $nblk" } |
set tbeg [clock milliseconds] |
set tbeg [clock clicks -milliseconds] |
set addr 0x0000 |
for {set i 1} {1} {incr i} { |
rlc exec \ |
92,7 → 91,7
-wblk br.data $wbuf1 \ |
-wblk br.data $wbuf2 \ |
-wblk br.data $wbuf3 |
set trun [expr {[clock milliseconds] - $tbeg}] |
set trun [expr {[clock clicks -milliseconds] - $tbeg}] |
if {$trun > $tmax} { break } |
set addr [expr {( $addr + 4 * $nblk ) & $amax}] |
} |
100,13 → 99,13
|
# single rblk |
if {$trace} { puts "1 rblk for $nblk" } |
set tbeg [clock milliseconds] |
set tbeg [clock clicks -milliseconds] |
set addr 0x0000 |
for {set i 1} {1} {incr i} { |
rlc exec \ |
-wreg br.cntl $addr \ |
-rblk br.data $nblk |
set trun [expr {[clock milliseconds] - $tbeg}] |
-rblk br.data $nblk rbuf0 |
set trun [expr {[clock clicks -milliseconds] - $tbeg}] |
if {$trun > $tmax} { break } |
set addr [expr {( $addr + $nblk ) & $amax}] |
} |
115,14 → 114,14
# double rblk |
if {2*$nblk <= $rbmax} { |
if {$trace} { puts "2 rblk for $nblk" } |
set tbeg [clock milliseconds] |
set tbeg [clock clicks -milliseconds] |
set addr 0x0000 |
for {set i 1} {1} {incr i} { |
rlc exec \ |
-wreg br.cntl $addr \ |
-rblk br.data $nblk \ |
-rblk br.data $nblk |
set trun [expr {[clock milliseconds] - $tbeg}] |
-rblk br.data $nblk rbuf0 \ |
-rblk br.data $nblk rbuf1 |
set trun [expr {[clock clicks -milliseconds] - $tbeg}] |
if {$trun > $tmax} { break } |
set addr [expr {( $addr + 2 * $nblk ) & $amax}] |
} |
134,16 → 133,16
# quad rblk |
if {4*$nblk <= $rbmax} { |
if {$trace} { puts "4 rblk for $nblk" } |
set tbeg [clock milliseconds] |
set tbeg [clock clicks -milliseconds] |
set addr 0x0000 |
for {set i 1} {1} {incr i} { |
rlc exec \ |
-wreg br.cntl $addr \ |
-rblk br.data $nblk \ |
-rblk br.data $nblk \ |
-rblk br.data $nblk \ |
-rblk br.data $nblk |
set trun [expr {[clock milliseconds] - $tbeg}] |
-rblk br.data $nblk rbuf0 \ |
-rblk br.data $nblk rbuf1 \ |
-rblk br.data $nblk rbuf2 \ |
-rblk br.data $nblk rbuf3 |
set trun [expr {[clock clicks -milliseconds] - $tbeg}] |
if {$trun > $tmax} { break } |
set addr [expr {( $addr + 4 * $nblk ) & $amax}] |
} |
/tools/tcl/rbmoni/util.tcl
1,4 → 1,4
# $Id: util.tcl 619 2014-12-23 13:17:41Z mueller $ |
# $Id: util.tcl 603 2014-11-09 22:50:26Z mueller $ |
# |
# Copyright 2011-2014 by Walter F.J. Mueller <W.F.J.Mueller@gsi.de> |
# |
13,7 → 13,6
# |
# Revision History: |
# Date Rev Version Comment |
# 2014-12-23 619 3.0 rbd_rbmon reorganized, supports now 16 bit addresses |
# 2014-11-09 603 2.0 use rlink v4 address layout |
# 2011-03-27 374 1.0 Initial version |
# 2011-03-13 369 0.1 First draft |
28,28 → 27,25
# |
# setup register descriptions for rbd_rbmon |
# |
regdsc CNTL {wena 2} {stop 1} {start 0} |
regdsc STAT {bsize 15 3} {wrap 0} |
regdsc ADDR {laddr 15 14} {waddr 1 2} |
regdsc CNTL {go 0} |
regdsc ALIM {hilim 15 8} {lolim 7 8} |
regdsc ADDR {wrap 15} {addr 10 11 "-"} {laddr 10 9} {waddr 1 2} |
# |
regdsc DAT3 {flags 15 8 "-"} {burst 15} {tout 14} {nak 13} {ack 12} \ |
{busy 11} {err 10} {we 9} {init 8} {ndlymsb 7 8} |
regdsc DAT2 {ndlylsb 15 6} {nbusy 9 10} |
regdsc DAT3 {flags 15 8 "-"} {ack 15} {busy 14} {err 13} {nak 12} {tout 11} \ |
{init 9} {we 8} {addr 7 8} |
regdsc DAT0 {ndlymsb 15 4} {nbusy 11 12} |
# |
# 'pseudo register', describes 1st word in return list element of rbmoni::read |
# same bits as DAT3(flags) (but shifted positions) plus bnext |
regdsc FLAGS {bnext 8} {burst 7} {tout 6} {nak 5} {ack 4} \ |
{busy 3} {err 2} {we 1} {init 0} |
# must have same bit sequence as DAT3(flags) |
regdsc FLAGS {ack 7} {busy 6} {err 5} {nak 4} {tout 3} {init 1} {we 0} |
# |
# setup: amap definitions for rbd_rbmon |
# |
proc setup {{base 0xffe8}} { |
rlc amap -insert rm.cntl [expr {$base + 0x00}] |
rlc amap -insert rm.stat [expr {$base + 0x01}] |
rlc amap -insert rm.hilim [expr {$base + 0x02}] |
rlc amap -insert rm.lolim [expr {$base + 0x03}] |
rlc amap -insert rm.addr [expr {$base + 0x04}] |
rlc amap -insert rm.data [expr {$base + 0x05}] |
rlc amap -insert rm.cntl [expr {$base + 0x00}] |
rlc amap -insert rm.alim [expr {$base + 0x01}] |
rlc amap -insert rm.addr [expr {$base + 0x02}] |
rlc amap -insert rm.data [expr {$base + 0x03}] |
} |
# |
# init: reset rbd_rbmon (stop, reset alim) |
56,37 → 52,34
# |
proc init {} { |
rlc exec \ |
-wreg rm.cntl [regbld rbmoni::CNTL stop] \ |
-wreg rm.hilim 0xfffb \ |
-wreg rm.lolim 0x0000 \ |
-wreg rm.cntl 0x0000 \ |
-wreg rm.alim [regbld rbmoni::ALIM {hilim 0xff} {lolim 0x00}] \ |
-wreg rm.addr 0x0000 |
} |
# |
# start: start the rbmon |
# |
proc start {{wena 0}} { |
rlc exec -wreg rm.cntl [regbld rbmoni::CNTL start [list wena $wena]] |
proc start {} { |
rlc exec -wreg rm.cntl [regbld rbmoni::CNTL go] |
} |
# |
# stop: stop the rbmon |
# |
proc stop {} { |
rlc exec -wreg rm.cntl [regbld rbmoni::CNTL stop] |
rlc exec -wreg rm.cntl 0x0000 |
} |
# |
# read: read nent last entries (by default all) |
# |
proc read {{nent -1}} { |
rlc exec -rreg rm.addr raddr \ |
-rreg rm.stat rstat |
|
set bsize [regget rbmoni::STAT(bsize) $rstat] |
set amax [expr {( 512 << $bsize ) - 1}] |
set amax [regget rbmoni::ADDR(laddr) -1] |
if {$nent == -1} { set nent $amax } |
|
rlc exec -rreg rm.addr raddr |
|
set laddr [regget rbmoni::ADDR(laddr) $raddr] |
set nval $laddr |
if {[regget rbmoni::STAT(wrap) $rstat]} { set nval $amax } |
if {[regget rbmoni::ADDR(wrap) $raddr]} { set nval $amax } |
|
if {$nent > $nval} {set nent $nval} |
if {$nent == 0} { return {} } |
96,38 → 89,24
|
set rval {} |
|
set nrest $nent |
while {$nrest > 0} { |
set nblk [expr {$nrest << 2}] |
while {$nent > 0} { |
set nblk [expr {$nent << 2}] |
if {$nblk > 256} {set nblk 256} |
rlc exec -rblk rm.data $nblk rawdat |
|
foreach {d0 d1 d2 d3} $rawdat { |
set eflag [regget rbmoni::DAT3(flags) $d3] |
set edelay [expr {( [regget rbmoni::DAT3(ndlymsb) $d3] << 6 ) | |
[regget rbmoni::DAT2(ndlylsb) $d2] }] |
set enbusy [regget rbmoni::DAT2(nbusy) $d2] |
set edata $d1 |
set eaddr $d0 |
lappend rval [list $eflag $eaddr $edata $edelay $enbusy] |
set eaddr [regget rbmoni::DAT3(addr) $d3] |
set edly [expr {( [regget rbmoni::DAT0(ndlymsb) $d0] << 16 ) | $d1 }] |
set enbusy [regget rbmoni::DAT0(nbusy) $d0] |
lappend rval [list $eflag $eaddr $d2 $edly $enbusy] |
} |
|
set nrest [expr {$nrest - ( $nblk >> 2 ) }] |
set nent [expr {$nent - ( $nblk >> 2 ) }] |
} |
|
rlc exec -wreg rm.addr $raddr |
|
set mbnext [regbld rbmoni::FLAGS bnext] |
set mburst [regbld rbmoni::FLAGS burst] |
|
# now set bnext flag when burst is set in following entry |
for {set i 1} {$i < $nent} {incr i} { |
if {[lindex $rval $i 0] & int($mburst)} { |
set i1 [expr {$i - 1} ] |
lset rval $i1 0 [expr {[lindex $rval $i1 0] | $mbnext}] |
} |
} |
|
return $rval |
} |
# |
144,63 → 123,33
} |
|
set rval {} |
set edlymax 16383 |
|
set eind [expr {1 - [llength $mondat] }] |
append rval \ |
" ind addr data delay nbsy flags bu to na ac bs er mode" |
append rval " ind addr data delay nbusy ac bs er na to in we" |
|
set mbnext [regbld rbmoni::FLAGS bnext] |
set mburst [regbld rbmoni::FLAGS burst] |
set mtout [regbld rbmoni::FLAGS tout ] |
set mnak [regbld rbmoni::FLAGS nak ] |
set mack [regbld rbmoni::FLAGS ack ] |
set mbusy [regbld rbmoni::FLAGS busy ] |
set merr [regbld rbmoni::FLAGS err ] |
set mwe [regbld rbmoni::FLAGS we ] |
set minit [regbld rbmoni::FLAGS init ] |
set mblk [expr {$mbnext | $mburst}] |
|
foreach {ele} $mondat { |
foreach {eflag eaddr edata edly enbusy} $ele { break } |
|
set fburst [expr {$eflag & $mburst}] |
set ftout [expr {$eflag & $mtout} ] |
set fnak [expr {$eflag & $mnak} ] |
set fack [expr {$eflag & $mack} ] |
set fbusy [expr {$eflag & $mbusy} ] |
set ferr [expr {$eflag & $merr} ] |
set fwe [expr {$eflag & $mwe} ] |
set finit [expr {$eflag & $minit} ] |
|
set pburst [expr {$fburst ? "bu" : " "}] |
set ptout [expr {$ftout ? "to" : " "}] |
set pnak [expr {$fnak ? "na" : " "}] |
set pack [expr {$fack ? "ac" : " "}] |
set pbusy [expr {$fbusy ? "bs" : " "}] |
set perr [expr {$ferr ? "er" : " "}] |
set pmode "????" |
if {$finit} { |
set pmode "init" |
set fack [regget rbmoni::FLAGS(ack) $eflag] |
set fbsy [regget rbmoni::FLAGS(busy) $eflag] |
set ferr [regget rbmoni::FLAGS(err) $eflag] |
set fnak [regget rbmoni::FLAGS(nak) $eflag] |
set fto [regget rbmoni::FLAGS(tout) $eflag] |
set fini [regget rbmoni::FLAGS(init) $eflag] |
set fwe [regget rbmoni::FLAGS(we) $eflag] |
set ename "" |
set comment "" |
if {$ferr} {append comment " err=1!"} |
if {$fini} { |
append comment " init" |
} else { |
if {$fwe} { |
set pmode [expr {$eflag & $mblk ? "wblk" : "wreg"}] |
} else { |
set pmode [expr {$eflag & $mblk ? "rblk" : "rreg"}] |
} |
if {$fnak} {append comment " nak=1!"} |
} |
|
set pedly [expr {$edly!=$edlymax ? [format "%5d" $edly] : " --"}] |
set ename [format "%4.4x" $eaddr] |
set comment "" |
if {$ferr} {append comment " ERR=1!"} |
if {!$finit && $fnak} {append comment " NAK=1!"} |
if {$ftout} {append comment " TOUT=1!"} |
if {$fto} {append comment " tout=1!"} |
if {[rlc amap -testaddr $eaddr]} {set ename [rlc amap -name $eaddr]} |
append rval [format \ |
"\n%5d %-10s %4.4x %5s %4d %s %s %s %s %s %s %s %s %s" \ |
$eind $ename $edata $pedly $enbusy [pbvi b8 $eflag] \ |
$pburst $ptout $pnak $pack $pbusy $perr $pmode $comment] |
"\n%4d %-10s %4.4x %6d %4d %2.2x %d %d %d %d %d %d %d %s" \ |
$eind $ename $edata $edly $enbusy $eflag \ |
$fack $fbsy $ferr $fnak $fto $fini $fwe $comment] |
incr eind |
} |
|
217,23 → 166,22
set uedat {} |
set uemsk {} |
|
set m3 [regbld rbmoni::DAT3 {ndlymsb -1}] |
set m2 [regbld rbmoni::DAT2 {ndlylsb -1}] |
set m1 0 |
set m0 0 |
set m0 [expr {0xffff & ~[regget rbmoni::DAT0(nbusy) -1] }] |
set d1 0x0000 |
set m1 0xffff |
set m3 0x0000 |
|
foreach line $args { |
foreach {eflags eaddr edata enbusy} $line { break } |
set d3 [regbld rbmoni::DAT3 [list flags $eflags]] |
set d2 [regbld rbmoni::DAT2 [list nbusy $enbusy]] |
set d0 [regbld rbmoni::DAT0 [list nbusy $enbusy]] |
if {$edata ne ""} { |
set m1 0x0000 |
set d1 $edata |
set m2 0x0000 |
set d2 $edata |
} else { |
set m1 0xffff |
set d1 0x0000 |
set m2 0xffff |
set d2 0x0000 |
} |
set d0 $eaddr |
set d3 [regbld rbmoni::DAT3 [list flags $eflags] [list addr $eaddr]] |
|
lappend uedat $d0 $d1 $d2 $d3 |
lappend uemsk $m0 $m1 $m2 $m3 |
/tools/tcl/rbmoni/test_rbtest.tcl
1,6 → 1,6
# $Id: test_rbtest.tcl 619 2014-12-23 13:17:41Z mueller $ |
# $Id: test_rbtest.tcl 516 2013-05-05 21:24:52Z mueller $ |
# |
# Copyright 2011-2014 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 |
# the terms of the GNU General Public License as published by the Free |
13,7 → 13,6
# |
# Revision History: |
# Date Rev Version Comment |
# 2014-12-22 619 2.0 adopt to new rbd_rbmon and rlink v4 |
# 2011-03-27 374 1.0 Initial version |
# 2011-03-13 369 0.1 First Draft |
# |
41,40 → 40,32
rbtest::init |
# |
set atecntl [rlc amap te.cntl] |
set atestat [rlc amap te.stat] |
set ateattn [rlc amap te.attn] |
set atencyc [rlc amap te.ncyc] |
set atedata [rlc amap te.data] |
set atedinc [rlc amap te.dinc] |
set atefifo [rlc amap te.fifo] |
set atelnak [rlc amap te.lnak] |
|
# |
#------------------------------------------------------------------------- |
rlc log " test 1: exercise monitor data access via data/addr regs" |
|
set vtestat 0xf |
set vtecntl [regbld rbtest::CNTL {stat -1}] |
set vtedata 0x1234 |
|
# write/read te.stat and te.data with rbmoni on; check that 4 lines aquired |
# setup te.cntl and te.data |
rlc exec -estatdef $esdval $esdmsk \ |
-wreg rm.cntl [regbld rbmoni::CNTL start] \ |
-wreg te.stat $vtestat \ |
-wreg te.data $vtedata \ |
-rreg te.stat -edata $vtestat \ |
-wreg te.cntl $vtecntl \ |
-wreg te.data $vtedata |
|
# read te.cntl and te.data with rbmoni on; check that 2 lines aquired |
rlc exec -estatdef $esdval $esdmsk \ |
-wreg rm.cntl [regbld rbmoni::CNTL go] \ |
-rreg te.cntl -edata $vtecntl \ |
-rreg te.data -edata $vtedata \ |
-wreg rm.cntl [regbld rbmoni::CNTL stop] \ |
-rreg rm.addr -edata [regbld rbmoni::ADDR {laddr 4}] |
-wreg rm.cntl 0x0 \ |
-rreg rm.addr -edata [regbld rbmoni::ADDR {laddr 2}] |
|
if {$print} {puts [print]} |
rlc exec -wreg te.stat 0x0; # clear stat to simplify later stat tests |
|
# build expect list: list of {eflag eaddr edata enbusy} sublists |
raw_edata edat emsk \ |
[list [regbld rbmoni::FLAGS ack we] $atestat $vtestat 0] \ |
[list [regbld rbmoni::FLAGS ack we] $atedata $vtedata 0] \ |
[list [regbld rbmoni::FLAGS ack] $atestat $vtestat 0] \ |
[list [regbld rbmoni::FLAGS ack] $atedata $vtedata 0] |
[list [regbld rbmoni::FLAGS ack] $atecntl $vtecntl 0] \ |
[list [regbld rbmoni::FLAGS ack] $atedata $vtedata 0] |
|
# |
#------------------------------------------------------------------------- |
81,25 → 72,21
rlc log " test 1a: read all in one rblk" |
rlc exec -estatdef $esdval $esdmsk \ |
-wreg rm.addr 0x0000 \ |
-rblk rm.data 16 -edata $edat $emsk \ |
-rreg rm.addr -edata 16 |
|
-rblk rm.data 8 -edata $edat $emsk \ |
-rreg rm.addr -edata 0x8 |
# |
#------------------------------------------------------------------------- |
rlc log " test 1b: random address with rreg" |
foreach addr {0x1 0x3 0x5 0x7 0x6 0x4 0x2 0x0 \ |
0x9 0xb 0xd 0xf 0xe 0xc 0xa 0x8} { |
foreach addr {0x1 0x3 0x5 0x7 0x6 0x4 0x2 0x0} { |
rlc exec -estatdef $esdval $esdmsk \ |
-wreg rm.addr $addr \ |
-rreg rm.data -edata [lindex $edat $addr] [lindex $emsk $addr] \ |
-rreg rm.addr -edata [expr {$addr + 1}] |
} |
|
# |
#------------------------------------------------------------------------- |
rlc log " test 1c: random address with rblk length 2" |
foreach addr {0x1 0x3 0x5 0x7 0x6 0x4 0x2 0x0 \ |
0x9 0xb 0xd 0xe 0xc 0xa 0x8} { |
foreach addr {0x1 0x3 0x5 0x6 0x4 0x2 0x0} { |
rlc exec -estatdef $esdval $esdmsk \ |
-wreg rm.addr $addr \ |
-rblk rm.data 2 -edata [lrange $edat $addr [expr {$addr + 1}] ] \ |
106,7 → 93,6
[lrange $emsk $addr [expr {$addr + 1}] ] \ |
-rreg rm.addr -edata [expr {$addr + 2}] |
} |
|
# |
#------------------------------------------------------------------------- |
rlc log " test 2a: test rreg,wreg capture (ncyc=0); ack, we flags" |
165,8 → 151,8
rbmoni::start |
rlc exec -estatdef $esdval $esdmsk \ |
-wreg te.cntl $vtecntl \ |
-wreg te.data $vtedata -estat [regbld rlink::STAT rbtout] \ |
-rreg te.data -edata 0x5555 -estat [regbld rlink::STAT rbtout] \ |
-wreg te.data $vtedata -estat [regbld rlink::STAT rbnak] \ |
-rreg te.data -edata 0x5555 -estat [regbld rlink::STAT rbnak] \ |
-wreg te.cntl 0 |
rbmoni::stop |
if {$print} {puts [print]} |
175,16 → 161,21
# |
#------------------------------------------------------------------------- |
rlc log " test 2d: test rreg,wreg capture (prompt nak); nak flag" |
set vtelnak 0xdead |
set vtecntl [regbld rbtest::CNTL nofifo] |
set vtefifo 0xdead |
# build expect list: list of {eflag eaddr edata enbusy} sublists |
raw_edata edat emsk \ |
[list [regbld rbmoni::FLAGS nak we] $atelnak $vtelnak 0] \ |
[list [regbld rbmoni::FLAGS nak ] $atelnak {} 0] |
[list [regbld rbmoni::FLAGS ack we] $atecntl $vtecntl 0] \ |
[list [regbld rbmoni::FLAGS nak we] $atefifo $vtefifo 0] \ |
[list [regbld rbmoni::FLAGS nak ] $atefifo {} 0] \ |
[list [regbld rbmoni::FLAGS ack we] $atecntl 0 0] |
# |
rbmoni::start |
rlc exec -estatdef $esdval $esdmsk \ |
-wreg te.lnak $vtelnak -estat [regbld rlink::STAT rbnak] \ |
-rreg te.lnak -estat [regbld rlink::STAT rbnak] |
-wreg te.cntl $vtecntl \ |
-wreg te.fifo $vtefifo -estat [regbld rlink::STAT rbnak] \ |
-rreg te.fifo -estat [regbld rlink::STAT rbnak] \ |
-wreg te.cntl 0 |
rbmoni::stop |
if {$print} {puts [print]} |
raw_check $edat $emsk |
192,20 → 183,20
# |
#------------------------------------------------------------------------- |
rlc log " test 2e: test rreg,wreg capture (delayed nak); nak flag" |
set vtecntl [regbld rbtest::CNTL {nbusy 7}] |
set vtelnak 0xdead |
# build expect list: list of {eflag eaddr edata enbusy} sublists |
set vtecntl [regbld rbtest::CNTL nofifo {nbusy 7}] |
set vtefifo 0xdead |
# build expect list: list of {eflag eaddr edata enbusy} sublists |
raw_edata edat emsk \ |
[list [regbld rbmoni::FLAGS ack we] $atecntl $vtecntl 0] \ |
[list [regbld rbmoni::FLAGS ack busy nak we] $atelnak $vtelnak 7] \ |
[list [regbld rbmoni::FLAGS ack busy nak ] $atelnak {} 7] \ |
[list [regbld rbmoni::FLAGS ack busy nak we] $atefifo $vtefifo 7] \ |
[list [regbld rbmoni::FLAGS ack busy nak ] $atefifo {} 7] \ |
[list [regbld rbmoni::FLAGS ack we] $atecntl 0 0] |
# |
rbmoni::start |
rlc exec -estatdef $esdval $esdmsk \ |
-wreg te.cntl $vtecntl \ |
-wreg te.lnak $vtelnak -estat [regbld rlink::STAT rbnak] \ |
-rreg te.lnak -estat [regbld rlink::STAT rbnak] \ |
-wreg te.fifo $vtefifo -estat [regbld rlink::STAT rbnak] \ |
-rreg te.fifo -estat [regbld rlink::STAT rbnak] \ |
-wreg te.cntl 0 |
rbmoni::stop |
if {$print} {puts [print]} |
253,16 → 244,16
rbmoni::stop |
if {$print} {puts [print]} |
raw_check $edat $emsk |
|
|
# |
#------------------------------------------------------------------------- |
rlc log " test 3: test init capture; init flag" |
set vtecntl [regbld rbtest::CNTL {nbusy 2}] |
set vteinit [regbld rbtest::INIT cntl] |
set vtecntl [regbld rbtest::CNTL {nofifo}] |
set vteinit [regbld rbtest::INIT {cntl}] |
# build expect list: list of {eflag eaddr edata enbusy} sublists |
raw_edata edat emsk \ |
[list [regbld rbmoni::FLAGS ack we ] $atecntl $vtecntl 0] \ |
[list [regbld rbmoni::FLAGS nak init ] $atecntl $vteinit 0] \ |
[list [regbld rbmoni::FLAGS nak init we] $atecntl $vteinit 0] \ |
[list [regbld rbmoni::FLAGS ack ] $atecntl 0 0] |
# |
rbmoni::start |
277,20 → 268,20
# |
#------------------------------------------------------------------------- |
rlc log " test 4: test rblk,wblk capture (ncyc=2 on read)" |
set vteinit [regbld rbtest::INIT cntl] |
set vteinit [regbld rbtest::INIT cntl fifo] |
set nbusy_2 [regbld rbtest::CNTL {nbusy 2}] |
set vtefifo {0xdead 0xbeaf 0x4711} |
# build expect list: list of {eflag eaddr edata enbusy} sublists |
raw_edata edat emsk \ |
[list [regbld rbmoni::FLAGS nak init] $atecntl $vteinit 0] \ |
[list [regbld rbmoni::FLAGS ack we] $atefifo 0xdead 0] \ |
[list [regbld rbmoni::FLAGS burst ack we] $atefifo 0xbeaf 0] \ |
[list [regbld rbmoni::FLAGS burst ack we] $atefifo 0x4711 0] \ |
[list [regbld rbmoni::FLAGS ack we] $atecntl $nbusy_2 0] \ |
[list [regbld rbmoni::FLAGS ack busy ] $atefifo 0xdead 2] \ |
[list [regbld rbmoni::FLAGS burst ack busy ] $atefifo 0xbeaf 2] \ |
[list [regbld rbmoni::FLAGS burst ack busy ] $atefifo 0x4711 2] \ |
[list [regbld rbmoni::FLAGS nak init] $atecntl $vteinit 0] |
[list [regbld rbmoni::FLAGS nak init we] $atecntl $vteinit 0] \ |
[list [regbld rbmoni::FLAGS ack we] $atefifo 0xdead 0] \ |
[list [regbld rbmoni::FLAGS ack we] $atefifo 0xbeaf 0] \ |
[list [regbld rbmoni::FLAGS ack we] $atefifo 0x4711 0] \ |
[list [regbld rbmoni::FLAGS ack we] $atecntl $nbusy_2 0] \ |
[list [regbld rbmoni::FLAGS ack busy ] $atefifo 0xdead 2] \ |
[list [regbld rbmoni::FLAGS ack busy ] $atefifo 0xbeaf 2] \ |
[list [regbld rbmoni::FLAGS ack busy ] $atefifo 0x4711 2] \ |
[list [regbld rbmoni::FLAGS nak init we] $atecntl $vteinit 0] |
# |
rbmoni::start |
rlc exec -estatdef $esdval $esdmsk \ |
305,36 → 296,6
|
# |
#------------------------------------------------------------------------- |
rlc log " test 5: test lolim,hilim" |
# set window to te.ncyc to te.dinc, thus exclude cntl,stat,attn,fifo,lnak |
rlc exec -wreg rm.lolim $atencyc \ |
-wreg rm.hilim $atedinc |
|
# now access all regs, but only ncyc,data,dinc should be recorded |
raw_edata edat emsk \ |
[list [regbld rbmoni::FLAGS ack ] $atencyc 0x0001 0] \ |
[list [regbld rbmoni::FLAGS ack we] $atedata 0x2345 0] \ |
[list [regbld rbmoni::FLAGS ack ] $atedinc 0x2345 0] \ |
[list [regbld rbmoni::FLAGS ack ] $atedata 0x2346 0] |
# |
rbmoni::start |
rlc exec -rreg te.cntl \ |
-rreg te.stat \ |
-rreg te.attn \ |
-rreg te.ncyc \ |
-wreg te.data 0x2345 \ |
-wreg te.fifo 0xbeaf \ |
-rreg te.dinc -edata 0x2345 \ |
-rreg te.fifo -edata 0xbeaf \ |
-rreg te.data -edata 0x2346 \ |
-rreg te.lnak |
rbmoni::stop |
if {$print} {puts [print]} |
raw_check $edat $emsk |
rbmoni::init |
|
# |
#------------------------------------------------------------------------- |
rlc log "rbmoni::test_rbtest - cleanup:" |
rbtest::init |
rbmoni::init |
/tools/tcl/rbmoni/test_regs.tcl
1,4 → 1,4
# $Id: test_regs.tcl 622 2014-12-28 20:45:26Z mueller $ |
# $Id: test_regs.tcl 375 2011-04-02 07:56:47Z mueller $ |
# |
# Copyright 2011- by Walter F.J. Mueller <W.F.J.Mueller@gsi.de> |
# |
13,7 → 13,6
# |
# Revision History: |
# Date Rev Version Comment |
# 2014-12-27 622 2.0 rbd_rbmon reorganized, supports now 16 bit addresses |
# 2011-03-27 374 1.0 Initial version |
# 2011-03-13 369 0.1 First Draft |
# |
39,34 → 38,27
# |
#------------------------------------------------------------------------- |
rlc log " test 1: write/read cntl" |
rlc exec -estatdef $esdval $esdmsk \ |
-wreg rm.cntl [regbld rbmoni::CNTL start] \ |
-rreg rm.cntl -edata [regbld rbmoni::CNTL start] \ |
-wreg rm.cntl [regbld rbmoni::CNTL stop] \ |
-rreg rm.cntl -edata 0 \ |
-wreg rm.cntl [regbld rbmoni::CNTL start wena] \ |
-rreg rm.cntl -edata [regbld rbmoni::CNTL start wena] \ |
-wreg rm.cntl [regbld rbmoni::CNTL stop] \ |
-rreg rm.cntl -edata 0 |
foreach val [list [regbld rbmoni::CNTL go] 0x0] { |
rlc exec -estatdef $esdval $esdmsk \ |
-wreg rm.cntl $val \ |
-rreg rm.cntl -edata $val |
} |
# |
#------------------------------------------------------------------------- |
rlc log " test 2: read stat" |
rlc exec -estatdef $esdval $esdmsk \ |
-rreg rm.stat rstat |
set bsize [regget rbmoni::STAT(bsize) $rstat] |
set amax [expr {( 512 << $bsize ) - 1}] |
# |
#------------------------------------------------------------------------- |
rlc log " test 3: write/read hilim/lolim" |
foreach {lolim hilim} {0xffff 0x0000 \ |
0x0000 0xfffb} { |
rlc log " test 2: write/read alim" |
foreach val [list [regbld rbmoni::ALIM {hilim 0x00} {lolim 0x00}] \ |
[regbld rbmoni::ALIM {hilim 0xff} {lolim 0xff}] \ |
[regbld rbmoni::ALIM {hilim 0x00} {lolim 0xff}] \ |
[regbld rbmoni::ALIM {hilim 0xff} {lolim 0x00}] |
] { |
rlc exec -estatdef $esdval $esdmsk \ |
-wreg rm.lolim $lolim -wreg rm.hilim $hilim \ |
-rreg rm.lolim -edata $lolim -rreg rm.hilim -edata $hilim |
-wreg rm.alim $val \ |
-rreg rm.alim -edata $val |
} |
# |
#------------------------------------------------------------------------- |
rlc log " test 4: write/read addr" |
rlc log " test 3: write/read addr" |
set amax [regget rbmoni::ADDR(laddr) -1] |
foreach {laddr waddr} [list 0x0000 0 0x0000 3 $amax 0 $amax 3] { |
set addr [regbld rbmoni::ADDR [list laddr $laddr] [list waddr $waddr]] |
rlc exec -estatdef $esdval $esdmsk \ |
75,16 → 67,16
} |
# |
#------------------------------------------------------------------------- |
rlc log " test 5: verify that cntl.go 0->1 clear addr" |
rlc log " test 4: verify that cntl.go 0->1 clear addr" |
rlc exec -estatdef $esdval $esdmsk \ |
-wreg rm.cntl [regbld rbmoni::CNTL stop] \ |
-wreg rm.cntl 0x0 \ |
-rreg rm.cntl -edata 0x0 \ |
-wreg rm.addr [regbld rbmoni::ADDR [list laddr $amax]] \ |
-rreg rm.addr -edata [regbld rbmoni::ADDR [list laddr $amax]] \ |
-wreg rm.cntl [regbld rbmoni::CNTL start] \ |
-rreg rm.cntl -edata [regbld rbmoni::CNTL start] \ |
-wreg rm.cntl [regbld rbmoni::CNTL go] \ |
-rreg rm.cntl -edata [regbld rbmoni::CNTL go] \ |
-rreg rm.addr -edata 0x00 \ |
-wreg rm.cntl [regbld rbmoni::CNTL stop] \ |
-wreg rm.cntl 0x0 \ |
-rreg rm.cntl -edata 0x0 |
# |
#------------------------------------------------------------------------- |
/tools/tcl/tst_rlink/test_all.tcl
1,4 → 1,4
# $Id: test_all.tcl 618 2014-12-21 23:05:48Z mueller $ |
# $Id: test_all.tcl 603 2014-11-09 22:50:26Z mueller $ |
# |
# Copyright 2011-2014 by Walter F.J. Mueller <W.F.J.Mueller@gsi.de> |
# |
33,8 → 33,8
# |
set errcnt 0 |
incr errcnt [rbtest::test_all 0xf 0xfffc] |
incr errcnt [rbmoni::test_regs] |
incr errcnt [rbmoni::test_rbtest] |
##incr errcnt [rbmoni::test_regs] |
##incr errcnt [rbmoni::test_rbtest] |
|
puts "tst_rlink::test_all errcnt = $errcnt --> [rutil::errcnt2txt $errcnt]" |
|
/tools/tcl/tst_rlink/perf.tcl
1,4 → 1,4
# $Id: perf.tcl 622 2014-12-28 20:45:26Z mueller $ |
# $Id: perf.tcl 606 2014-11-24 07:08:51Z mueller $ |
# |
# Copyright 2011-2014 by Walter F.J. Mueller <W.F.J.Mueller@gsi.de> |
# |
36,7 → 36,7
-wreg timer.1 0 |
rlc exec -attn |
|
set tbeg [clock milliseconds] |
set tbeg [clock clicks -milliseconds] |
rlc exec -wreg timer.0 $dly |
for {set i 1} {1} {incr i} { |
rlc wtlam 1. |
43,7 → 43,7
rlc exec \ |
-attn \ |
-wreg timer.0 $dly |
set trun [expr {[clock milliseconds] - $tbeg}] |
set trun [expr {[clock clicks -milliseconds] - $tbeg}] |
if {$trun > $tmax} { break } |
} |
set ms [expr {double($trun) / double($i)}] |
/tools/tcl/rw11/defs.tcl
1,4 → 1,4
# $Id: defs.tcl 621 2014-12-26 21:20:05Z mueller $ |
# $Id: defs.tcl 553 2014-03-17 06:40:08Z mueller $ |
# |
# Copyright 2014- by Walter F.J. Mueller <W.F.J.Mueller@gsi.de> |
# |
27,6 → 27,7
# |
regdsc CP_CNTL {func 3 0} |
regdsc CP_STAT {rust 7 4} {halt 3} {go 2} {merr 1} {err 0} |
regdsc CP_IBRB {base 12 7} {bw 1 2} |
regdsc CP_AH {ubm 7} {p22 6} {addr 5 6} |
# |
# setup w11a register descriptions ----------------------------------------- |
/tools/tcl/rw11/cpucons.tcl
1,6 → 1,6
# $Id: cpucons.tcl 626 2015-01-03 14:41:37Z mueller $ |
# $Id: cpucons.tcl 512 2013-04-28 07:44:02Z mueller $ |
# |
# Copyright 2013-2015 by Walter F.J. Mueller <W.F.J.Mueller@gsi.de> |
# Copyright 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 |
# the terms of the GNU General Public License as published by the Free |
13,7 → 13,6
# |
# Revision History: |
# Date Rev Version Comment |
# 2015-01-02 626 1.0.1 BUGFIX: proc "<": use \r to signal <ENTER> |
# 2013-04-26 510 1.0 Initial version |
# |
|
71,7 → 70,7
# |
proc "<" {args} { |
set str [join $args " "] |
append str "\r" |
append str "\n" |
cpu0tta0 type $str |
return "" |
} |
/tools/tcl/rutil/util.tcl
1,4 → 1,4
# $Id: util.tcl 619 2014-12-23 13:17:41Z mueller $ |
# $Id: util.tcl 569 2014-07-13 14:36:32Z mueller $ |
# |
# Copyright 2011-2014 by Walter F.J. Mueller <W.F.J.Mueller@gsi.de> |
# |
13,7 → 13,6
# |
# Revision History: |
# Date Rev Version Comment |
# 2014-12-23 619 1.0.3 regget: add check for unknown field descriptor |
# 2014-07-12 569 1.0.2 add sxt16 and sxt32 |
# 2013-05-09 517 1.0.1 add optlist2arr |
# 2011-03-27 374 1.0 Initial version |
170,9 → 169,6
# |
proc regget {name val} { |
upvar $name fdsc |
if {! [info exists fdsc] } { |
error "register field descriptor \"$name\" unknown" |
} |
set fbeg [lindex $fdsc 0] |
set flen [lindex $fdsc 1] |
set mskb [lindex $fdsc 2] |
/tools/tcl/rbemon/util.tcl
1,4 → 1,4
# $Id: util.tcl 620 2014-12-25 10:48:35Z mueller $ |
# $Id: util.tcl 516 2013-05-05 21:24:52Z mueller $ |
# |
# Copyright 2011-2013 by Walter F.J. Mueller <W.F.J.Mueller@gsi.de> |
# |
32,7 → 32,7
# |
# setup: amap definitions for rbd_eyemon |
# |
proc setup {{base 0xffd0}} { |
proc setup {base} { |
rlc amap -insert em.cntl [expr {$base + 0x00}] |
rlc amap -insert em.rdiv [expr {$base + 0x01}] |
rlc amap -insert em.addr [expr {$base + 0x02}] |
/tools/tcl/rbs3hio/util.tcl
1,4 → 1,4
# $Id: util.tcl 620 2014-12-25 10:48:35Z mueller $ |
# $Id: util.tcl 516 2013-05-05 21:24:52Z mueller $ |
# |
# Copyright 2011-2013 by Walter F.J. Mueller <W.F.J.Mueller@gsi.de> |
# |
34,7 → 34,7
# |
# setup: amap definitions for s3_humanio_rbus |
# |
proc setup {{base 0xfef0}} { |
proc setup {base} { |
rlc amap -insert hi.cntl [expr {$base + 0x00}] |
rlc amap -insert hi.swi [expr {$base + 0x01}] |
rlc amap -insert hi.led [expr {$base + 0x02}] |
/tools/src/librw11/Rw11CntlRK11.ipp
File deleted
/tools/src/librw11/Rw11RdmaDisk.cpp
File deleted
/tools/src/librw11/Rw11RdmaDisk.hpp
File deleted
/tools/src/librw11/Rw11RdmaDisk.ipp
File deleted
/tools/src/librw11/Rw11Rdma.cpp
File deleted
/tools/src/librw11/Rw11Rdma.hpp
File deleted
/tools/src/librw11/Rw11Rdma.ipp
File deleted
/tools/src/librw11/Rw11Cpu.cpp
1,4 → 1,4
// $Id: Rw11Cpu.cpp 626 2015-01-03 14:41:37Z mueller $ |
// $Id: Rw11Cpu.cpp 602 2014-11-08 21:42:47Z mueller $ |
// |
// Copyright 2013-2014 by Walter F.J. Mueller <W.F.J.Mueller@gsi.de> |
// |
13,8 → 13,6
// |
// Revision History: |
// Date Rev Version Comment |
// 2015-01-01 626 1.1 Adopt for rlink v4 and 4k ibus window |
// 2014-12-21 617 1.0.3 use kStat_M_RbTout for rbus timeout |
// 2014-08-02 576 1.0.2 adopt rename of LastExpect->SetLastExpect |
// 2013-04-14 506 1.0.1 add AddLalh(),AddRMem(),AddWMem() |
// 2013-04-12 504 1.0 Initial version |
23,7 → 21,7
|
/*! |
\file |
\version $Id: Rw11Cpu.cpp 626 2015-01-03 14:41:37Z mueller $ |
\version $Id: Rw11Cpu.cpp 602 2014-11-08 21:42:47Z mueller $ |
\brief Implemenation of Rw11Cpu. |
*/ |
#include <stdlib.h> |
68,7 → 66,8
const uint16_t Rw11Cpu::kCp_addr_memi; |
const uint16_t Rw11Cpu::kCp_addr_r0; |
const uint16_t Rw11Cpu::kCp_addr_pc; |
const uint16_t Rw11Cpu::kCp_addr_membe; |
const uint16_t Rw11Cpu::kCp_addr_ibrb; |
const uint16_t Rw11Cpu::kCp_addr_ibr; |
|
const uint16_t Rw11Cpu::kCp_func_noop; |
const uint16_t Rw11Cpu::kCp_func_start; |
101,10 → 100,6
const uint16_t Rw11Cpu::kCp_ah_m_22bit; |
const uint16_t Rw11Cpu::kCp_ah_m_ubmap; |
|
const uint16_t Rw11Cpu::kCp_membe_m_stick; |
const uint16_t Rw11Cpu::kCp_membe_m_be; |
|
|
//------------------------------------------+----------------------------------- |
//! Constructor |
|
113,13 → 108,11
fType(type), |
fIndex(0), |
fBase(0), |
fIBase(0x4000), |
fCpuGo(0), |
fCpuStat(0), |
fCpuGoMutex(), |
fCpuGoCond(), |
fCntlMap(), |
fIAddrMap(), |
fStats() |
{} |
|
135,8 → 128,7
void Rw11Cpu::Setup(Rw11* pw11) |
{ |
fpW11 = pw11; |
// add control port address rbus mappings |
// name base: 'cn.', where n is cpu index |
// command base: 'cn.', where n is cpu index |
string cbase = "c"; |
cbase += '0'+Index(); |
cbase += '.'; |
156,52 → 148,14
Connect().AddrMapInsert(cbase+"r5" , Base()+kCp_addr_r0+5); |
Connect().AddrMapInsert(cbase+"sp" , Base()+kCp_addr_r0+6); |
Connect().AddrMapInsert(cbase+"pc" , Base()+kCp_addr_r0+7); |
Connect().AddrMapInsert(cbase+"membe",Base()+kCp_addr_membe); |
|
// add cpu register address ibus and rbus mappings |
AllAddrMapInsert("psw" , 0177776); |
AllAddrMapInsert("stklim" , 0177774); |
AllAddrMapInsert("pirq" , 0177772); |
AllAddrMapInsert("mbrk" , 0177770); |
AllAddrMapInsert("cpuerr" , 0177766); |
AllAddrMapInsert("sysid" , 0177764); |
AllAddrMapInsert("hisize" , 0177762); |
AllAddrMapInsert("losize" , 0177760); |
|
AllAddrMapInsert("hm" , 0177752); |
AllAddrMapInsert("maint" , 0177750); |
AllAddrMapInsert("cntrl" , 0177746); |
AllAddrMapInsert("syserr" , 0177744); |
AllAddrMapInsert("hiaddr" , 0177742); |
AllAddrMapInsert("loaddr" , 0177740); |
|
AllAddrMapInsert("ssr2" , 0177576); |
AllAddrMapInsert("ssr1" , 0177574); |
AllAddrMapInsert("ssr0" , 0177572); |
|
AllAddrMapInsert("sdreg" , 0177570); |
|
AllAddrMapInsert("ssr3" , 0172516); |
|
// add mmu segment register files |
string sdr = "sdr"; |
string sar = "sar"; |
for (char i=0; i<8; i++) { |
char ichar = '0'+i; |
AllAddrMapInsert(sdr+"ki."+ichar, 0172300+2*i); |
AllAddrMapInsert(sdr+"kd."+ichar, 0172320+2*i); |
AllAddrMapInsert(sar+"ki."+ichar, 0172340+2*i); |
AllAddrMapInsert(sar+"kd."+ichar, 0172360+2*i); |
AllAddrMapInsert(sdr+"si."+ichar, 0172200+2*i); |
AllAddrMapInsert(sdr+"sd."+ichar, 0172220+2*i); |
AllAddrMapInsert(sar+"si."+ichar, 0172240+2*i); |
AllAddrMapInsert(sar+"sd."+ichar, 0172260+2*i); |
AllAddrMapInsert(sdr+"ui."+ichar, 0177600+2*i); |
AllAddrMapInsert(sdr+"ud."+ichar, 0177620+2*i); |
AllAddrMapInsert(sar+"ui."+ichar, 0177640+2*i); |
AllAddrMapInsert(sar+"ud."+ichar, 0177660+2*i); |
Connect().AddrMapInsert(cbase+"ibrb", Base()+kCp_addr_ibrb); |
// create names for ib window, line c0.ib00, c0.ib02,.., c0.ib76 |
for (int i=0; i<32; i++) { |
string rname = cbase + "ib"; |
rname += '0' + ((i>>2)&07); |
rname += '0' + ((i<<1)&07); |
Connect().AddrMapInsert(rname , Base()+kCp_addr_ibr+i); |
} |
|
return; |
} |
|
270,6 → 224,7
return; |
} |
|
|
//------------------------------------------+----------------------------------- |
//! FIXME_docs |
|
287,11 → 242,9
//------------------------------------------+----------------------------------- |
//! FIXME_docs |
|
int Rw11Cpu::AddMembe(RlinkCommandList& clist, uint16_t be, bool stick) |
int Rw11Cpu::AddIbrb(RlinkCommandList& clist, uint16_t ibaddr) |
{ |
uint16_t data = be & kCp_membe_m_be; |
if (stick) data |= kCp_membe_m_stick; |
return clist.AddWreg(fBase+kCp_addr_membe, data); |
return clist.AddWreg(fBase+kCp_addr_ibrb, ibaddr & ~(077)); |
} |
|
//------------------------------------------+----------------------------------- |
299,10 → 252,8
|
int Rw11Cpu::AddRibr(RlinkCommandList& clist, uint16_t ibaddr) |
{ |
if ((ibaddr & 0160001) != 0160000) |
throw Rexception("Rw11Cpu::AddRibr", "ibaddr out of IO page or odd"); |
|
return clist.AddRreg(IbusRemoteAddr(ibaddr)); |
uint16_t ibroff = (ibaddr & 077)/2; |
return clist.AddRreg(fBase+kCp_addr_ibr + ibroff); |
} |
|
//------------------------------------------+----------------------------------- |
310,10 → 261,8
|
int Rw11Cpu::AddWibr(RlinkCommandList& clist, uint16_t ibaddr, uint16_t data) |
{ |
if ((ibaddr & 0160001) != 0160000) |
throw Rexception("Rw11Cpu::AddWibr", "ibaddr out of IO page or odd"); |
|
return clist.AddWreg(IbusRemoteAddr(ibaddr), data); |
uint16_t ibroff = (ibaddr & 077)/2; |
return clist.AddWreg(fBase+kCp_addr_ibr + ibroff, data); |
} |
|
//------------------------------------------+----------------------------------- |
332,17 → 281,12
//------------------------------------------+----------------------------------- |
//! FIXME_docs |
|
int Rw11Cpu::AddRMem(RlinkCommandList& clist, uint32_t addr, uint16_t* buf, |
size_t size, uint16_t mode, bool singleblk) |
int Rw11Cpu::AddRMem(RlinkCommandList& clist, uint32_t addr, |
uint16_t* buf, size_t size, uint16_t mode) |
{ |
size_t blkmax = Connect().BlockSizeMax(); |
if (singleblk && size > blkmax) |
throw Rexception("Rw11Cpu::AddRMem", |
"Bad args: singleblk==true && size > BlockSizeMax()"); |
|
int ind = AddLalh(clist, addr, mode); |
while (size > 0) { |
size_t bsize = (size>blkmax) ? blkmax : size; |
size_t bsize = (size>256) ? 256 : size; |
clist.AddRblk(fBase+kCp_addr_memi, buf, bsize); |
buf += bsize; |
size -= bsize; |
354,17 → 298,11
//! FIXME_docs |
|
int Rw11Cpu::AddWMem(RlinkCommandList& clist, uint32_t addr, |
const uint16_t* buf, size_t size, |
uint16_t mode, bool singleblk) |
const uint16_t* buf, size_t size, uint16_t mode) |
{ |
size_t blkmax = Connect().BlockSizeMax(); |
if (singleblk && size > blkmax) |
throw Rexception("Rw11Cpu::AddWMem", |
"Bad args: singleblk==true && size > BlockSizeMax()"); |
|
int ind = AddLalh(clist, addr, mode); |
while (size > 0) { |
size_t bsize = (size>blkmax) ? blkmax : size; |
size_t bsize = (size>256) ? 256 : size; |
clist.AddWblk(fBase+kCp_addr_memi, buf, bsize); |
buf += bsize; |
size -= bsize; |
378,11 → 316,10
bool Rw11Cpu::MemRead(uint16_t addr, std::vector<uint16_t>& data, |
size_t nword, RerrMsg& emsg) |
{ |
size_t blkmax = Connect().BlockSizePrudent(); |
data.resize(nword); |
size_t ndone = 0; |
while (nword>ndone) { |
size_t nblk = min(blkmax, nword-ndone); |
size_t nblk = min(size_t(256), nword-ndone); |
RlinkCommandList clist; |
clist.AddWreg(fBase+kCp_addr_al, addr+2*ndone); |
clist.AddRblk(fBase+kCp_addr_memi, data.data()+ndone, nblk); |
398,11 → 335,10
bool Rw11Cpu::MemWrite(uint16_t addr, const std::vector<uint16_t>& data, |
RerrMsg& emsg) |
{ |
size_t blkmax = Connect().BlockSizePrudent(); |
size_t nword = data.size(); |
size_t ndone = 0; |
while (nword>ndone) { |
size_t nblk = min(blkmax, nword-ndone); |
size_t nblk = min(size_t(256), nword-ndone); |
RlinkCommandList clist; |
clist.AddWreg(fBase+kCp_addr_al, addr+2*ndone); |
clist.AddWblk(fBase+kCp_addr_memi, data.data()+ndone, nblk); |
431,6 → 367,7
clist.SetLastExpect(new RlinkCommandExpect(0,0xff)); // disable stat check |
} |
if (dsc.fProbeRem) { |
AddIbrb(clist, dsc.fAddr); |
irb = AddRibr(clist, dsc.fAddr); |
clist.SetLastExpect(new RlinkCommandExpect(0,0xff)); // disable stat check |
} |
439,16 → 376,12
// FIXME_code: handle errors |
|
if (dsc.fProbeInt) { |
dsc.fFoundInt = (clist[iib].Status() & |
(RlinkCommand::kStat_M_RbTout | |
RlinkCommand::kStat_M_RbNak | |
RlinkCommand::kStat_M_RbErr)) ==0; |
dsc.fFoundInt = (clist[iib].Status() & (RlinkCommand::kStat_M_RbNak | |
RlinkCommand::kStat_M_RbErr)) ==0; |
} |
if (dsc.fProbeRem) { |
dsc.fFoundRem = (clist[irb].Status() & |
(RlinkCommand::kStat_M_RbTout | |
RlinkCommand::kStat_M_RbNak | |
RlinkCommand::kStat_M_RbErr)) ==0; |
dsc.fFoundRem = (clist[irb].Status() & (RlinkCommand::kStat_M_RbNak | |
RlinkCommand::kStat_M_RbErr)) ==0; |
} |
dsc.fProbeDone = true; |
} |
733,20 → 666,6
//------------------------------------------+----------------------------------- |
//! FIXME_docs |
|
void Rw11Cpu::AllAddrMapInsert(const std::string& name, uint16_t ibaddr) |
{ |
string rbname = "i"; |
rbname += '0'+Index(); |
rbname += '.'; |
rbname += name; |
Connect().AddrMapInsert(rbname, IbusRemoteAddr(ibaddr)); |
IAddrMapInsert(name, ibaddr); |
return; |
} |
|
//------------------------------------------+----------------------------------- |
//! FIXME_docs |
|
void Rw11Cpu::W11AttnHandler() |
{ |
RlinkCommandList clist; |
768,7 → 687,6
os << bl << " fType: " << fType << endl; |
os << bl << " fIndex: " << fIndex << endl; |
os << bl << " fBase: " << RosPrintf(fBase,"$x0",4) << endl; |
os << bl << " fIBase: " << RosPrintf(fIBase,"$x0",4) << endl; |
os << bl << " fCpuGo: " << fCpuGo << endl; |
os << bl << " fCpuStat: " << RosPrintf(fCpuStat,"$x0",4) << endl; |
os << bl << " fCntlMap: " << endl; |
776,7 → 694,6
os << bl << " " << RosPrintf((it->first).c_str(), "-s",8) |
<< " : " << it->second << endl; |
} |
fIAddrMap.Dump(os, ind+2, "fIAddrMap: "); |
fStats.Dump(os, ind+2, "fStats: "); |
return; |
} |
/tools/src/librw11/Rw11CntlRK11.cpp
1,6 → 1,6
// $Id: Rw11CntlRK11.cpp 628 2015-01-04 16:22:09Z mueller $ |
// $Id: Rw11CntlRK11.cpp 562 2014-06-15 17:23:18Z mueller $ |
// |
// Copyright 2013-2015 by Walter F.J. Mueller <W.F.J.Mueller@gsi.de> |
// Copyright 2013-2014 by Walter F.J. Mueller <W.F.J.Mueller@gsi.de> |
// Other credits: |
// the boot code is from the simh project and Copyright Robert M Supnik |
// |
15,9 → 15,6
// |
// Revision History: |
// Date Rev Version Comment |
// 2015-01-04 628 2.0 use Rw11RdmaDisk |
// 2014-12-30 625 1.2 adopt to Rlink V4 attn logic |
// 2014-12-25 621 1.1 adopt to 4k word ibus window |
// 2014-06-14 562 1.0.1 Add stats |
// 2013-04-20 508 1.0 Initial version |
// 2013-02-10 485 0.1 First draft |
25,7 → 22,7
|
/*! |
\file |
\version $Id: Rw11CntlRK11.cpp 628 2015-01-04 16:22:09Z mueller $ |
\version $Id: Rw11CntlRK11.cpp 562 2014-06-15 17:23:18Z mueller $ |
\brief Implemenation of Rw11CntlRK11. |
*/ |
|
140,18 → 137,15
fPC_rkda(0), |
fPC_rkmr(0), |
fPC_rkcs(0), |
fRd_busy(false), |
fRd_rkcs(0), |
fRd_rkda(0), |
fRd_addr(0), |
fRd_lba(0), |
fRd_nwrd(0), |
fRd_fu(0), |
fRd_ovr(false), |
fRdma(this, |
boost::bind(&Rw11CntlRK11::RdmaPreExecCB, this, _1, _2, _3), |
boost::bind(&Rw11CntlRK11::RdmaPostExecCB, this, _1, _2, _3, _4)) |
fRd_ovr(false) |
{ |
// must be here because Units have a back-ptr (not available at Rw11CntlBase) |
// must here because Unit have a back-pointer (not available at Rw11CntlBase) |
for (size_t i=0; i<NUnit(); i++) { |
fspUnit[i].reset(new Rw11UnitRK11(this, i)); |
} |
164,6 → 158,10
fStats.Define(kStatNFuncRchk , "NFuncRchk" , "func RCHK"); |
fStats.Define(kStatNFuncDreset , "NFuncDreset" , "func DRESET"); |
fStats.Define(kStatNFuncWlock , "NFuncWlock " , "func WLOCK"); |
fStats.Define(kStatNRdmaWrite , "NRdmaWrite" , "rdma WRITE"); |
fStats.Define(kStatNRdmaRead , "NRdmaRead" , "rdma READ"); |
fStats.Define(kStatNRdmaWchk , "NRdmaWchk" , "rdma WCHK"); |
fStats.Define(kStatNRdmaRchk , "NRdmaRchk" , "rdma RCHK"); |
} |
|
//------------------------------------------+----------------------------------- |
190,19 → 188,9
throw Rexception("Rw11CntlRK11::Start", |
"Bad state: started, no lam, not enable, not found"); |
|
// add device register address ibus and rbus mappings |
// done here because now Cntl bound to Cpu and Cntl probed |
Cpu().AllAddrMapInsert(Name()+".ds", Base() + kRKDS); |
Cpu().AllAddrMapInsert(Name()+".er", Base() + kRKER); |
Cpu().AllAddrMapInsert(Name()+".cs", Base() + kRKCS); |
Cpu().AllAddrMapInsert(Name()+".wc", Base() + kRKWC); |
Cpu().AllAddrMapInsert(Name()+".ba", Base() + kRKBA); |
Cpu().AllAddrMapInsert(Name()+".da", Base() + kRKDA); |
Cpu().AllAddrMapInsert(Name()+".mr", Base() + kRKMR); |
|
// setup primary info clist |
fPrimClist.Clear(); |
fPrimClist.AddAttn(); |
Cpu().AddIbrb(fPrimClist, fBase); |
fPC_rkwc = Cpu().AddRibr(fPrimClist, fBase+kRKWC); |
fPC_rkba = Cpu().AddRibr(fPrimClist, fBase+kRKBA); |
fPC_rkda = Cpu().AddRibr(fPrimClist, fBase+kRKDA); |
236,6 → 224,7
rkds |= kRKDS_M_WPS; |
} |
unit.SetRkds(rkds); |
cpu.AddIbrb(clist, fBase); |
cpu.AddWibr(clist, fBase+kRKDS, rkds); |
Server().Exec(clist); |
|
294,14 → 283,14
os << bl << " fPC_rkda: " << fPC_rkda << endl; |
os << bl << " fPC_rkmr: " << fPC_rkmr << endl; |
os << bl << " fPC_rkcs: " << fPC_rkcs << endl; |
os << bl << " fRd_busy: " << fRd_busy << endl; |
os << bl << " fRd_rkcs: " << fRd_rkcs << endl; |
os << bl << " fRd_rkda: " << fRd_rkda << endl; |
os << bl << " fRd_addr: " << fRd_addr << endl; |
os << bl << " fRd_lba: " << fRd_lba << endl; |
os << bl << " fRd_nwrd: " << fRd_nwrd << endl; |
os << bl << " fRd_fu: " << fRd_fu << endl; |
os << bl << " fRd_ovr: " << fRd_ovr << endl; |
fRdma.Dump(os, ind+2, "fRdma: "); |
|
Rw11CntlBase<Rw11UnitRK11,8>::Dump(os, ind, " ^"); |
return; |
} |
309,16 → 298,18
//------------------------------------------+----------------------------------- |
//! FIXME_docs |
|
int Rw11CntlRK11::AttnHandler(RlinkServer::AttnArgs& args) |
int Rw11CntlRK11::AttnHandler(const RlinkServer::AttnArgs& args) |
{ |
fStats.Inc(kStatNAttnHdl); |
Server().GetAttnInfo(args, fPrimClist); |
RlinkCommandList* pclist; |
size_t off; |
|
GetPrimInfo(args, pclist, off); |
|
uint16_t rkwc = fPrimClist[fPC_rkwc].Data(); |
uint16_t rkba = fPrimClist[fPC_rkba].Data(); |
uint16_t rkda = fPrimClist[fPC_rkda].Data(); |
//uint16_t rkmr = fPrimClist[fPC_rkmr].Data(); |
uint16_t rkcs = fPrimClist[fPC_rkcs].Data(); |
uint16_t rkwc = (*pclist)[off+fPC_rkwc].Data(); |
uint16_t rkba = (*pclist)[off+fPC_rkba].Data(); |
uint16_t rkda = (*pclist)[off+fPC_rkda].Data(); |
//uint16_t rkmr = (*pclist)[off+fPC_rkmr].Data(); |
uint16_t rkcs = (*pclist)[off+fPC_rkcs].Data(); |
|
uint16_t se = rkda & kRKDA_B_SC; |
uint16_t hd = (rkda>>kRKDA_V_SUR) & kRKDA_B_SUR; |
356,12 → 347,10
|
if (fTraceLevel>0) { |
RlogMsg lmsg(LogFile()); |
static const char* fumnemo[8] = {"cr","w ","r ","wc","sk","rc","dr","wl"}; |
|
lmsg << "-I RK11 cs=" << RosPrintBvi(rkcs,8) |
<< " da=" << RosPrintBvi(rkda,8) |
<< " ad=" << RosPrintBvi(addr,8,18) |
<< " fu=" << fumnemo[fu&0x7] |
<< " fu=" << fu |
<< " dchs=" << dr |
<< "," << RosPrintf(cy,"d",3) |
<< "," << hd |
397,20 → 386,13
// if found, truncate request length |
bool ovr = lba + nblk > unit.NBlock(); |
if (ovr) nwrd = (unit.NBlock()-lba) * (unit.BlockSize()/2); |
bool queue = false; |
|
// remember request parameters for call back |
fRd_rkcs = rkcs; |
fRd_rkda = rkda; |
fRd_addr = addr; |
fRd_lba = lba; |
fRd_nwrd = nwrd; |
fRd_ovr = ovr; |
fRd_fu = fu; |
|
// now handle the functions |
if (fu == kRKCS_CRESET) { // Control reset ----------------- |
fStats.Inc(kStatNFuncCreset); |
cpu.AddWibr(clist, fBase+kRKMR, kRKMR_M_CRESET); |
fRd_busy = false; |
|
} else if (fu == kRKCS_WRITE) { // Write ------------------------- |
// Note: WRITE+FMT is just WRITE |
418,40 → 400,22
if (se >= unit.NSector()) rker |= kRKER_M_NXS; |
if (cy >= unit.NCylinder()) rker |= kRKER_M_NXC; |
if (unit.WProt()) rker |= kRKER_M_WLO; |
if (rkcs & kRKCS_M_IBA) rker |= kRKER_M_DRE; // IBA not supported |
if (rker) { |
AddErrorExit(clist, rker); |
} else { |
fRdma.QueueDiskWrite(addr, nwrd, |
Rw11Cpu::kCp_ah_m_22bit|Rw11Cpu::kCp_ah_m_ubmap, |
lba, &unit); |
} |
if (rkcs & kRKCS_M_IBA) rker |= kRKER_M_DRE; // not yet supported FIXME |
queue = true; |
|
} else if (fu == kRKCS_READ) { // Read -------------------------- |
fStats.Inc(kStatNFuncRead); |
if (se >= unit.NSector()) rker |= kRKER_M_NXS; |
if (cy >= unit.NCylinder()) rker |= kRKER_M_NXC; |
if (rkcs & kRKCS_M_IBA) rker |= kRKER_M_DRE; // IBA not supported |
if (rker) { |
AddErrorExit(clist, rker); |
} else { |
fRdma.QueueDiskRead(addr, nwrd, |
Rw11Cpu::kCp_ah_m_22bit|Rw11Cpu::kCp_ah_m_ubmap, |
lba, &unit); |
} |
|
if (rkcs & kRKCS_M_IBA) rker |= kRKER_M_DRE; // not yet supported FIXME |
queue = true; |
|
} else if (fu == kRKCS_WCHK) { // Write Check ------------------- |
fStats.Inc(kStatNFuncWchk); |
if (se >= unit.NSector()) rker |= kRKER_M_NXS; |
if (cy >= unit.NCylinder()) rker |= kRKER_M_NXC; |
if (rkcs & kRKCS_M_IBA) rker |= kRKER_M_DRE; // IBA not supported |
if (rker) { |
AddErrorExit(clist, rker); |
} else { |
fRdma.QueueDiskWriteCheck(addr, nwrd, |
Rw11Cpu::kCp_ah_m_22bit|Rw11Cpu::kCp_ah_m_ubmap, |
lba, &unit); |
} |
if (rkcs & kRKCS_M_IBA) rker |= kRKER_M_DRE; // not yet supported FIXME |
queue = true; |
|
} else if (fu == kRKCS_SEEK) { // Seek -------------------------- |
fStats.Inc(kStatNFuncSeek); |
475,13 → 439,9
fStats.Inc(kStatNFuncRchk); |
if (se >= unit.NSector()) rker |= kRKER_M_NXS; |
if (cy >= unit.NCylinder()) rker |= kRKER_M_NXC; |
if (rkcs & kRKCS_M_IBA) rker |= kRKER_M_DRE; // IBA not supported |
if (rker) { |
AddErrorExit(clist, rker); |
} else { |
AddNormalExit(clist, nwrd, 0); // no action, virt disks don't err |
} |
|
if (rkcs & kRKCS_M_IBA) rker |= kRKER_M_DRE; // not yet supported FIXME |
queue = true; |
|
} else if (fu == kRKCS_DRESET) { // Drive Reset ------------------- |
fStats.Inc(kStatNFuncDreset); |
cpu.AddWibr(clist, fBase+kRKMR, kRKMR_M_FDONE); |
496,9 → 456,26
cpu.AddWibr(clist, fBase+kRKMR, kRKMR_M_FDONE); |
} |
|
if (clist.Size()) { // if handled directly |
Server().Exec(clist); // doit |
if (queue) { // to be handled in RdmaHandlder |
if (rker) { // abort on case of errors |
cpu.AddWibr(clist, fBase+kRKER, rker); |
cpu.AddWibr(clist, fBase+kRKMR, kRKMR_M_FDONE); |
LogRker(rker); |
} else { // or queue action |
fRd_busy = true; |
fRd_rkcs = rkcs; |
fRd_rkda = rkda; |
fRd_addr = addr; |
fRd_lba = lba; |
fRd_nwrd = nwrd; |
fRd_ovr = ovr; |
Server().QueueAction(boost::bind(&Rw11CntlRK11::RdmaHandler, this)); |
} |
|
} else { // handled here |
Server().Exec(clist); |
} |
|
return 0; |
} |
|
505,122 → 482,168
//------------------------------------------+----------------------------------- |
//! FIXME_docs |
|
void Rw11CntlRK11::RdmaPreExecCB(int stat, size_t nword, |
RlinkCommandList& clist) |
int Rw11CntlRK11::RdmaHandler() |
{ |
// if last chunk and not doing WCHK add a labo and normal exit csr update |
if (stat == Rw11Rdma::kStatusBusyLast && fRd_fu != kRKCS_WCHK) { |
clist.AddLabo(); |
AddNormalExit(clist, nword, 0); |
} |
return; |
} |
uint16_t rker = 0; |
uint16_t fu = (fRd_rkcs>>kRKCS_V_FUNC) & kRKCS_B_FUNC; |
uint16_t dr = (fRd_rkda>>kRKDA_V_DRSEL) & kRKDA_B_DRSEL; |
Rw11UnitRK11& unit = *fspUnit[dr]; |
Rw11Cpu& cpu = Cpu(); |
|
//------------------------------------------+----------------------------------- |
//! FIXME_docs |
uint8_t buf[512]; |
|
void Rw11CntlRK11::RdmaPostExecCB(int stat, size_t ndone, |
RlinkCommandList& clist, size_t ncmd) |
{ |
if (stat == Rw11Rdma::kStatusBusy) return; |
if (fu == kRKCS_WRITE) { // Write ------------------------- |
// Note: WRITE+FMT is like WRITE |
fStats.Inc(kStatNRdmaWrite); |
RlinkCommandList clist; |
size_t bsize = (fRd_nwrd>256) ? 256 : fRd_nwrd; |
cpu.AddRMem(clist, fRd_addr, (uint16_t*) buf, bsize, |
Rw11Cpu::kCp_ah_m_22bit|Rw11Cpu::kCp_ah_m_ubmap); |
Server().Exec(clist); |
// FIXME_code: handle rdma I/O error |
RerrMsg emsg; |
bool rc = unit.VirtWrite(fRd_lba, 1, buf, emsg); |
if (!rc) { |
RlogMsg lmsg(LogFile()); |
lmsg << emsg; |
rker |= kRKER_M_CSE; // forward disk I/O error |
} |
if (rker == 0) { |
fRd_nwrd -= bsize; |
fRd_addr += 2*bsize; |
fRd_lba += 1; |
} |
if (rker==0 && fRd_nwrd>0) // not error and not yet done |
return 1; // requeue |
|
} else if (fu == kRKCS_READ) { |
fStats.Inc(kStatNRdmaRead); |
if ((fRd_rkcs&kRKCS_M_FMT) == 0) { // Read -------------------------- |
RerrMsg emsg; |
bool rc = unit.VirtRead(fRd_lba, 1, buf, emsg); |
if (!rc) { |
RlogMsg lmsg(LogFile()); |
lmsg << emsg; |
rker |= kRKER_M_CSE; // forward disk I/O error |
} |
|
uint16_t rker = 0; |
|
// handle write check |
if (fRd_fu == kRKCS_WCHK) { |
size_t nwcok = fRdma.WriteCheck(ndone); |
if (nwcok != ndone) { // if mismatch found |
rker |= kRKER_M_WCE; // set error flag |
if (fRd_rkcs & kRKCS_M_SSE) { // if 'stop-on-soft' requested |
ndone = nwcok; // truncate word count |
if (rker == 0) { |
RlinkCommandList clist; |
size_t bsize = (fRd_nwrd>256) ? 256 : fRd_nwrd; |
cpu.AddWMem(clist, fRd_addr, (uint16_t*) buf, bsize, |
Rw11Cpu::kCp_ah_m_22bit|Rw11Cpu::kCp_ah_m_ubmap); |
Server().Exec(clist); |
// FIXME_code: handle rdma I/O error |
fRd_nwrd -= bsize; |
fRd_addr += 2*bsize; |
fRd_lba += 1; |
} |
if (rker==0 && fRd_nwrd>0) // not error and not yet done |
return 1; // requeue |
|
} else { // Read Format ------------------- |
uint16_t cy = fRd_lba / (unit.NHead()*unit.NSector()); |
uint16_t da = cy<<kRKDA_V_CYL; |
RlinkCommandList clist; |
cpu.AddWMem(clist, fRd_addr, &da, 1, |
Rw11Cpu::kCp_ah_m_22bit|Rw11Cpu::kCp_ah_m_ubmap); |
Server().Exec(clist); |
// FIXME_code: handle rdma I/O error |
fRd_nwrd -= 1; |
fRd_addr += 2; |
fRd_lba += 1; |
if (rker==0 && fRd_nwrd>0) // not error and not yet done |
return 1; // requeue |
} |
} |
|
// handle Rdma aborts |
if (stat == Rw11Rdma::kStatusFailRdma) rker |= kRKER_M_NXM; |
|
} else if (fu == kRKCS_WCHK) { // Write Check ------------------- |
fStats.Inc(kStatNRdmaWchk); |
uint16_t bufmem[256]; |
RlinkCommandList clist; |
size_t bsize = (fRd_nwrd>256) ? 256 : fRd_nwrd; |
cpu.AddRMem(clist, fRd_addr, bufmem, bsize, |
Rw11Cpu::kCp_ah_m_22bit|Rw11Cpu::kCp_ah_m_ubmap); |
Server().Exec(clist); |
// FIXME_code: handle rdma I/O error |
RerrMsg emsg; |
bool rc = unit.VirtRead(fRd_lba, 1, buf, emsg); |
if (!rc) { |
RlogMsg lmsg(LogFile()); |
lmsg << emsg; |
rker |= kRKER_M_CSE; // forward disk I/O error |
} |
if (rker == 0) { |
uint16_t* pmem = bufmem; |
uint16_t* pdsk = (uint16_t*) &buf; |
for (size_t i=0; i<bsize; i++) { |
if (*pmem++ != *pdsk++) rker |= kRKER_M_WCE; |
} |
fRd_nwrd -= bsize; |
fRd_addr += 2*bsize; |
fRd_lba += 1; |
} |
// determine abort criterion |
bool stop = (rker & ~kRKER_M_WCE) != 0 || |
((rker & kRKER_M_WCE) && (fRd_rkcs & kRKCS_M_SSE)); |
if (!stop && fRd_nwrd>0) // not error and not yet done |
return 1; // requeue |
|
// check for fused csr updates |
if (clist.Size() > ncmd) { |
uint8_t ccode = clist[ncmd].Command(); |
uint16_t cdata = clist[ncmd].Data(); |
if (ccode != RlinkCommand::kCmdLabo || (rker != 0 && cdata == 0)) |
throw Rexception("Rw11CntlRK11::RdmaPostExecCB", |
"Bad state: Labo not found or missed abort"); |
if (cdata == 0) return; |
} else if (fu == kRKCS_RCHK) { // Read Check -------------------- |
// Note: no DMA transfer done; done here to keep logic similar to read |
fStats.Inc(kStatNRdmaRchk); |
size_t bsize = (fRd_nwrd>256) ? 256 : fRd_nwrd; |
fRd_nwrd -= bsize; |
fRd_addr += 2*bsize; |
fRd_lba += 1; |
if (rker==0 && fRd_nwrd>0) // not error and not yet done |
return 1; // requeue |
|
} else { |
throw Rexception("Rw11CntlRK11::RdmaHandler", |
"Bad state: bad function code"); |
} |
|
// finally to RK11 register update |
RlinkCommandList clist1; |
AddNormalExit(clist1, ndone, rker); |
Server().Exec(clist1); |
// common handling for dma transfer completion |
if (fRd_ovr) rker |= kRKER_M_OVR; |
|
return; |
} |
|
//------------------------------------------+----------------------------------- |
//! FIXME_docs |
|
void Rw11CntlRK11::LogRker(uint16_t rker) |
{ |
RlogMsg lmsg(LogFile()); |
lmsg << "-E RK11 er=" << RosPrintBvi(rker,8) << " ERROR ABORT"; |
} |
|
//------------------------------------------+----------------------------------- |
//! FIXME_docs |
|
void Rw11CntlRK11::AddErrorExit(RlinkCommandList& clist, uint16_t rker) |
{ |
Rw11Cpu& cpu = Cpu(); |
cpu.AddWibr(clist, fBase+kRKER, rker); |
cpu.AddWibr(clist, fBase+kRKMR, kRKMR_M_FDONE); |
LogRker(rker); |
return; |
} |
|
//------------------------------------------+----------------------------------- |
//! FIXME_docs |
|
void Rw11CntlRK11::AddNormalExit(RlinkCommandList& clist, size_t ndone, |
uint16_t rker) |
{ |
Rw11Cpu& cpu = Cpu(); |
uint16_t dr = (fRd_rkda>>kRKDA_V_DRSEL) & kRKDA_B_DRSEL; |
Rw11UnitRK11& unit = *fspUnit[dr]; |
size_t bszwrd = unit.BlockSize()/2; // block size in words |
|
size_t nblk = (ndone+bszwrd-1)/bszwrd; |
|
uint32_t addr = fRd_addr + 2*ndone; |
size_t lba = fRd_lba + nblk; |
uint32_t nrest = fRd_nwrd - ndone; |
|
uint16_t ba = addr & 0177776; // get lower 16 bits |
uint16_t mex = (addr>>16) & 03; // get upper 2 bits |
RlinkCommandList clist; |
|
uint16_t ba = fRd_addr & 0177776; // get lower 16 bits |
uint16_t mex = (fRd_addr>>16) & 03; // get upper 2 bits |
uint16_t cs = (fRd_rkcs & ~kRKCS_M_MEX) | (mex << kRKCS_V_MEX); |
uint16_t se; |
uint16_t hd; |
uint16_t cy; |
unit.Lba2Chs(lba, cy,hd,se); |
unit.Lba2Chs(fRd_lba, cy,hd,se); |
uint16_t da = (fRd_rkda & kRKDA_M_DRSEL) | (cy<<kRKDA_V_CYL) | |
(hd<<kRKDA_V_SUR) | se; |
|
if (fRd_ovr) rker |= kRKER_M_OVR; |
|
cpu.AddIbrb(clist, fBase); |
if (rker) { |
cpu.AddWibr(clist, fBase+kRKER, rker); |
LogRker(rker); |
} |
cpu.AddWibr(clist, fBase+kRKWC, uint16_t((-nrest)&0177777)); |
cpu.AddWibr(clist, fBase+kRKWC, uint16_t((-fRd_nwrd)&0177777)); |
cpu.AddWibr(clist, fBase+kRKBA, ba); |
cpu.AddWibr(clist, fBase+kRKDA, da); |
if (cs != fRd_rkcs) |
cpu.AddWibr(clist, fBase+kRKCS, cs); |
cpu.AddWibr(clist, fBase+kRKMR, kRKMR_M_FDONE); |
|
Server().Exec(clist); |
|
return; |
fRd_busy = false; |
|
return 0; |
} |
|
//------------------------------------------+----------------------------------- |
//! FIXME_docs |
|
void Rw11CntlRK11::LogRker(uint16_t rker) |
{ |
RlogMsg lmsg(LogFile()); |
lmsg << "-E RK11 er=" << RosPrintBvi(rker,8) << " ERROR ABORT"; |
} |
|
} // end namespace Retro |
/tools/src/librw11/Makefile
1,4 → 1,4
# $Id: Makefile 626 2015-01-03 14:41:37Z mueller $ |
# $Id: Makefile 561 2014-06-09 17:22:50Z mueller $ |
# |
# Revision History: |
# Date Rev Version Comment |
35,7 → 35,6
OBJ_all += Rw11VirtTerm.o Rw11VirtTermPty.o Rw11VirtTermTcp.o |
OBJ_all += Rw11VirtDisk.o Rw11VirtDiskFile.o |
OBJ_all += Rw11VirtStream.o |
OBJ_all += Rw11Rdma.o Rw11RdmaDisk.o |
# |
DEP_all = $(OBJ_all:.o=.dep) |
# |
/tools/src/librw11/Rw11CntlRK11.hpp
1,6 → 1,6
// $Id: Rw11CntlRK11.hpp 627 2015-01-04 11:36:37Z mueller $ |
// $Id: Rw11CntlRK11.hpp 562 2014-06-15 17:23:18Z mueller $ |
// |
// Copyright 2013-2015 by Walter F.J. Mueller <W.F.J.Mueller@gsi.de> |
// Copyright 2013-2014 by Walter F.J. Mueller <W.F.J.Mueller@gsi.de> |
// |
// 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 |
13,8 → 13,6
// |
// Revision History: |
// Date Rev Version Comment |
// 2015-01-03 627 2.0 use Rw11RdmaDisk |
// 2014-12-29 623 1.1 adopt to Rlink V4 attn logic |
// 2014-06-14 562 1.0.1 Add stats definitions |
// 2013-04-20 508 1.0 Initial version |
// 2013-02-10 485 0.1 First draft |
23,7 → 21,7
|
/*! |
\file |
\version $Id: Rw11CntlRK11.hpp 627 2015-01-04 11:36:37Z mueller $ |
\version $Id: Rw11CntlRK11.hpp 562 2014-06-15 17:23:18Z mueller $ |
\brief Declaration of class Rw11CntlRK11. |
*/ |
|
32,7 → 30,6
|
#include "Rw11CntlBase.hpp" |
#include "Rw11UnitRK11.hpp" |
#include "Rw11RdmaDisk.hpp" |
|
namespace Retro { |
|
51,11 → 48,6
|
virtual void UnitSetup(size_t ind); |
|
void SetChunkSize(size_t chunk); |
size_t ChunkSize() const; |
|
const Rstats& RdmaStats() const; |
|
virtual void Dump(std::ostream& os, int ind=0, const char* text=0) const; |
|
// some constants (also defined in cpp) |
137,28 → 129,26
|
// statistics counter indices |
enum stats { |
kStatNFuncCreset = Rw11Cntl::kDimStat, //!< func CRESET |
kStatNFuncWrite, //!< func WRITE |
kStatNFuncRead, //!< func READ |
kStatNFuncWchk, //!< func WCHK |
kStatNFuncSeek, //!< func SEEK |
kStatNFuncRchk, //!< func RCHK |
kStatNFuncDreset, //!< func DRESET |
kStatNFuncWlock, //!< func WLOCK |
kStatNFuncCreset = Rw11Cntl::kDimStat, |
kStatNFuncWrite, |
kStatNFuncRead, |
kStatNFuncWchk, |
kStatNFuncSeek, |
kStatNFuncRchk, |
kStatNFuncDreset, |
kStatNFuncWlock, |
kStatNRdmaWrite, |
kStatNRdmaRead, |
kStatNRdmaWchk, |
kStatNRdmaRchk, |
kDimStat |
}; |
|
protected: |
int AttnHandler(RlinkServer::AttnArgs& args); |
void RdmaPreExecCB(int stat, size_t nword, |
RlinkCommandList& clist); |
void RdmaPostExecCB(int stat, size_t ndone, |
RlinkCommandList& clist, size_t ncmd); |
int AttnHandler(const RlinkServer::AttnArgs& args); |
int RdmaHandler(); |
void LogRker(uint16_t rker); |
void AddErrorExit(RlinkCommandList& clist, uint16_t rker); |
void AddNormalExit(RlinkCommandList& clist, size_t ndone, |
uint16_t rker=0); |
|
|
protected: |
size_t fPC_rkwc; //!< PrimClist: rkwc index |
size_t fPC_rkba; //!< PrimClist: rkba index |
166,18 → 156,17
size_t fPC_rkmr; //!< PrimClist: rkmr index |
size_t fPC_rkcs; //!< PrimClist: rkcs index |
|
bool fRd_busy; //!< Rdma: busy flag |
uint16_t fRd_rkcs; //!< Rdma: request rkcs |
uint16_t fRd_rkda; //!< Rdma: request rkda |
uint32_t fRd_addr; //!< Rdma: current addr |
uint32_t fRd_lba; //!< Rdma: current lba |
uint32_t fRd_nwrd; //!< Rdma: current nwrd |
uint16_t fRd_fu; //!< Rdma: request fu code |
bool fRd_ovr; //!< Rdma: overrun condition found |
Rw11RdmaDisk fRdma; //!< Rdma controller |
}; |
|
} // end namespace Retro |
|
#include "Rw11CntlRK11.ipp" |
//#include "Rw11CntlRK11.ipp" |
|
#endif |
/tools/src/librw11/Rw11CntlPC11.hpp
1,6 → 1,6
// $Id: Rw11CntlPC11.hpp 623 2014-12-29 19:11:40Z mueller $ |
// $Id: Rw11CntlPC11.hpp 515 2013-05-04 17:28:59Z mueller $ |
// |
// Copyright 2013-2014 by Walter F.J. Mueller <W.F.J.Mueller@gsi.de> |
// Copyright 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 |
// the terms of the GNU General Public License as published by the Free |
13,7 → 13,6
// |
// Revision History: |
// Date Rev Version Comment |
// 2014-12-29 623 1.1 adopt to Rlink V4 attn logic |
// 2013-05-03 515 1.0 Initial version |
// --------------------------------------------------------------------------- |
|
20,7 → 19,7
|
/*! |
\file |
\version $Id: Rw11CntlPC11.hpp 623 2014-12-29 19:11:40Z mueller $ |
\version $Id: Rw11CntlPC11.hpp 515 2013-05-04 17:28:59Z mueller $ |
\brief Declaration of class Rw11CntlPC11. |
*/ |
|
72,7 → 71,7
static const uint16_t kPBUF_M_BUF = 0377; |
|
protected: |
int AttnHandler(RlinkServer::AttnArgs& args); |
int AttnHandler(const RlinkServer::AttnArgs& args); |
void SetOnline(size_t ind, bool online); |
|
protected: |
/tools/src/librw11/Rw11CntlLP11.cpp
1,6 → 1,6
// $Id: Rw11CntlLP11.cpp 625 2014-12-30 16:17:45Z mueller $ |
// $Id: Rw11CntlLP11.cpp 515 2013-05-04 17:28:59Z mueller $ |
// |
// Copyright 2013-2014 by Walter F.J. Mueller <W.F.J.Mueller@gsi.de> |
// Copyright 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 |
// the terms of the GNU General Public License as published by the Free |
13,8 → 13,6
// |
// Revision History: |
// Date Rev Version Comment |
// 2014-12-30 625 1.2 adopt to Rlink V4 attn logic |
// 2014-12-25 621 1.1 adopt to 4k word ibus window |
// 2013-05-04 515 1.0 Initial version |
// 2013-05-01 513 0.1 First draft |
// --------------------------------------------------------------------------- |
21,7 → 19,7
|
/*! |
\file |
\version $Id: Rw11CntlLP11.cpp 625 2014-12-30 16:17:45Z mueller $ |
\version $Id: Rw11CntlLP11.cpp 515 2013-05-04 17:28:59Z mueller $ |
\brief Implemenation of Rw11CntlLP11. |
*/ |
|
69,7 → 67,7
: Rw11CntlBase<Rw11UnitLP11,1>("lp11"), |
fPC_buf(0) |
{ |
// must be here because Units have a back-ptr (not available at Rw11CntlBase) |
// must here because Unit have a back-pointer (not available at Rw11CntlBase) |
for (size_t i=0; i<NUnit(); i++) { |
fspUnit[i].reset(new Rw11UnitLP11(this, i)); |
} |
99,14 → 97,9
throw Rexception("Rw11CntlLP11::Start", |
"Bad state: started, no lam, not enable, not found"); |
|
// add device register address ibus and rbus mappings |
// done here because now Cntl bound to Cpu and Cntl probed |
Cpu().AllAddrMapInsert(Name()+".csr", Base() + kCSR); |
Cpu().AllAddrMapInsert(Name()+".buf", Base() + kBUF); |
|
// setup primary info clist |
fPrimClist.Clear(); |
fPrimClist.AddAttn(); |
Cpu().AddIbrb(fPrimClist, fBase); |
fPC_buf = Cpu().AddRibr(fPrimClist, fBase+kBUF); |
|
// add attn handler |
143,12 → 136,14
//------------------------------------------+----------------------------------- |
//! FIXME_docs |
|
int Rw11CntlLP11::AttnHandler(RlinkServer::AttnArgs& args) |
int Rw11CntlLP11::AttnHandler(const RlinkServer::AttnArgs& args) |
{ |
fStats.Inc(kStatNAttnHdl); |
Server().GetAttnInfo(args, fPrimClist); |
RlinkCommandList* pclist; |
size_t off; |
|
GetPrimInfo(args, pclist, off); |
|
uint16_t buf = fPrimClist[fPC_buf].Data(); |
uint16_t buf = (*pclist)[off+fPC_buf].Data(); |
bool val = buf & kBUF_M_VAL; |
uint8_t ochr = buf & kBUF_M_BUF; |
|
191,6 → 186,7
Rw11Cpu& cpu = Cpu(); |
uint16_t csr = online ? 0 : kCSR_M_ERROR; |
RlinkCommandList clist; |
cpu.AddIbrb(clist, fBase); |
cpu.AddWibr(clist, fBase+kCSR, csr); |
Server().Exec(clist); |
return; |
/tools/src/librw11/Rw11CntlPC11.cpp
1,6 → 1,6
// $Id: Rw11CntlPC11.cpp 625 2014-12-30 16:17:45Z mueller $ |
// $Id: Rw11CntlPC11.cpp 515 2013-05-04 17:28:59Z mueller $ |
// |
// Copyright 2013-2014 by Walter F.J. Mueller <W.F.J.Mueller@gsi.de> |
// Copyright 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 |
// the terms of the GNU General Public License as published by the Free |
13,14 → 13,12
// |
// Revision History: |
// Date Rev Version Comment |
// 2014-12-30 625 1.2 adopt to Rlink V4 attn logic |
// 2014-12-25 621 1.1 adopt to 4k word ibus window |
// 2013-05-03 515 1.0 Initial version |
// --------------------------------------------------------------------------- |
|
/*! |
\file |
\version $Id: Rw11CntlPC11.cpp 625 2014-12-30 16:17:45Z mueller $ |
\version $Id: Rw11CntlPC11.cpp 515 2013-05-04 17:28:59Z mueller $ |
\brief Implemenation of Rw11CntlPC11. |
*/ |
|
77,7 → 75,7
: Rw11CntlBase<Rw11UnitPC11,2>("pc11"), |
fPC_pbuf(0) |
{ |
// must be here because Units have a back-ptr (not available at Rw11CntlBase) |
// must here because Unit have a back-pointer (not available at Rw11CntlBase) |
for (size_t i=0; i<NUnit(); i++) { |
fspUnit[i].reset(new Rw11UnitPC11(this, i)); |
} |
107,16 → 105,9
throw Rexception("Rw11CntlPC11::Start", |
"Bad state: started, no lam, not enable, not found"); |
|
// add device register address ibus and rbus mappings |
// done here because now Cntl bound to Cpu and Cntl probed |
Cpu().AllAddrMapInsert(Name()+".rcsr", Base() + kRCSR); |
Cpu().AllAddrMapInsert(Name()+".rbuf", Base() + kRBUF); |
Cpu().AllAddrMapInsert(Name()+".pcsr", Base() + kPCSR); |
Cpu().AllAddrMapInsert(Name()+".pbuf", Base() + kPBUF); |
|
// setup primary info clist |
fPrimClist.Clear(); |
fPrimClist.AddAttn(); |
Cpu().AddIbrb(fPrimClist, fBase); |
fPC_pbuf = Cpu().AddRibr(fPrimClist, fBase+kPBUF); |
|
// add attn handler |
245,12 → 236,14
//------------------------------------------+----------------------------------- |
//! FIXME_docs |
|
int Rw11CntlPC11::AttnHandler(RlinkServer::AttnArgs& args) |
int Rw11CntlPC11::AttnHandler(const RlinkServer::AttnArgs& args) |
{ |
fStats.Inc(kStatNAttnHdl); |
Server().GetAttnInfo(args, fPrimClist); |
RlinkCommandList* pclist; |
size_t off; |
|
GetPrimInfo(args, pclist, off); |
|
uint16_t pbuf = fPrimClist[fPC_pbuf].Data(); |
uint16_t pbuf = (*pclist)[off+fPC_pbuf].Data(); |
bool pval = pbuf & kPBUF_M_PVAL; |
bool rbusy = pbuf & kPBUF_M_RBUSY; |
uint8_t ochr = pbuf & kPBUF_M_BUF; |
308,6 → 301,7
{ |
Rw11Cpu& cpu = Cpu(); |
RlinkCommandList clist; |
cpu.AddIbrb(clist, fBase); |
if (ind == kUnit_PR) { // reader on/offline |
uint16_t rcsr = online ? 0 : kRCSR_M_ERROR; |
cpu.AddWibr(clist, fBase+kRCSR, rcsr); |
/tools/src/librw11/Rw11CntlDL11.hpp
1,6 → 1,6
// $Id: Rw11CntlDL11.hpp 623 2014-12-29 19:11:40Z mueller $ |
// $Id: Rw11CntlDL11.hpp 516 2013-05-05 21:24:52Z mueller $ |
// |
// Copyright 2013-2014 by Walter F.J. Mueller <W.F.J.Mueller@gsi.de> |
// Copyright 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 |
// the terms of the GNU General Public License as published by the Free |
13,7 → 13,6
// |
// Revision History: |
// Date Rev Version Comment |
// 2014-12-29 623 1.1 adopt to Rlink V4 attn logic |
// 2013-05-04 516 1.0.1 add RxRlim support (receive interrupt rate limit) |
// 2013-03-06 495 1.0 Initial version |
// 2013-02-05 483 0.1 First draft |
22,7 → 21,7
|
/*! |
\file |
\version $Id: Rw11CntlDL11.hpp 623 2014-12-29 19:11:40Z mueller $ |
\version $Id: Rw11CntlDL11.hpp 516 2013-05-05 21:24:52Z mueller $ |
\brief Declaration of class Rw11CntlDL11. |
*/ |
|
75,7 → 74,7
static const uint16_t kXBUF_M_XBUF = 0xff; |
|
protected: |
int AttnHandler(RlinkServer::AttnArgs& args); |
int AttnHandler(const RlinkServer::AttnArgs& args); |
|
protected: |
size_t fPC_xbuf; //!< PrimClist: xbuf index |
/tools/src/librw11/Rw11CntlLP11.hpp
1,6 → 1,6
// $Id: Rw11CntlLP11.hpp 623 2014-12-29 19:11:40Z mueller $ |
// $Id: Rw11CntlLP11.hpp 515 2013-05-04 17:28:59Z mueller $ |
// |
// Copyright 2013-2014 by Walter F.J. Mueller <W.F.J.Mueller@gsi.de> |
// Copyright 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 |
// the terms of the GNU General Public License as published by the Free |
13,7 → 13,6
// |
// Revision History: |
// Date Rev Version Comment |
// 2014-12-29 623 1.1 adopt to Rlink V4 attn logic |
// 2013-05-01 513 1.0 Initial version |
// --------------------------------------------------------------------------- |
|
20,7 → 19,7
|
/*! |
\file |
\version $Id: Rw11CntlLP11.hpp 623 2014-12-29 19:11:40Z mueller $ |
\version $Id: Rw11CntlLP11.hpp 515 2013-05-04 17:28:59Z mueller $ |
\brief Declaration of class Rw11CntlLP11. |
*/ |
|
62,7 → 61,7
static const uint16_t kBUF_M_BUF = 0177; |
|
protected: |
int AttnHandler(RlinkServer::AttnArgs& args); |
int AttnHandler(const RlinkServer::AttnArgs& args); |
void SetOnline(bool online); |
|
protected: |
/tools/src/librw11/Rw11CntlDL11.cpp
1,6 → 1,6
// $Id: Rw11CntlDL11.cpp 625 2014-12-30 16:17:45Z mueller $ |
// $Id: Rw11CntlDL11.cpp 516 2013-05-05 21:24:52Z mueller $ |
// |
// Copyright 2013-2014 by Walter F.J. Mueller <W.F.J.Mueller@gsi.de> |
// Copyright 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 |
// the terms of the GNU General Public License as published by the Free |
13,8 → 13,6
// |
// Revision History: |
// Date Rev Version Comment |
// 2014-12-30 625 1.2 adopt to Rlink V4 attn logic |
// 2014-12-25 621 1.1 adopt to 4k word ibus window and |
// 2013-05-04 516 1.0.2 add RxRlim support (receive interrupt rate limit) |
// 2013-04-20 508 1.0.1 add trace support |
// 2013-03-06 495 1.0 Initial version |
23,7 → 21,7
|
/*! |
\file |
\version $Id: Rw11CntlDL11.cpp 625 2014-12-30 16:17:45Z mueller $ |
\version $Id: Rw11CntlDL11.cpp 516 2013-05-05 21:24:52Z mueller $ |
\brief Implemenation of Rw11CntlDL11. |
*/ |
|
79,7 → 77,7
fPC_xbuf(0), |
fRxRlim(0) |
{ |
// must be here because Units have a back-ptr (not available at Rw11CntlBase) |
// must here because Unit have a back-pointer (not available at Rw11CntlBase) |
for (size_t i=0; i<NUnit(); i++) { |
fspUnit[i].reset(new Rw11UnitDL11(this, i)); |
} |
109,16 → 107,9
throw Rexception("Rw11CntlDL11::Start", |
"Bad state: started, no lam, not enable, not found"); |
|
// add device register address ibus and rbus mappings |
// done here because now Cntl bound to Cpu and Cntl probed |
Cpu().AllAddrMapInsert(Name()+".rcsr", Base() + kRCSR); |
Cpu().AllAddrMapInsert(Name()+".rbuf", Base() + kRBUF); |
Cpu().AllAddrMapInsert(Name()+".xcsr", Base() + kXCSR); |
Cpu().AllAddrMapInsert(Name()+".xbuf", Base() + kXBUF); |
|
// setup primary info clist |
fPrimClist.Clear(); |
fPrimClist.AddAttn(); |
Cpu().AddIbrb(fPrimClist, fBase); |
fPC_xbuf = Cpu().AddRibr(fPrimClist, fBase+kXBUF); |
|
// add attn handler |
136,6 → 127,7
Rw11Cpu& cpu = Cpu(); |
uint16_t rcsr = (fRxRlim<<kRCSR_V_RXRLIM) & kRCSR_M_RXRLIM; |
RlinkCommandList clist; |
cpu.AddIbrb(clist, fBase); |
cpu.AddWibr(clist, fBase+kRCSR, rcsr); |
Server().Exec(clist); |
return; |
148,6 → 140,7
{ |
if (!fspUnit[0]->RcvQueueEmpty()) { |
RlinkCommandList clist; |
Cpu().AddIbrb(clist, fBase); |
size_t ircsr = Cpu().AddRibr(clist, fBase+kRCSR); |
Server().Exec(clist); |
// FIXME_code: handle errors |
202,12 → 195,14
//------------------------------------------+----------------------------------- |
//! FIXME_docs |
|
int Rw11CntlDL11::AttnHandler(RlinkServer::AttnArgs& args) |
int Rw11CntlDL11::AttnHandler(const RlinkServer::AttnArgs& args) |
{ |
fStats.Inc(kStatNAttnHdl); |
Server().GetAttnInfo(args, fPrimClist); |
RlinkCommandList* pclist; |
size_t off; |
|
GetPrimInfo(args, pclist, off); |
|
uint16_t xbuf = fPrimClist[fPC_xbuf].Data(); |
uint16_t xbuf = (*pclist)[off+fPC_xbuf].Data(); |
|
uint8_t ochr = xbuf & kXBUF_M_XBUF; |
bool xval = xbuf & kXBUF_M_XVAL; |
/tools/src/librw11/Rw11Cpu.hpp
1,6 → 1,6
// $Id: Rw11Cpu.hpp 626 2015-01-03 14:41:37Z mueller $ |
// $Id: Rw11Cpu.hpp 506 2013-04-14 21:54:03Z mueller $ |
// |
// Copyright 2013-2015 by Walter F.J. Mueller <W.F.J.Mueller@gsi.de> |
// Copyright 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 |
// the terms of the GNU General Public License as published by the Free |
13,7 → 13,6
// |
// Revision History: |
// Date Rev Version Comment |
// 2015-01-01 626 1.1 Adopt for rlink v4 and 4k ibus window; add IAddrMap |
// 2013-04-14 506 1.0.1 add AddLalh(),AddRMem(),AddWMem() |
// 2013-04-12 504 1.0 Initial version |
// 2013-01-27 478 0.1 First draft |
22,7 → 21,7
|
/*! |
\file |
\version $Id: Rw11Cpu.hpp 626 2015-01-03 14:41:37Z mueller $ |
\version $Id: Rw11Cpu.hpp 506 2013-04-14 21:54:03Z mueller $ |
\brief Declaration of class Rw11Cpu. |
*/ |
|
40,7 → 39,6
#include "librtools/Rstats.hpp" |
#include "librtools/RerrMsg.hpp" |
#include "librlink/RlinkConnect.hpp" |
#include "librlink/RlinkAddrMap.hpp" |
|
#include "Rw11Probe.hpp" |
|
71,7 → 69,6
const std::string& Type() const; |
size_t Index() const; |
uint16_t Base() const; |
uint16_t IBase() const; |
|
void AddCntl(const boost::shared_ptr<Rw11Cntl>& spcntl); |
bool TestCntl(const std::string& name) const; |
82,8 → 79,7
|
std::string NextCntlName(const std::string& base) const; |
|
int AddMembe(RlinkCommandList& clist, uint16_t be, |
bool stick=false); |
int AddIbrb(RlinkCommandList& clist, uint16_t ibaddr); |
int AddRibr(RlinkCommandList& clist, uint16_t ibaddr); |
int AddWibr(RlinkCommandList& clist, uint16_t ibaddr, |
uint16_t data); |
92,12 → 88,10
uint16_t mode=kCp_ah_m_22bit); |
int AddRMem(RlinkCommandList& clist, uint32_t addr, |
uint16_t* buf, size_t size, |
uint16_t mode=kCp_ah_m_22bit, |
bool singleblk=false); |
uint16_t mode=kCp_ah_m_22bit); |
int AddWMem(RlinkCommandList& clist, uint32_t addr, |
const uint16_t* buf, size_t size, |
uint16_t mode=kCp_ah_m_22bit, |
bool singleblk=false); |
uint16_t mode=kCp_ah_m_22bit); |
|
bool MemRead(uint16_t addr, std::vector<uint16_t>& data, |
size_t nword, RerrMsg& emsg); |
116,15 → 110,6
bool CpuGo() const; |
uint16_t CpuStat() const; |
|
uint16_t IbusRemoteAddr(uint16_t ibaddr) const; |
void AllAddrMapInsert(const std::string& name, uint16_t ibaddr); |
|
bool IAddrMapInsert(const std::string& name, uint16_t ibaddr); |
bool IAddrMapErase(const std::string& name); |
bool IAddrMapErase(uint16_t ibaddr); |
void IAddrMapClear(); |
const RlinkAddrMap& IAddrMap() const; |
|
void W11AttnHandler(); |
|
const Rstats& Stats() const; |
141,7 → 126,8
static const uint16_t kCp_addr_memi = 0x0007; //!< |
static const uint16_t kCp_addr_r0 = 0x0008; //!< |
static const uint16_t kCp_addr_pc = 0x000f; //!< |
static const uint16_t kCp_addr_membe = 0x0010; //!< |
static const uint16_t kCp_addr_ibrb = 0x0010; //!< |
static const uint16_t kCp_addr_ibr = 0x0080; //!< |
|
static const uint16_t kCp_func_noop = 0x0000; //!< |
static const uint16_t kCp_func_start = 0x0001; //!< |
174,9 → 160,6
static const uint16_t kCp_ah_m_22bit = kWBit06; //!< |
static const uint16_t kCp_ah_m_ubmap = kWBit07; //!< |
|
static const uint16_t kCp_membe_m_stick = kWBit02; //!< |
static const uint16_t kCp_membe_m_be = 0x0003; //!< |
|
private: |
Rw11Cpu() {} //!< default ctor blocker |
|
185,13 → 168,11
std::string fType; |
size_t fIndex; |
uint16_t fBase; |
uint16_t fIBase; |
bool fCpuGo; |
uint16_t fCpuStat; |
boost::mutex fCpuGoMutex; |
boost::condition_variable fCpuGoCond; |
cmap_t fCntlMap; //!< name->cntl map |
RlinkAddrMap fIAddrMap; //!< ibus name<->address mapping |
Rstats fStats; //!< statistics |
}; |
|
/tools/src/librw11/Rw11Cntl.hpp
1,6 → 1,6
// $Id: Rw11Cntl.hpp 625 2014-12-30 16:17:45Z mueller $ |
// $Id: Rw11Cntl.hpp 508 2013-04-20 18:43:28Z mueller $ |
// |
// Copyright 2013-2014 by Walter F.J. Mueller <W.F.J.Mueller@gsi.de> |
// Copyright 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 |
// the terms of the GNU General Public License as published by the Free |
13,7 → 13,6
// |
// Revision History: |
// Date Rev Version Comment |
// 2014-12-30 625 1.1 adopt to Rlink V4 attn logic |
// 2013-03-06 495 1.0 Initial version |
// 2013-02-05 483 0.1 First draft |
// --------------------------------------------------------------------------- |
21,7 → 20,7
|
/*! |
\file |
\version $Id: Rw11Cntl.hpp 625 2014-12-30 16:17:45Z mueller $ |
\version $Id: Rw11Cntl.hpp 508 2013-04-20 18:43:28Z mueller $ |
\brief Declaration of class Rw11Cntl. |
*/ |
|
83,6 → 82,7
// statistics counter indices |
enum stats { |
kStatNAttnHdl = 0, |
kStatNPrimFused, |
kStatNAttnNoAct, |
kDimStat |
}; |
90,6 → 90,8
protected: |
void ConfigCntl(const std::string& name, uint16_t base, int lam, |
uint16_t probeoff, bool probeint, bool proberem); |
void GetPrimInfo(const RlinkServer::AttnArgs& args, |
RlinkCommandList*& pclist, size_t& offset); |
|
private: |
Rw11Cntl() {} //!< default ctor blocker |
/tools/src/librw11/Rw11.hpp
1,6 → 1,6
// $Id: Rw11.hpp 625 2014-12-30 16:17:45Z mueller $ |
// $Id: Rw11.hpp 502 2013-04-02 19:29:30Z mueller $ |
// |
// Copyright 2013-2014 by Walter F.J. Mueller <W.F.J.Mueller@gsi.de> |
// Copyright 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 |
// the terms of the GNU General Public License as published by the Free |
13,7 → 13,6
// |
// Revision History: |
// Date Rev Version Comment |
// 2014-12-29 624 1.1 adopt to Rlink V4 attn logic |
// 2013-03-06 495 1.0 Initial version |
// 2013-01-27 478 0.1 First draft |
// --------------------------------------------------------------------------- |
21,7 → 20,7
|
/*! |
\file |
\version $Id: Rw11.hpp 625 2014-12-30 16:17:45Z mueller $ |
\version $Id: Rw11.hpp 502 2013-04-02 19:29:30Z mueller $ |
\brief Declaration of class Rw11. |
*/ |
|
62,7 → 61,7
static const int kLam = 0; //!< W11 CPU cluster lam |
|
protected: |
int AttnHandler(RlinkServer::AttnArgs& args); |
int AttnHandler(const RlinkServer::AttnArgs& args); |
|
protected: |
boost::shared_ptr<RlinkServer> fspServ; |
/tools/src/librw11/Rw11Cpu.ipp
1,6 → 1,6
// $Id: Rw11Cpu.ipp 621 2014-12-26 21:20:05Z mueller $ |
// $Id: Rw11Cpu.ipp 504 2013-04-13 15:37:24Z mueller $ |
// |
// Copyright 2013-2014 by Walter F.J. Mueller <W.F.J.Mueller@gsi.de> |
// Copyright 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 |
// the terms of the GNU General Public License as published by the Free |
13,7 → 13,6
// |
// Revision History: |
// Date Rev Version Comment |
// 2014-12-25 621 1.1 Adopt for 4k word ibus window; add IAddrMap |
// 2013-04-12 504 1.0 Initial version |
// 2013-01-27 478 0.1 First draft |
// --------------------------------------------------------------------------- |
20,7 → 19,8
|
/*! |
\file |
\version $Id: Rw11Cpu.ipp 621 2014-12-26 21:20:05Z mueller $ |
\version $Id: Rw11Cpu.ipp 502 2013-04-02 19:29:30Z mu./librwxxtpp/Rwxxtpp_Init.cpp |
eller $ |
\brief Implemenation (inline) of Rw11Cpu. |
*/ |
|
86,14 → 86,6
//------------------------------------------+----------------------------------- |
//! FIXME_docs |
|
inline uint16_t Rw11Cpu::IBase() const |
{ |
return fIBase; |
} |
|
//------------------------------------------+----------------------------------- |
//! FIXME_docs |
|
inline uint16_t Rw11Cpu::CpuStat() const |
{ |
return fCpuStat; |
110,54 → 102,6
//------------------------------------------+----------------------------------- |
//! FIXME_docs |
|
inline uint16_t Rw11Cpu::IbusRemoteAddr(uint16_t ibaddr) const |
{ |
return fIBase + (ibaddr & 017777)/2; |
} |
|
//------------------------------------------+----------------------------------- |
//! FIXME_docs |
|
inline bool Rw11Cpu::IAddrMapInsert(const std::string& name, uint16_t ibaddr) |
{ |
return fIAddrMap.Insert(name, ibaddr); |
} |
|
//------------------------------------------+----------------------------------- |
//! FIXME_docs |
|
inline bool Rw11Cpu::IAddrMapErase(const std::string& name) |
{ |
return fIAddrMap.Erase(name); |
} |
|
//------------------------------------------+----------------------------------- |
//! FIXME_docs |
|
inline bool Rw11Cpu::IAddrMapErase(uint16_t ibaddr) |
{ |
return fIAddrMap.Erase(ibaddr); |
} |
|
//------------------------------------------+----------------------------------- |
//! FIXME_docs |
|
inline void Rw11Cpu::IAddrMapClear() |
{ |
return fIAddrMap.Clear(); |
} |
|
//------------------------------------------+----------------------------------- |
//! FIXME_docs |
|
inline const RlinkAddrMap& Rw11Cpu::IAddrMap() const |
{ |
return fIAddrMap; |
} |
|
//------------------------------------------+----------------------------------- |
//! FIXME_docs |
|
inline const Rstats& Rw11Cpu::Stats() const |
{ |
return fStats; |
/tools/src/librw11/Rw11CpuW11a.cpp
1,6 → 1,6
// $Id: Rw11CpuW11a.cpp 621 2014-12-26 21:20:05Z mueller $ |
// $Id: Rw11CpuW11a.cpp 504 2013-04-13 15:37:24Z mueller $ |
// |
// Copyright 2013-2014 by Walter F.J. Mueller <W.F.J.Mueller@gsi.de> |
// Copyright 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 |
// the terms of the GNU General Public License as published by the Free |
13,7 → 13,6
// |
// Revision History: |
// Date Rev Version Comment |
// 2014-12-25 621 1.1 adopt to 4k word ibus window |
// 2013-03-03 494 1.0 Initial version |
// 2013-01-27 478 0.1 First draft |
// --------------------------------------------------------------------------- |
20,7 → 19,7
|
/*! |
\file |
\version $Id: Rw11CpuW11a.cpp 621 2014-12-26 21:20:05Z mueller $ |
\version $Id: Rw11CpuW11a.cpp 504 2013-04-13 15:37:24Z mueller $ |
\brief Implemenation of Rw11CpuW11a. |
*/ |
|
54,11 → 53,10
//------------------------------------------+----------------------------------- |
//! FIXME_docs |
|
void Rw11CpuW11a::Setup(size_t ind, uint16_t base, uint16_t ibase) |
void Rw11CpuW11a::Setup(size_t ind, uint16_t base) |
{ |
fIndex = ind; |
fBase = base; |
fIBase = ibase; |
return; |
} |
|
/tools/src/librw11/Rw11CpuW11a.hpp
1,6 → 1,6
// $Id: Rw11CpuW11a.hpp 621 2014-12-26 21:20:05Z mueller $ |
// $Id: Rw11CpuW11a.hpp 504 2013-04-13 15:37:24Z mueller $ |
// |
// Copyright 2013-2014 by Walter F.J. Mueller <W.F.J.Mueller@gsi.de> |
// Copyright 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 |
// the terms of the GNU General Public License as published by the Free |
13,7 → 13,6
// |
// Revision History: |
// Date Rev Version Comment |
// 2014-12-25 621 1.1 adopt to 4k word ibus window |
// 2013-03-03 494 1.0 Initial version |
// 2013-01-27 478 0.1 First draft |
// --------------------------------------------------------------------------- |
21,7 → 20,7
|
/*! |
\file |
\version $Id: Rw11CpuW11a.hpp 621 2014-12-26 21:20:05Z mueller $ |
\version $Id: Rw11CpuW11a.hpp 504 2013-04-13 15:37:24Z mueller $ |
\brief Declaration of class Rw11CpuW11a. |
*/ |
|
38,7 → 37,7
Rw11CpuW11a(); |
~Rw11CpuW11a(); |
|
void Setup(size_t ind, uint16_t base, uint16_t ibase); |
void Setup(size_t ind, uint16_t base); |
|
virtual void Dump(std::ostream& os, int ind=0, const char* text=0) const; |
|
/tools/src/librw11/Rw11Cntl.cpp
1,6 → 1,6
// $Id: Rw11Cntl.cpp 625 2014-12-30 16:17:45Z mueller $ |
// $Id: Rw11Cntl.cpp 495 2013-03-06 17:13:48Z mueller $ |
// |
// Copyright 2013-2014 by Walter F.J. Mueller <W.F.J.Mueller@gsi.de> |
// Copyright 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 |
// the terms of the GNU General Public License as published by the Free |
13,7 → 13,6
// |
// Revision History: |
// Date Rev Version Comment |
// 2014-12-30 625 1.1 adopt to Rlink V4 attn logic |
// 2013-03-06 495 1.0 Initial version |
// 2013-02-05 483 0.1 First draft |
// --------------------------------------------------------------------------- |
20,7 → 19,7
|
/*! |
\file |
\version $Id: Rw11Cntl.cpp 625 2014-12-30 16:17:45Z mueller $ |
\version $Id: Rw11Cntl.cpp 495 2013-03-06 17:13:48Z mueller $ |
\brief Implemenation of Rw11Cntl. |
*/ |
|
57,6 → 56,7
fStats() |
{ |
fStats.Define(kStatNAttnHdl, "NAttnHdl", "AttnHandler() calls"); |
fStats.Define(kStatNPrimFused,"NPrimFused","PrimInfo fused with attn cmd"); |
fStats.Define(kStatNAttnNoAct,"NAttnNoAct","AttnHandler() no action return"); |
} |
|
152,6 → 152,30
fProbe.fProbeInt = probeint; |
fProbe.fProbeRem = proberem; |
return; |
} |
} |
|
//------------------------------------------+----------------------------------- |
//! FIXME_docs |
|
void Rw11Cntl::GetPrimInfo(const RlinkServer::AttnArgs& args, |
RlinkCommandList*& pclist, size_t& offset) |
{ |
fStats.Inc(kStatNAttnHdl); |
|
if (args.fpClist) { |
fStats.Inc(kStatNPrimFused); |
pclist = args.fpClist; |
offset = args.fOffset; |
|
} else { |
Server().Exec(fPrimClist); |
// FIXME_code: handle errors |
pclist = &fPrimClist; |
offset = 0; |
} |
|
return; |
} |
|
|
} // end namespace Retro |
/tools/src/librw11/Rw11.cpp
1,6 → 1,6
// $Id: Rw11.cpp 625 2014-12-30 16:17:45Z mueller $ |
// $Id: Rw11.cpp 504 2013-04-13 15:37:24Z mueller $ |
// |
// Copyright 2013-2014 by Walter F.J. Mueller <W.F.J.Mueller@gsi.de> |
// Copyright 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 |
// the terms of the GNU General Public License as published by the Free |
13,7 → 13,6
// |
// Revision History: |
// Date Rev Version Comment |
// 2014-12-30 625 1.1 adopt to Rlink V4 attn logic |
// 2013-03-06 495 1.0 Initial version |
// 2013-01-27 478 0.1 First draft |
// --------------------------------------------------------------------------- |
20,7 → 19,7
|
/*! |
\file |
\version $Id: Rw11.cpp 625 2014-12-30 16:17:45Z mueller $ |
\version $Id: Rw11.cpp 504 2013-04-13 15:37:24Z mueller $ |
\brief Implemenation of Rw11. |
*/ |
|
134,10 → 133,8
//------------------------------------------+----------------------------------- |
//! FIXME_docs |
|
int Rw11::AttnHandler(RlinkServer::AttnArgs& args) |
int Rw11::AttnHandler(const RlinkServer::AttnArgs& args) |
{ |
Server().GetAttnInfo(args); |
|
for (size_t i=0; i<fNCpu; i++) fspCpu[i]->W11AttnHandler(); |
return 0; |
} |
/tools/src/librwxxtpp/RtclRw11Cpu.cpp
1,4 → 1,4
// $Id: RtclRw11Cpu.cpp 628 2015-01-04 16:22:09Z mueller $ |
// $Id: RtclRw11Cpu.cpp 607 2014-11-30 20:02:48Z mueller $ |
// |
// Copyright 2013-2014 by Walter F.J. Mueller <W.F.J.Mueller@gsi.de> |
// |
13,8 → 13,6
// |
// Revision History: |
// Date Rev Version Comment |
// 2014-12-29 623 1.1.2 add M_amap; M_cp: add -print and -dump |
// 2014-12-20 616 1.1.1 M_cp: add -edone for BlockDone checking |
// 2014-11-30 607 1.1 new rlink v4 iface |
// 2014-08-22 584 1.0.5 use nullptr |
// 2014-08-02 576 1.0.4 BUGFIX: redo estatdef logic; avoid LastExpect() |
27,7 → 25,7
|
/*! |
\file |
\version $Id: RtclRw11Cpu.cpp 628 2015-01-04 16:22:09Z mueller $ |
\version $Id: RtclRw11Cpu.cpp 607 2014-11-30 20:02:48Z mueller $ |
\brief Implemenation of RtclRw11Cpu. |
*/ |
|
76,11 → 74,9
|
RtclRw11Cpu::RtclRw11Cpu(const std::string& type) |
: RtclProxyBase(type), |
fGets(), |
fSets() |
fGets() |
{ |
AddMeth("add", boost::bind(&RtclRw11Cpu::M_add, this, _1)); |
AddMeth("amap", boost::bind(&RtclRw11Cpu::M_amap, this, _1)); |
AddMeth("cp", boost::bind(&RtclRw11Cpu::M_cp, this, _1)); |
AddMeth("wtcpu", boost::bind(&RtclRw11Cpu::M_wtcpu, this, _1)); |
AddMeth("deposit", boost::bind(&RtclRw11Cpu::M_deposit, this, _1)); |
114,101 → 110,6
//------------------------------------------+----------------------------------- |
//! FIXME_docs |
|
int RtclRw11Cpu::M_amap(RtclArgs& args) |
{ |
static RtclNameSet optset("-name|-testname|-testaddr|-insert|-erase|-print"); |
|
const RlinkAddrMap& addrmap = Obj().IAddrMap(); |
|
string opt; |
string name; |
uint16_t addr=0; |
|
if (args.NextOpt(opt, optset)) { |
if (opt == "-name") { // amap -name addr |
if (!args.GetArg("addr", addr)) return kERR; |
if (!args.AllDone()) return kERR; |
string tstname; |
if(addrmap.Find(addr, tstname)) { |
args.SetResult(tstname); |
} else { |
return args.Quit(string("-E: address '") + args.PeekArgString(-1) + |
"' not mapped"); |
} |
|
} else if (opt == "-testname") { // amap -testname name |
if (!args.GetArg("name", name)) return kERR; |
if (!args.AllDone()) return kERR; |
uint16_t tstaddr; |
args.SetResult(int(addrmap.Find(name, tstaddr))); |
|
} else if (opt == "-testaddr") { // amap -testaddr addr |
if (!args.GetArg("addr", addr)) return kERR; |
if (!args.AllDone()) return kERR; |
string tstname; |
args.SetResult(int(addrmap.Find(addr, tstname))); |
|
} else if (opt == "-insert") { // amap -insert name addr |
uint16_t tstaddr; |
string tstname; |
int tstint; |
if (!args.GetArg("name", name)) return kERR; |
// enforce that the name is not a valid representation of an int |
if (Tcl_GetIntFromObj(nullptr, args[args.NDone()-1], &tstint) == kOK) |
return args.Quit(string("-E: name should not look like an int but '")+ |
name + "' does"); |
if (!args.GetArg("addr", addr)) return kERR; |
if (!args.AllDone()) return kERR; |
if (addrmap.Find(name, tstaddr)) |
return args.Quit(string("-E: mapping already defined for '")+name+"'"); |
if (addrmap.Find(addr, tstname)) |
return args.Quit(string("-E: mapping already defined for address '") + |
args.PeekArgString(-1) + "'"); |
Obj().IAddrMapInsert(name, addr); |
|
} else if (opt == "-erase") { // amap -erase name |
if (!args.GetArg("name", name)) return kERR; |
if (!args.AllDone()) return kERR; |
if (!Obj().IAddrMapErase(name)) |
return args.Quit(string("-E: no mapping defined for '") + name + "'"); |
|
} else if (opt == "-print") { // amap -print |
if (!args.AllDone()) return kERR; |
ostringstream sos; |
addrmap.Print(sos); |
args.AppendResultLines(sos); |
} |
|
} else { |
if (!args.OptValid()) return kERR; |
if (!args.GetArg("?name", name)) return kERR; |
if (args.NOptMiss()==0) { // amap name |
uint16_t tstaddr; |
if(addrmap.Find(name, tstaddr)) { |
args.SetResult(int(tstaddr)); |
} else { |
return args.Quit(string("-E: no mapping defined for '") + name + "'"); |
} |
|
} else { // amap |
RtclOPtr plist(Tcl_NewListObj(0, nullptr)); |
const RlinkAddrMap::amap_t amap = addrmap.Amap(); |
for (RlinkAddrMap::amap_cit_t it=amap.begin(); it!=amap.end(); it++) { |
Tcl_Obj* tpair[2]; |
tpair[0] = Tcl_NewIntObj(it->first); |
tpair[1] = Tcl_NewStringObj((it->second).c_str(),(it->second).length()); |
Tcl_ListObjAppendElement(nullptr, plist, Tcl_NewListObj(2, tpair)); |
} |
args.SetResult(plist); |
} |
} |
|
return kOK; |
} |
|
//------------------------------------------+----------------------------------- |
//! FIXME_docs |
|
int RtclRw11Cpu::M_cp(RtclArgs& args) |
{ |
static RtclNameSet optset("-rr|-rr0|-rr1|-rr2|-rr3|-rr4|-rr5|-rr6|-rr7|" |
218,21 → 119,19
"-ral|-rah|-wal|-wah|-wa|" |
"-rm|-rmi|-wm|-wmi|-brm|-bwm|" |
"-stapc|-start|-stop|-continue|-step|-reset|" |
"-rmembe|-wmembe|-ribr|-wibr|" |
"-ribrb|-wibrb|-ribr|-wibr|" |
"-rconf|-rstat|" |
"-edata|-edone|-estat|-estatdef|" |
"-print|-dump|"); |
"-edata|-estat|-estatdef" |
); |
|
Tcl_Interp* interp = args.Interp(); |
|
RlinkCommandList clist; |
string opt; |
uint16_t base = Obj().Base(); |
uint16_t base = Obj().Base(); |
|
vector<string> vardata; |
vector<string> varstat; |
string varprint; |
string vardump; |
|
uint8_t estatdef_val = 0x00; |
uint8_t estatdef_msk = 0xff; |
324,8 → 223,7
|
} else if (opt == "-rm" || // -rm(i) ?varData ?varStat ------ |
opt == "-rmi") { |
uint16_t addr = opt=="-rm" ? Rw11Cpu::kCp_addr_mem : |
Rw11Cpu::kCp_addr_memi; |
uint16_t addr = opt=="-rm" ? Rw11Cpu::kCp_addr_mem : Rw11Cpu::kCp_addr_memi; |
if (!GetVarName(args, "??varData", lsize, vardata)) return kERR; |
if (!GetVarName(args, "??varStat", lsize, varstat)) return kERR; |
clist.AddRreg(base + addr); |
382,41 → 280,44
if (!GetVarName(args, "??varStat", lsize, varstat)) return kERR; |
clist.AddWreg(base + Rw11Cpu::kCp_addr_cntl, Rw11Cpu::kCp_func_reset); |
|
} else if (opt == "-rmembe") { // -rmembe ?varData ?varStat ------ |
} else if (opt == "-ribrb") { // -ribrb ?varData ?varStat ------ |
if (!GetVarName(args, "??varData", lsize, vardata)) return kERR; |
if (!GetVarName(args, "??varStat", lsize, varstat)) return kERR; |
clist.AddRreg(base + Rw11Cpu::kCp_addr_membe); |
clist.AddRreg(base + Rw11Cpu::kCp_addr_ibrb); |
|
} else if (opt == "-wmembe") { // -wmembe be ?varStat [-stick] - |
uint16_t be; |
bool stick = false; |
if (!args.GetArg("be", be, 3)) return kERR; |
} else if (opt == "-wibrb") { // -wibrb base ?varStat [-be be] - |
uint16_t data; |
if (!args.GetArg("base", data)) return kERR; |
if (!GetVarName(args, "??varStat", lsize, varstat)) return kERR; |
|
static RtclNameSet suboptset("-stick"); |
data &= 0177700; // clear byte enables |
static RtclNameSet suboptset("-be"); |
string subopt; |
while (args.NextSubOpt(subopt, suboptset)>=0) { // loop for sub-options |
if (!args.OptValid()) return kERR; |
if (subopt == "-stick") { // -stick |
stick = true; |
if (subopt == "-be") { // -be be |
uint16_t be; |
if (!args.GetArg("be", be, 0x3)) return kERR; |
if (be == 0) be = 0x3; // map be 0 -> be 3 |
data |= be; // set byte enables |
} |
} |
Obj().AddMembe(clist, be, stick); |
clist.AddWreg(base + Rw11Cpu::kCp_addr_ibrb, data); |
|
} else if (opt == "-ribr") { // -ribr off ?varData ?varStat ---- |
uint16_t ibaddr; |
if (!GetIAddr(args, ibaddr)) return kERR; |
uint16_t off; |
if (!args.GetArg("off", off, 63)) return kERR; |
if (!GetVarName(args, "??varData", lsize, vardata)) return kERR; |
if (!GetVarName(args, "??varStat", lsize, varstat)) return kERR; |
Obj().AddRibr(clist, ibaddr); |
clist.AddRreg(base + Rw11Cpu::kCp_addr_ibr + off/2); |
|
} else if (opt == "-wibr") { // -wibr off data ?varStat -------- |
uint16_t ibaddr; |
uint16_t off; |
uint16_t data; |
if (!GetIAddr(args, ibaddr)) return kERR; |
if (!args.GetArg("data", data)) return kERR; |
if (!args.GetArg("off", off, 63)) return kERR; |
if (!args.GetArg("data", data)) return kERR; |
if (!GetVarName(args, "??varStat", lsize, varstat)) return kERR; |
Obj().AddWibr(clist, ibaddr, data); |
clist.AddWreg(base + Rw11Cpu::kCp_addr_ibr + off/2, data); |
|
} else if (opt == "-rconf") { // -rconf ?varData ?varStat ------ |
if (!GetVarName(args, "??varData", lsize, vardata)) return kERR; |
450,23 → 351,6
clist[lsize-1].Expect()->SetData(data, mask); |
} |
|
} else if (opt == "-edone") { // -edone done -------------------- |
if (lsize == 0) |
return args.Quit("-E: -edone not allowed on empty command list"); |
uint16_t done=0; |
if (!args.GetArg("done", done)) return kERR; |
if (clist[lsize-1].Expect()==0) { |
clist[lsize-1].SetExpect(new RlinkCommandExpect(estatdef_val, |
estatdef_msk)); |
} |
uint8_t cmd = clist[lsize-1].Command(); |
if (cmd == RlinkCommand::kCmdRblk || |
cmd == RlinkCommand::kCmdWblk) { |
clist[lsize-1].Expect()->SetDone(done); |
} else { |
return args.Quit("-E: -edone allowed only after -rblk,-wblk"); |
} |
|
} else if (opt == "-estat") { // -estat ?stat ?mask ------------- |
if (lsize == 0) |
return args.Quit("-E: -estat not allowed on empty command list"); |
489,12 → 373,6
estatdef_val = stat; |
estatdef_msk = mask; |
|
} else if (opt == "-print") { // -print ?varRes ----------------- |
varprint = "-"; |
if (!args.GetArg("??varRes", varprint)) return kERR; |
} else if (opt == "-dump") { // -dump ?varRes ------------------ |
vardump = "-"; |
if (!args.GetArg("??varRes", vardump)) return kERR; |
} |
|
if (estatdef_msk != 0xff && // estatdef defined |
509,13 → 387,6
|
} |
|
int nact = 0; |
if (varprint == "-") nact += 1; |
if (vardump == "-") nact += 1; |
if (nact > 1) |
return args.Quit( |
"-E: more that one of -print,-dump without target variable found"); |
|
if (!args.AllDone()) return kERR; |
if (clist.Size() == 0) return kOK; |
|
527,7 → 398,6
// FIXME_code: is this a good idea ?? |
if (!Connect().Exec(clist, emsg)) return args.Quit(emsg); |
|
// FIXME: this code is a 1-to-1 copy from RtclRlinkConnect ! put into a method |
for (size_t icmd=0; icmd<clist.Size(); icmd++) { |
RlinkCommand& cmd = clist[icmd]; |
|
537,8 → 407,6
RtclOPtr pele; |
switch (cmd.Command()) { |
case RlinkCommand::kCmdRreg: |
case RlinkCommand::kCmdAttn: |
case RlinkCommand::kCmdLabo: |
pres = Tcl_NewIntObj((int)cmd.Data()); |
break; |
|
555,22 → 423,6
} |
} |
|
if (!varprint.empty()) { |
ostringstream sos; |
const RlinkConnect::LogOpts& logopts = Connect().GetLogOpts(); |
clist.Print(sos, Connect().Context(), &Connect().AddrMap(), |
logopts.baseaddr, logopts.basedata, logopts.basestat); |
RtclOPtr pobj(Rtcl::NewLinesObj(sos)); |
if (!Rtcl::SetVarOrResult(args.Interp(), varprint, pobj)) return kERR; |
} |
|
if (!vardump.empty()) { |
ostringstream sos; |
clist.Dump(sos, 0); |
RtclOPtr pobj(Rtcl::NewLinesObj(sos)); |
if (!Rtcl::SetVarOrResult(args.Interp(), vardump, pobj)) return kERR; |
} |
|
return kOK; |
} |
|
1252,41 → 1104,6
//------------------------------------------+----------------------------------- |
//! FIXME_docs |
|
bool RtclRw11Cpu::GetIAddr(RtclArgs& args, uint16_t& ibaddr) |
{ |
Tcl_Obj* pobj=0; |
if (!args.GetArg("ibaddr", pobj)) return kERR; |
|
int tstint; |
// if a number is given.. |
if (Tcl_GetIntFromObj(nullptr, pobj, &tstint) == kOK) { |
if (tstint >= 0 && tstint <= 0xffff && (tstint & 0x1) == 0) { |
ibaddr = (uint16_t)tstint; |
} else { |
args.AppendResult("-E: value '", Tcl_GetString(pobj), |
"' for 'addr' odd number or out of range 0...0xffff", |
nullptr); |
return false; |
} |
// if a name is given |
} else { |
string name(Tcl_GetString(pobj)); |
uint16_t tstaddr; |
if (Obj().IAddrMap().Find(name, tstaddr)) { |
ibaddr = tstaddr; |
} else { |
args.AppendResult("-E: no address mapping known for '", |
Tcl_GetString(pobj), "'", nullptr); |
return false; |
} |
} |
|
return true; |
} |
|
//------------------------------------------+----------------------------------- |
//! FIXME_docs |
|
bool RtclRw11Cpu::GetVarName(RtclArgs& args, const char* argname, |
size_t nind, |
std::vector<std::string>& varname) |
/tools/src/librwxxtpp/RtclRw11.cpp
1,6 → 1,6
// $Id: RtclRw11.cpp 621 2014-12-26 21:20:05Z mueller $ |
// $Id: RtclRw11.cpp 513 2013-05-01 14:02:06Z mueller $ |
// |
// Copyright 2013-2014 by Walter F.J. Mueller <W.F.J.Mueller@gsi.de> |
// Copyright 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 |
// the terms of the GNU General Public License as published by the Free |
13,7 → 13,6
// |
// Revision History: |
// Date Rev Version Comment |
// 2014-12-25 621 1.1 adopt to 4k word ibus window |
// 2013-03-06 495 1.0 Initial version |
// 2013-01-27 478 0.1 First Draft |
// --------------------------------------------------------------------------- |
20,7 → 19,7
|
/*! |
\file |
\version $Id: RtclRw11.cpp 621 2014-12-26 21:20:05Z mueller $ |
\version $Id: RtclRw11.cpp 513 2013-05-01 14:02:06Z mueller $ |
\brief Implemenation of class RtclRw11. |
*/ |
|
101,7 → 100,7
if (type == "w11a") { // w11a -------------------------- |
RtclRw11CpuW11a* pobj = new RtclRw11CpuW11a(args.Interp(), "cpu0"); |
// configure cpu |
pobj->Obj().Setup(0,0,0x4000); // ind=0,base=0,ibase=0x4000 |
pobj->Obj().Setup(0,0); // ind=0,base=0 |
// install in w11 |
Obj().AddCpu(dynamic_pointer_cast<Rw11Cpu>(pobj->ObjSPtr())); |
|
/tools/src/librwxxtpp/RtclRw11CntlRK11.cpp
1,4 → 1,4
// $Id: RtclRw11CntlRK11.cpp 627 2015-01-04 11:36:37Z mueller $ |
// $Id: RtclRw11CntlRK11.cpp 509 2013-04-21 20:46:20Z mueller $ |
// |
// Copyright 2013- by Walter F.J. Mueller <W.F.J.Mueller@gsi.de> |
// |
19,7 → 19,7
|
/*! |
\file |
\version $Id: RtclRw11CntlRK11.cpp 627 2015-01-04 11:36:37Z mueller $ |
\version $Id: RtclRw11CntlRK11.cpp 509 2013-04-21 20:46:20Z mueller $ |
\brief Implemenation of RtclRw11CntlRK11. |
*/ |
|
43,13 → 43,7
|
RtclRw11CntlRK11::RtclRw11CntlRK11() |
: RtclRw11CntlBase<Rw11CntlRK11>("Rw11CntlRK11") |
{ |
Rw11CntlRK11* pobj = &Obj(); |
fGets.Add<size_t> ("chunksize", |
boost::bind(&Rw11CntlRK11::ChunkSize, pobj)); |
fSets.Add<size_t> ("chunksize", |
boost::bind(&Rw11CntlRK11::SetChunkSize, pobj, _1)); |
} |
{} |
|
//------------------------------------------+----------------------------------- |
//! Destructor |
97,17 → 91,4
return kOK; |
} |
|
//------------------------------------------+----------------------------------- |
//! FIXME_docs |
|
int RtclRw11CntlRK11::M_stats(RtclArgs& args) |
{ |
RtclStats::Context cntx; |
if (!RtclStats::GetArgs(args, cntx)) return kERR; |
if (!RtclStats::Collect(args, cntx, Obj().Stats())) return kERR; |
if (!RtclStats::Collect(args, cntx, Obj().RdmaStats())) return kERR; |
return kOK; |
} |
|
|
} // end namespace Retro |
/tools/src/librwxxtpp/RtclRw11CntlRK11.hpp
1,6 → 1,6
// $Id: RtclRw11CntlRK11.hpp 627 2015-01-04 11:36:37Z mueller $ |
// $Id: RtclRw11CntlRK11.hpp 509 2013-04-21 20:46:20Z mueller $ |
// |
// Copyright 2013-2015 by Walter F.J. Mueller <W.F.J.Mueller@gsi.de> |
// Copyright 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 |
// the terms of the GNU General Public License as published by the Free |
13,7 → 13,6
// |
// Revision History: |
// Date Rev Version Comment |
// 2015-01-03 627 1.1 add local M_stat |
// 2013-03-06 495 1.0 Initial version |
// 2013-02-08 484 0.1 First draft |
// --------------------------------------------------------------------------- |
21,7 → 20,7
|
/*! |
\file |
\version $Id: RtclRw11CntlRK11.hpp 627 2015-01-04 11:36:37Z mueller $ |
\version $Id: RtclRw11CntlRK11.hpp 509 2013-04-21 20:46:20Z mueller $ |
\brief Declaration of class RtclRw11CntlRK11. |
*/ |
|
39,9 → 38,6
~RtclRw11CntlRK11(); |
|
virtual int FactoryCmdConfig(RtclArgs& args, RtclRw11Cpu& cpu); |
|
protected: |
virtual int M_stats(RtclArgs& args); |
}; |
|
} // end namespace Retro |
/tools/src/librwxxtpp/RtclRw11Cpu.hpp
1,6 → 1,6
// $Id: RtclRw11Cpu.hpp 621 2014-12-26 21:20:05Z mueller $ |
// $Id: RtclRw11Cpu.hpp 511 2013-04-27 13:51:46Z mueller $ |
// |
// Copyright 2013-2014 by Walter F.J. Mueller <W.F.J.Mueller@gsi.de> |
// Copyright 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 |
// the terms of the GNU General Public License as published by the Free |
13,7 → 13,6
// |
// Revision History: |
// Date Rev Version Comment |
// 2014-12-25 621 1.0.2 add M_amap |
// 2013-04-26 511 1.0.1 add M_show |
// 2013-04-02 502 1.0 Initial version |
// 2013-02-02 480 0.1 First draft |
22,7 → 21,7
|
/*! |
\file |
\version $Id: RtclRw11Cpu.hpp 621 2014-12-26 21:20:05Z mueller $ |
\version $Id: RtclRw11Cpu.hpp 511 2013-04-27 13:51:46Z mueller $ |
\brief Declaration of class RtclRw11Cpu. |
*/ |
|
52,7 → 51,6
|
protected: |
int M_add(RtclArgs& args); |
int M_amap(RtclArgs& args); |
int M_cp(RtclArgs& args); |
int M_wtcpu(RtclArgs& args); |
int M_deposit(RtclArgs& args); |
73,7 → 71,6
RlinkServer& Server(); |
RlinkConnect& Connect(); |
|
bool GetIAddr(RtclArgs& args, uint16_t& ibaddr); |
bool GetVarName(RtclArgs& args, const char* argname, |
size_t nind, std::vector<std::string>& varname); |
|
/tools/src/librwxxtpp/RtclRw11Cntl.hpp
1,6 → 1,6
// $Id: RtclRw11Cntl.hpp 627 2015-01-04 11:36:37Z mueller $ |
// $Id: RtclRw11Cntl.hpp 504 2013-04-13 15:37:24Z mueller $ |
// |
// Copyright 2013-2015 by Walter F.J. Mueller <W.F.J.Mueller@gsi.de> |
// Copyright 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 |
// the terms of the GNU General Public License as published by the Free |
13,7 → 13,6
// |
// Revision History: |
// Date Rev Version Comment |
// 2015-01-03 627 1.1 M_stats now virtual |
// 2013-03-06 495 1.0 Initial version |
// 2013-02-08 484 0.1 First draft |
// --------------------------------------------------------------------------- |
21,7 → 20,7
|
/*! |
\file |
\version $Id: RtclRw11Cntl.hpp 627 2015-01-04 11:36:37Z mueller $ |
\version $Id: RtclRw11Cntl.hpp 504 2013-04-13 15:37:24Z mueller $ |
\brief Declaration of class RtclRw11Cntl. |
*/ |
|
53,7 → 52,7
int M_get(RtclArgs& args); |
int M_set(RtclArgs& args); |
int M_probe(RtclArgs& args); |
virtual int M_stats(RtclArgs& args); |
int M_stats(RtclArgs& args); |
int M_dump(RtclArgs& args); |
int M_default(RtclArgs& args); |
|
/tools/src/librlink/RlinkConnect.hpp
1,6 → 1,6
// $Id: RlinkConnect.hpp 626 2015-01-03 14:41:37Z mueller $ |
// $Id: RlinkConnect.hpp 611 2014-12-10 23:23:58Z mueller $ |
// |
// Copyright 2011-2015 by Walter F.J. Mueller <W.F.J.Mueller@gsi.de> |
// Copyright 2011-2014 by Walter F.J. Mueller <W.F.J.Mueller@gsi.de> |
// |
// 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 |
13,9 → 13,6
// |
// Revision History: |
// Date Rev Version Comment |
// 2015-01-01 626 2.1 full rlink v4 implementation |
// 2014-12-25 621 2.0.2 Reorganize packet send/revd stats |
// 2014-12-20 616 2.0.1 add BlockDone expect checks |
// 2014-12-10 611 2.0 re-organize for rlink v4 |
// 2013-04-21 509 1.3.3 add SndAttn() method |
// 2013-03-05 495 1.3.2 add Exec() without emsg (will send emsg to LogFile) |
35,7 → 32,7
|
/*! |
\file |
\version $Id: RlinkConnect.hpp 626 2015-01-03 14:41:37Z mueller $ |
\version $Id: RlinkConnect.hpp 611 2014-12-10 23:23:58Z mueller $ |
\brief Declaration of class \c RlinkConnect. |
*/ |
|
116,17 → 113,12
bool SndOob(uint16_t addr, uint16_t data, RerrMsg& emsg); |
bool SndAttn(RerrMsg& emsg); |
|
uint32_t SysId() const; |
size_t RbufSize() const; |
size_t BlockSizeMax() const; |
size_t BlockSizePrudent() const; |
|
bool AddrMapInsert(const std::string& name, uint16_t addr); |
bool AddrMapErase(const std::string& name); |
bool AddrMapErase(uint16_t addr); |
void AddrMapClear(); |
|
const RlinkAddrMap& AddrMap() const; |
|
const Rstats& Stats() const; |
const Rstats& SndStats() const; |
const Rstats& RcvStats() const; |
164,12 → 156,6
static const uint16_t kSBCNTL_V_RLBMON= 14; //!< SBCNTL: rlbmon enable bit |
static const uint16_t kSBCNTL_V_RBMON = 13; //!< SBCNTL: rbmon enable bit |
|
// space beyond data for rblk = 8 :cmd(1) cnt(2) dcnt(2) stat(1) crc(2) |
// and wblk = 3 :cmd(1) cnt(2) |
static const uint16_t kRbufBlkDelta=16; //!< rbuf needed for rblk or wblk |
// 512 byte are enough space for a prudent amount of non-blk commands |
static const uint16_t kRbufPrudentDelta=512; //!< Rbuf space reserve |
|
// statistics counter indices |
enum stats { |
kStatNExec = 0, //!< Exec() calls |
184,11 → 170,11
kStatNInit, //!< init commands |
kStatNRblkWord, //!< words rcvd with rblk |
kStatNWblkWord, //!< words send with wblk |
kStatNTxPktByt, //!< Tx packet bytes send |
kStatNRxPktByt, //!< Rx packet bytes rcvd |
kStatNExpData, //!< Expect() for data defined |
kStatNExpDone, //!< Expect() for done defined |
kStatNExpStat, //!< Expect() for stat defined |
kStatNExpStat, //!< Expect() for stat defined" |
kStatNChkData, //!< expect data failed |
kStatNChkDone, //!< expect done failed |
kStatNChkStat, //!< expect stat failed |
kStatNSndOob, //!< SndOob() calls |
kStatNErrMiss, //!< decode: missing data |
226,8 → 212,6
boost::recursive_mutex fConnectMutex; //!< mutex to lock whole connect |
uint16_t fAttnNotiPatt; //!< attn notifier pattern |
double fTsLastAttnNoti; //!< time stamp last attn notify |
uint32_t fSysId; //!< SYSID of connected device |
size_t fRbufSize; //!< Rbuf size (in bytes) |
}; |
|
} // end namespace Retro |
/tools/src/librlink/RlinkConnect.ipp
1,6 → 1,6
// $Id: RlinkConnect.ipp 626 2015-01-03 14:41:37Z mueller $ |
// $Id: RlinkConnect.ipp 604 2014-11-16 22:33:09Z mueller $ |
// |
// Copyright 2011-2015 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 |
// the terms of the GNU General Public License as published by the Free |
13,7 → 13,6
// |
// Revision History: |
// Date Rev Version Comment |
// 2015-01-01 626 2.1 full rlink v4 implementation |
// 2013-03-05 495 1.2.1 add Exec() without emsg (will send emsg to LogFile) |
// 2013-02-23 492 1.2 use scoped_ptr for Port; Close allways allowed |
// use RlinkContext, add Context(), Exec(..., cntx) |
25,7 → 24,7
|
/*! |
\file |
\version $Id: RlinkConnect.ipp 626 2015-01-03 14:41:37Z mueller $ |
\version $Id: RlinkConnect.ipp 604 2014-11-16 22:33:09Z mueller $ |
\brief Implemenation (inline) of RlinkConnect. |
*/ |
|
89,35 → 88,7
|
//------------------------------------------+----------------------------------- |
//! FIXME_docs |
inline uint32_t RlinkConnect::SysId() const |
{ |
return fSysId; |
} |
|
//------------------------------------------+----------------------------------- |
//! FIXME_docs |
inline size_t RlinkConnect::RbufSize() const |
{ |
return fRbufSize; |
} |
|
//------------------------------------------+----------------------------------- |
//! FIXME_docs |
inline size_t RlinkConnect::BlockSizeMax() const |
{ |
return (fRbufSize-kRbufBlkDelta)/2; |
} |
|
//------------------------------------------+----------------------------------- |
//! FIXME_docs |
inline size_t RlinkConnect::BlockSizePrudent() const |
{ |
return (fRbufSize-kRbufPrudentDelta)/2; |
} |
|
//------------------------------------------+----------------------------------- |
//! FIXME_docs |
|
inline bool RlinkConnect::AddrMapInsert(const std::string& name, uint16_t addr) |
{ |
return fAddrMap.Insert(name, addr); |
/tools/src/librlink/RlinkPacketBufSnd.cpp
1,4 → 1,4
// $Id: RlinkPacketBufSnd.cpp 621 2014-12-26 21:20:05Z mueller $ |
// $Id: RlinkPacketBufSnd.cpp 606 2014-11-24 07:08:51Z mueller $ |
// |
// Copyright 2014- by Walter F.J. Mueller <W.F.J.Mueller@gsi.de> |
// |
13,7 → 13,6
// |
// Revision History: |
// Date Rev Version Comment |
// 2014-12-25 621 1.0.1 Reorganize packet send/revd stats |
// 2014-11-15 604 1.0 Initial version |
// 2014-11-02 600 0.1 First draft (re-organize PacketBuf for rlink v4) |
// --------------------------------------------------------------------------- |
20,7 → 19,7
|
/*! |
\file |
\version $Id: RlinkPacketBufSnd.cpp 621 2014-12-26 21:20:05Z mueller $ |
\version $Id: RlinkPacketBufSnd.cpp 606 2014-11-24 07:08:51Z mueller $ |
\brief Implemenation of class RlinkPacketBuf. |
*/ |
|
50,7 → 49,6
: fRawBuf() |
{ |
// Statistic setup |
fStats.Define(kStatNTxPktByt, "NTxPktByt", "Tx packet bytes send"); |
fStats.Define(kStatNTxEsc, "NTxEsc", "Tx data escapes"); |
} |
|
110,9 → 108,8
PutRawEsc(kEcEop); // <EOP> |
fStats.Inc(kStatNTxEsc , double(nesc)); |
|
bool sndok = SndRaw(port, emsg); |
if (sndok) fStats.Inc(kStatNTxPktByt, double(PktSize())); |
return sndok; |
return SndRaw(port, emsg); |
|
} |
|
//------------------------------------------+----------------------------------- |
/tools/src/librlink/RlinkPacketBufSnd.hpp
1,4 → 1,4
// $Id: RlinkPacketBufSnd.hpp 621 2014-12-26 21:20:05Z mueller $ |
// $Id: RlinkPacketBufSnd.hpp 606 2014-11-24 07:08:51Z mueller $ |
// |
// Copyright 2014- by Walter F.J. Mueller <W.F.J.Mueller@gsi.de> |
// |
13,7 → 13,6
// |
// Revision History: |
// Date Rev Version Comment |
// 2014-12-25 621 1.0.1 Reorganize packet send/revd stats |
// 2014-11-14 604 1.0 Initial version |
// 2014-11-02 600 0.1 First draft (re-organize PacketBuf for rlink v4) |
// --------------------------------------------------------------------------- |
21,7 → 20,7
|
/*! |
\file |
\version $Id: RlinkPacketBufSnd.hpp 621 2014-12-26 21:20:05Z mueller $ |
\version $Id: RlinkPacketBufSnd.hpp 606 2014-11-24 07:08:51Z mueller $ |
\brief Declaration of class RlinkPacketBufSnd. |
*/ |
|
62,8 → 61,7
|
// statistics counter indices |
enum stats { |
kStatNTxPktByt=0, //!< Tx packet bytes send |
kStatNTxEsc //!< Tx data escapes |
kStatNTxEsc = 0 |
}; |
|
protected: |
/tools/src/librlink/RlinkServer.cpp
1,4 → 1,4
// $Id: RlinkServer.cpp 628 2015-01-04 16:22:09Z mueller $ |
// $Id: RlinkServer.cpp 611 2014-12-10 23:23:58Z mueller $ |
// |
// Copyright 2013-2014 by Walter F.J. Mueller <W.F.J.Mueller@gsi.de> |
// |
13,8 → 13,6
// |
// Revision History: |
// Date Rev Version Comment |
// 2014-12-30 625 2.1 adopt to Rlink V4 attn logic |
// 2014-12-21 617 2.0.1 use kStat_M_RbTout for rbus timeout |
// 2014-12-11 611 2.0 re-organize for rlink v4 |
// 2013-05-01 513 1.0.2 fTraceLevel now uint32_t |
// 2013-04-21 509 1.0.1 add Resume(), reorganize server start handling |
24,7 → 22,7
|
/*! |
\file |
\version $Id: RlinkServer.cpp 628 2015-01-04 16:22:09Z mueller $ |
\version $Id: RlinkServer.cpp 611 2014-12-10 23:23:58Z mueller $ |
\brief Implemenation of RlinkServer. |
*/ |
|
67,9 → 65,7
fStats() |
{ |
fContext.SetStatus(0, |
~(RlinkCommand::kStat_M_RbTout | |
RlinkCommand::kStat_M_RbNak | |
RlinkCommand::kStat_M_RbErr)); |
~(RlinkCommand::kStat_M_RbNak|RlinkCommand::kStat_M_RbErr)); |
|
fELoop.AddPollHandler(boost::bind(&RlinkServer::WakeupHandler, this, _1), |
fWakeupEvent, POLLIN); |
79,9 → 75,7
fStats.Define(kStatNEloopPoll,"NEloopPoll","event loop turns (poll)"); |
fStats.Define(kStatNWakeupEvt,"NWakeupEvt","Wakeup events"); |
fStats.Define(kStatNRlinkEvt, "NRlinkEvt", "Rlink data events"); |
fStats.Define(kStatNAttnHdl ,"NAttnHdl" ,"Attn handler calls"); |
fStats.Define(kStatNAttnNoti ,"NAttnNoti" ,"Attn notifies processed"); |
fStats.Define(kStatNAttnHarv ,"NAttnHarv" ,"Attn handler restarts"); |
fStats.Define(kStatNAttnRead, "NAttnRead", "Attn read commands"); |
fStats.Define(kStatNAttn00, "NAttn00", "Attn bit 0 set"); |
fStats.Define(kStatNAttn01, "NAttn01", "Attn bit 1 set"); |
fStats.Define(kStatNAttn02, "NAttn02", "Attn bit 2 set"); |
153,36 → 147,6
//------------------------------------------+----------------------------------- |
//! FIXME_docs |
|
void RlinkServer::GetAttnInfo(AttnArgs& args, RlinkCommandList& clist) |
{ |
RlinkCommand& cmd0 = clist[0]; |
if (cmd0.Command() != RlinkCommand::kCmdAttn) |
throw Rexception("RlinkServer::GetAttnInfo", "clist did't start with attn"); |
|
RerrMsg emsg; |
if (!Exec(clist, emsg)) |
throw Rexception("RlinkServer::GetAttnInfo", "Exec() failed: ", emsg); |
|
args.fAttnHarvest = cmd0.Data(); |
args.fHarvestDone = true; |
|
return; |
} |
|
//------------------------------------------+----------------------------------- |
//! FIXME_docs |
|
void RlinkServer::GetAttnInfo(AttnArgs& args) |
{ |
RlinkCommandList clist; |
clist.AddAttn(); |
GetAttnInfo(args, clist); |
return; |
} |
|
//------------------------------------------+----------------------------------- |
//! FIXME_docs |
|
void RlinkServer::RemoveAttnHandler(uint16_t mask, void* cdata) |
{ |
boost::lock_guard<RlinkConnect> lock(*fspConn); |
303,9 → 267,9
// only called under lock !! |
if (apat & fAttnNotiPatt) { |
RlogMsg lmsg(LogFile(), 'W'); |
lmsg << "SignalAttnNotify: redundant notify:" |
<< " have=" << RosPrintBvi(fAttnNotiPatt,16) |
<< " apat=" << RosPrintBvi(apat,16); |
lmsg << "SignalAttnNotify: redundant notify: " |
<< " have=" << RosPrintBvi(fAttnNotiPatt,16) |
<< " apat=" << RosPrintBvi(apat,16); |
} |
fAttnNotiPatt |= apat; |
Wakeup(); |
434,60 → 398,58
|
void RlinkServer::CallAttnHandler() |
{ |
fStats.Inc(kStatNAttnHdl); |
|
// if notifier pending, transfer it to current attn pattern |
// FIXME_code: this is still V3 logic |
// notifier pattern is ignored, only that one was received is used |
if (fAttnNotiPatt) { |
boost::lock_guard<RlinkConnect> lock(*fspConn); |
fStats.Inc(kStatNAttnNoti); |
fAttnPatt |= fAttnNotiPatt; |
uint16_t onoti = fAttnNotiPatt; |
|
// Clear fAttnNotiPatt before clist is issued ! This avoids a race |
// in case the attn read is followed immediately by a notify which |
// is signaled during Exec(). |
fAttnNotiPatt = 0; |
} |
|
// do stats for pending attentions |
for (size_t i=0; i<16; i++) { |
if (fAttnPatt & (uint16_t(1)<<i)) fStats.Inc(kStatNAttn00+i); |
RlinkCommandList clist; |
clist.AddAttn(); |
fStats.Inc(kStatNAttnRead); |
Exec(clist); |
// FIXME_code: handle errors: bool ok = |
uint16_t nattn = clist[0].Data(); |
fAttnPatt |= nattn; |
|
if (onoti & (~nattn)) { // bits in notify not in attn ? |
RlogMsg lmsg(LogFile(), 'W'); |
lmsg << "CallAttnHandler: missing lams in attn: " |
<< " attn=" << RosPrintBvi(nattn,16) |
<< " noti=" << RosPrintBvi(onoti,16); |
} |
|
for (size_t i=0; i<16; i++) { |
if (nattn & (uint16_t(1)<<i)) fStats.Inc(kStatNAttn00+i); |
} |
} |
|
// now call handlers, multiple handlers may be called for one attn bit |
uint16_t hnext = 0; |
|
// multiple handlers may be called for one attn bit |
uint16_t hdone = 0; |
for (size_t i=0; i<fAttnDsc.size(); i++) { |
uint16_t hmatch = fAttnPatt & fAttnDsc[i].fId.fMask; |
if (hmatch) { |
AttnArgs args(fAttnPatt, fAttnDsc[i].fId.fMask); |
// FIXME_code: return code not used, yet |
boost::lock_guard<RlinkConnect> lock(*fspConn); |
|
// FIXME_code: return code not used, yet |
fAttnDsc[i].fHandler(args); |
if (!args.fHarvestDone) |
Rexception("RlinkServer::CallAttnHandler()", |
"Handler didn't set fHarvestDone"); |
|
uint16_t hnew = args.fAttnHarvest & ~fAttnDsc[i].fId.fMask; |
hnext |= hnew; |
hdone |= hmatch; |
} |
} |
fAttnPatt &= ~hdone; // clear handled bits |
|
// if there are any unhandled attenions, do default handling which will |
// ensure that attention harvest is done |
if (fAttnPatt) { |
AttnArgs args(fAttnPatt, fAttnPatt); |
GetAttnInfo(args); |
hnext |= args.fAttnHarvest & ~fAttnPatt; |
if (fTraceLevel>0) { |
RlogMsg lmsg(LogFile(), 'I'); |
lmsg << "eloop: unhandled attn, mask=" |
<< RosPrintBvi(fAttnPatt,16) << endl; |
} |
if (fAttnPatt && fTraceLevel>0) { |
RlogMsg lmsg(LogFile(), 'I'); |
lmsg << "eloop: unhandled attn, mask=" |
<< RosPrintBvi(fAttnPatt,16) << endl; |
} |
|
// finally replace current attn pattern by the attentions found during |
// harvest and not yet handled |
fAttnPatt = hnext; |
if (fAttnPatt) fStats.Inc(kStatNAttnHarv); |
fAttnPatt = 0; |
|
return; |
} |
/tools/src/librlink/RlinkServer.hpp
1,4 → 1,4
// $Id: RlinkServer.hpp 625 2014-12-30 16:17:45Z mueller $ |
// $Id: RlinkServer.hpp 607 2014-11-30 20:02:48Z mueller $ |
// |
// Copyright 2013-2014 by Walter F.J. Mueller <W.F.J.Mueller@gsi.de> |
// |
13,7 → 13,6
// |
// Revision History: |
// Date Rev Version Comment |
// 2014-12-30 625 2.1 adopt to Rlink V4 attn logic |
// 2014-11-30 607 2.0 re-organize for rlink v4 |
// 2013-05-01 513 1.0.2 fTraceLevel now uint32_t |
// 2013-04-21 509 1.0.1 add Resume(), reorganize server start handling |
23,7 → 22,7
|
/*! |
\file |
\version $Id: RlinkServer.hpp 625 2014-12-30 16:17:45Z mueller $ |
\version $Id: RlinkServer.hpp 607 2014-11-30 20:02:48Z mueller $ |
\brief Declaration of class \c RlinkServer. |
*/ |
|
53,17 → 52,19
public: |
|
struct AttnArgs { |
uint16_t fAttnPatt; //<! in: current attention pattern |
uint16_t fAttnMask; //<! in: handler attention mask |
uint16_t fAttnHarvest; //<! out: harvested attentions |
bool fHarvestDone; //<! out: set true when harvested |
uint16_t fAttnPatt; |
uint16_t fAttnMask; |
RlinkCommandList* fpClist; |
size_t fOffset; |
AttnArgs(); |
AttnArgs(uint16_t apatt, uint16_t amask); |
AttnArgs(uint16_t apatt, uint16_t amask, |
RlinkCommandList* pclist, size_t off); |
}; |
|
typedef ReventLoop::pollhdl_t pollhdl_t; |
typedef boost::function<int(AttnArgs&)> attnhdl_t; |
typedef boost::function<int()> actnhdl_t; |
typedef ReventLoop::pollhdl_t pollhdl_t; |
typedef boost::function<int(const AttnArgs&)> attnhdl_t; |
typedef boost::function<int()> actnhdl_t; |
|
explicit RlinkServer(); |
virtual ~RlinkServer(); |
80,11 → 81,10
void AddAttnHandler(const attnhdl_t& attnhdl, uint16_t mask, |
void* cdata = 0); |
void RemoveAttnHandler(uint16_t mask, void* cdata = 0); |
void GetAttnInfo(AttnArgs& args, RlinkCommandList& clist); |
void GetAttnInfo(AttnArgs& args); |
|
void QueueAction(const actnhdl_t& actnhdl); |
|
|
void AddPollHandler(const pollhdl_t& pollhdl, |
int fd, short events=POLLIN); |
bool TestPollHandler(int fd, short events=POLLIN); |
115,9 → 115,7
kStatNEloopPoll, //!< event loop turns (poll) |
kStatNWakeupEvt, //!< Wakeup events |
kStatNRlinkEvt, //!< Rlink data events |
kStatNAttnHdl, //<! Attn handler calls |
kStatNAttnNoti, //<! Attn notifies processed |
kStatNAttnHarv, //<! Attn handler restarts |
kStatNAttnRead, //!< Attn read commands |
kStatNAttn00, //!< Attn bit 0 set |
kStatNAttn01, //!< Attn bit 1 set |
kStatNAttn02, //!< Attn bit 2 set |
/tools/src/librlink/RlinkServer.ipp
1,4 → 1,4
// $Id: RlinkServer.ipp 625 2014-12-30 16:17:45Z mueller $ |
// $Id: RlinkServer.ipp 610 2014-12-09 22:44:43Z mueller $ |
// |
// Copyright 2013-2014 by Walter F.J. Mueller <W.F.J.Mueller@gsi.de> |
// |
13,7 → 13,6
// |
// Revision History: |
// Date Rev Version Comment |
// 2014-12-30 625 2.1 adopt to Rlink V4 attn logic |
// 2014-11-30 607 2.0 re-organize for rlink v4 |
// 2013-05-01 513 1.0.1 fTraceLevel now uint32_t |
// 2013-03-06 495 1.0 Initial version |
22,7 → 21,7
|
/*! |
\file |
\version $Id: RlinkServer.ipp 625 2014-12-30 16:17:45Z mueller $ |
\version $Id: RlinkServer.ipp 610 2014-12-09 22:44:43Z mueller $ |
\brief Implemenation (inline) of RlinkServer. |
*/ |
|
109,6 → 108,7
return !fActnList.empty(); |
} |
|
|
//==========================================+=================================== |
// AttnArgs sub class |
|
123,8 → 123,8
inline RlinkServer::AttnArgs::AttnArgs() |
: fAttnPatt(0), |
fAttnMask(0), |
fAttnHarvest(0), |
fHarvestDone(false) |
fpClist(0), |
fOffset(0) |
{} |
|
//------------------------------------------+----------------------------------- |
133,10 → 133,21
inline RlinkServer::AttnArgs::AttnArgs(uint16_t apatt, uint16_t amask) |
: fAttnPatt(apatt), |
fAttnMask(amask), |
fAttnHarvest(0), |
fHarvestDone(false) |
fpClist(0), |
fOffset(0) |
{} |
|
//------------------------------------------+----------------------------------- |
//! Constructor |
|
inline RlinkServer::AttnArgs::AttnArgs(uint16_t apatt, uint16_t amask, |
RlinkCommandList* pclist, size_t offset) |
: fAttnPatt(apatt), |
fAttnMask(amask), |
fpClist(pclist), |
fOffset(offset) |
{} |
|
//==========================================+=================================== |
// AttnId sub class |
|
/tools/src/librlink/RlinkCommand.cpp
1,6 → 1,6
// $Id: RlinkCommand.cpp 628 2015-01-04 16:22:09Z mueller $ |
// $Id: RlinkCommand.cpp 609 2014-12-07 19:35:25Z mueller $ |
// |
// Copyright 2011-2015 by Walter F.J. Mueller <W.F.J.Mueller@gsi.de> |
// Copyright 2011-2014 by Walter F.J. Mueller <W.F.J.Mueller@gsi.de> |
// |
// 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 |
13,9 → 13,6
// |
// Revision History: |
// Date Rev Version Comment |
// 2015-01-04 628 1.2.3 Print(): adopt large nblk; |
// 2014-12-21 617 1.2.2 use kStat_M_RbTout for rbus timeout |
// 2014-12-20 616 1.2.1 Print(): display BlockDone; add kFlagChkDone |
// 2014-12-06 609 1.2 new rlink v4 iface |
// 2014-08-15 583 1.1 rb_mreq addr now 16 bit |
// 2013-05-06 495 1.0.2 add RlinkContext to Print() args |
26,7 → 23,7
|
/*! |
\file |
\version $Id: RlinkCommand.cpp 628 2015-01-04 16:22:09Z mueller $ |
\version $Id: RlinkCommand.cpp 609 2014-12-07 19:35:25Z mueller $ |
\brief Implemenation of class RlinkCommand. |
*/ |
|
73,13 → 70,11
const uint32_t RlinkCommand::kFlagErrDec; |
const uint32_t RlinkCommand::kFlagChkStat; |
const uint32_t RlinkCommand::kFlagChkData; |
const uint32_t RlinkCommand::kFlagChkDone; |
|
const uint8_t RlinkCommand::kStat_M_Stat; |
const uint8_t RlinkCommand::kStat_V_Stat; |
const uint8_t RlinkCommand::kStat_B_Stat; |
const uint8_t RlinkCommand::kStat_M_Attn; |
const uint8_t RlinkCommand::kStat_M_RbTout; |
const uint8_t RlinkCommand::kStat_M_RbNak; |
const uint8_t RlinkCommand::kStat_M_RbErr; |
|
265,7 → 260,7
// separator + command mnemonic, code and flags |
// separator: ++ first in packet |
// -- non-first in packet |
// ?? FIXME_code: separator for labo canceled commands |
// ?? FIXME: separator for labo canceled commands |
const char* sep = "??"; |
if (TestFlagAny(kFlagPktBeg)) { |
sep = "++"; |
314,23 → 309,8
} |
} |
|
// block length field |
if (ccode== kCmdRblk || ccode==kCmdWblk) { |
os << " n=" << RosPrintf(BlockSize(), "d", 4) |
<< (BlockSize()==BlockDone() ? "=" : ">") |
<< RosPrintf(BlockDone(), "d", 4); |
if (fpExpect) { |
if (TestFlagAny(kFlagChkDone)) { |
os << "#"; |
os << " N=" << RosPrintf(fpExpect->DoneValue(), "d", 4); |
} else if (fpExpect->DoneIsChecked()) { |
os << "!"; |
} else { |
os << " "; |
} |
} else { |
os << " "; |
} |
os << " n=" << RosPrintf(BlockSize(), "d", 3); |
} |
|
// status field |
348,9 → 328,9
} |
|
if (TestFlagAny(kFlagDone)) { |
if (TestFlagAny(kFlagChkStat|kFlagChkData|kFlagChkDone)) { |
if (TestFlagAny(kFlagChkStat|kFlagChkData)) { |
os << " FAIL: " |
<< Rtools::Flags2String(fFlags&(kFlagChkStat|kFlagChkData|kFlagChkDone), |
<< Rtools::Flags2String(fFlags&(kFlagChkStat|kFlagChkData), |
FlagNames(),','); |
} else { |
os << " OK"; |
374,7 → 354,7
const uint16_t* pdat = BlockPointer(); |
|
for (size_t i=0; i<size; i++) { |
if (i%ncol == 0) os << "\n " << RosPrintf(i,"d",4) << ": "; |
if (i%ncol == 0) os << "\n " << RosPrintf(i,"d",3) << ": "; |
os << RosPrintBvi(pdat[i], dbase); |
if (dcheck) { |
if (!fpExpect->BlockCheck(i, pdat[i])) { |
393,7 → 373,7
const vector<uint16_t>& emskvec = fpExpect->BlockMask(); |
for (size_t i=0; i<size; i++) { |
if (!fpExpect->BlockCheck(i, pdat[i])) { |
os << "\n FAIL d[" << RosPrintf(i,"d",4) << "]: " |
os << "\n FAIL d[" << RosPrintf(i,"d",3) << "]: " |
<< RosPrintBvi(pdat[i], dbase) << "#" |
<< " D=" << RosPrintBvi(evalvec[i], dbase); |
if (i < emskvec.size() && emskvec[i]!=0x0000) { |
409,7 → 389,7
size_t size = BlockSize(); |
size_t ncol = (80-4-5)/(dwidth+2); |
for (size_t i=0; i<size; i++) { |
if (i%ncol == 0) os << "\n " << RosPrintf(i,"d",4) << ": "; |
if (i%ncol == 0) os << "\n " << RosPrintf(i,"d",3) << ": "; |
os << RosPrintBvi(pdat[i], dbase) << " "; |
} |
} |
474,7 → 454,6
// use msb first order, will also be printing order |
static Retro::RflagName fnam[] = { |
{kFlagChkData, "ChkData"}, |
{kFlagChkDone, "ChkDone"}, |
{kFlagChkStat, "ChkStat"}, |
{kFlagErrDec, "ErrDec"}, |
{kFlagErrNak, "ErrNak"}, |
/tools/src/librlink/RlinkPacketBufRcv.cpp
1,4 → 1,4
// $Id: RlinkPacketBufRcv.cpp 621 2014-12-26 21:20:05Z mueller $ |
// $Id: RlinkPacketBufRcv.cpp 607 2014-11-30 20:02:48Z mueller $ |
// |
// Copyright 2014- by Walter F.J. Mueller <W.F.J.Mueller@gsi.de> |
// |
13,7 → 13,6
// |
// Revision History: |
// Date Rev Version Comment |
// 2014-12-25 621 1.0.1 Reorganize packet send/revd stats |
// 2014-11-30 607 1.0 Initial version |
// 2014-11-02 600 0.1 First draft (re-organize PacketBuf for rlink v4) |
// --------------------------------------------------------------------------- |
20,7 → 19,7
|
/*! |
\file |
\version $Id: RlinkPacketBufRcv.cpp 621 2014-12-26 21:20:05Z mueller $ |
\version $Id: RlinkPacketBufRcv.cpp 607 2014-11-30 20:02:48Z mueller $ |
\brief Implemenation of class RlinkPacketBuf. |
*/ |
|
56,7 → 55,6
fDropData() |
{ |
// Statistic setup |
fStats.Define(kStatNRxPktByt, "NRxPktByt", "Rx packet bytes rcvd"); |
fStats.Define(kStatNRxDrop, "NRxDrop", "Rx bytes dropped"); |
fStats.Define(kStatNRxSop, "NRxSop", "Rx SOP commas seen"); |
fStats.Define(kStatNRxEop, "NRxEop", "Rx EOP commas seen"); |
274,7 → 272,6
case kEcEop: // EOP seen |
SetFlagBit(kFlagEopSeen); // -> set eop and return |
fRcvState = kRcvDone; |
fStats.Inc(kStatNRxPktByt, double(PktSize())); |
return; |
|
case kEcNak: // NAK seen |
/tools/src/librlink/RlinkCommand.hpp
1,4 → 1,4
// $Id: RlinkCommand.hpp 617 2014-12-21 14:18:53Z mueller $ |
// $Id: RlinkCommand.hpp 609 2014-12-07 19:35:25Z mueller $ |
// |
// Copyright 2011-2014 by Walter F.J. Mueller <W.F.J.Mueller@gsi.de> |
// |
13,8 → 13,6
// |
// Revision History: |
// Date Rev Version Comment |
// 2014-12-21 617 1.2.2 use kStat_M_RbTout for rbus timeout |
// 2014-12-20 616 1.2.1 add kFlagChkDone |
// 2014-12-06 609 1.2 new rlink v4 iface |
// 2013-05-06 495 1.0.1 add RlinkContext to Print() args; drop oper<<() |
// 2011-03-27 374 1.0 Initial version |
24,7 → 22,7
|
/*! |
\file |
\version $Id: RlinkCommand.hpp 617 2014-12-21 14:18:53Z mueller $ |
\version $Id: RlinkCommand.hpp 609 2014-12-07 19:35:25Z mueller $ |
\brief Declaration of class RlinkCommand. |
*/ |
|
126,15 → 124,13
|
static const uint32_t kFlagChkStat= 1u<<12; //!< stat expect check failed |
static const uint32_t kFlagChkData= 1u<<13; //!< data expect check failed |
static const uint32_t kFlagChkDone= 1u<<14; //!< done expect check failed |
|
static const uint8_t kStat_M_Stat = 0xf0; //!< stat: external stat bits |
static const uint8_t kStat_V_Stat = 4; |
static const uint8_t kStat_B_Stat = 0x0f; |
static const uint8_t kStat_M_Attn = kBBit03;//!< stat: attn flag set |
static const uint8_t kStat_M_RbTout = kBBit02;//!< stat: rbtout flag set |
static const uint8_t kStat_M_RbNak = kBBit01;//!< stat: rbnak flag set |
static const uint8_t kStat_M_RbErr = kBBit00;//!< stat: rberr flag set |
static const uint8_t kStat_M_Stat = 0xf0; //!< stat: external stat bits |
static const uint8_t kStat_V_Stat = 4; |
static const uint8_t kStat_B_Stat = 0x0f; |
static const uint8_t kStat_M_Attn = kBBit03;//!< stat: attn flags set |
static const uint8_t kStat_M_RbNak = kBBit01;//!< stat: attn flags set |
static const uint8_t kStat_M_RbErr = kBBit00;//!< stat: attn flags set |
|
protected: |
void SetCmdSimple(uint8_t cmd, uint16_t addr, uint16_t data); |
/tools/src/librlink/RlinkPacketBufRcv.hpp
1,4 → 1,4
// $Id: RlinkPacketBufRcv.hpp 621 2014-12-26 21:20:05Z mueller $ |
// $Id: RlinkPacketBufRcv.hpp 607 2014-11-30 20:02:48Z mueller $ |
// |
// Copyright 2014- by Walter F.J. Mueller <W.F.J.Mueller@gsi.de> |
// |
13,7 → 13,6
// |
// Revision History: |
// Date Rev Version Comment |
// 2014-12-25 621 1.0.1 Reorganize packet send/revd stats |
// 2014-11-30 607 1.0 Initial version |
// 2014-11-02 600 0.1 First draft (re-organize PacketBuf for rlink v4) |
// --------------------------------------------------------------------------- |
21,7 → 20,7
|
/*! |
\file |
\version $Id: RlinkPacketBufRcv.hpp 621 2014-12-26 21:20:05Z mueller $ |
\version $Id: RlinkPacketBufRcv.hpp 607 2014-11-30 20:02:48Z mueller $ |
\brief Declaration of class RlinkPacketBuf. |
*/ |
|
64,8 → 63,7
|
// statistics counter indices |
enum stats { |
kStatNRxPktByt=0, //!< Rx packet bytes rcvd |
kStatNRxDrop, //!< Rx bytes dropped |
kStatNRxDrop=0, //!< Rx bytes dropped |
kStatNRxSop, //!< Rx SOP commas seen |
kStatNRxEop, //!< Rx EOP commas seen |
kStatNRxNak, //!< Rx NAK commas seen |
/tools/src/librlink/RlinkConnect.cpp
1,6 → 1,6
// $Id: RlinkConnect.cpp 626 2015-01-03 14:41:37Z mueller $ |
// $Id: RlinkConnect.cpp 611 2014-12-10 23:23:58Z mueller $ |
// |
// Copyright 2011-2015 by Walter F.J. Mueller <W.F.J.Mueller@gsi.de> |
// Copyright 2011-2014 by Walter F.J. Mueller <W.F.J.Mueller@gsi.de> |
// |
// 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 |
13,7 → 13,6
// |
// Revision History: |
// Date Rev Version Comment |
// 2015-01-01 626 2.1 full rlink v4 implementation |
// 2014-12-10 611 2.0 re-organize for rlink v4 |
// 2014-08-26 587 1.5 start accept rlink v4 protocol (partially...) |
// 2014-08-15 583 1.4 rb_mreq addr now 16 bit |
33,7 → 32,7
|
/*! |
\file |
\version $Id: RlinkConnect.cpp 626 2015-01-03 14:41:37Z mueller $ |
\version $Id: RlinkConnect.cpp 611 2014-12-10 23:23:58Z mueller $ |
\brief Implemenation of RlinkConnect. |
*/ |
|
83,9 → 82,6
const uint16_t RlinkConnect::kSBCNTL_V_RLBMON; |
const uint16_t RlinkConnect::kSBCNTL_V_RBMON; |
|
const uint16_t RlinkConnect::kRbufBlkDelta; |
const uint16_t RlinkConnect::kRbufPrudentDelta; |
|
//------------------------------------------+----------------------------------- |
//! Default constructor |
|
101,9 → 97,7
fspLog(new RlogFile(&cout, "<cout>")), |
fConnectMutex(), |
fAttnNotiPatt(0), |
fTsLastAttnNoti(-1), |
fSysId(0xffffffff), |
fRbufSize(0) |
fTsLastAttnNoti(-1) |
{ |
for (size_t i=0; i<8; i++) fSeqNumber[i] = 0; |
|
120,11 → 114,11
fStats.Define(kStatNInit, "NInit", "init commands"); |
fStats.Define(kStatNRblkWord, "NRblkWord", "words rcvd with rblk"); |
fStats.Define(kStatNWblkWord, "NWblkWord", "words send with wblk"); |
fStats.Define(kStatNTxPktByt, "NTxPktByt", "Tx packet bytes send"); |
fStats.Define(kStatNRxPktByt, "NRxPktByt", "Rx packet bytes rcvd"); |
fStats.Define(kStatNExpData, "NExpData", "Expect() for data defined"); |
fStats.Define(kStatNExpDone, "NExpDone", "Expect() for done defined"); |
fStats.Define(kStatNExpStat, "NExpStat", "Expect() for stat defined"); |
fStats.Define(kStatNChkData, "NChkData", "expect data failed"); |
fStats.Define(kStatNChkDone, "NChkData", "expect done failed"); |
fStats.Define(kStatNChkStat, "NChkStat", "expect stat failed"); |
fStats.Define(kStatNSndOob, "NSndOob", "SndOob() calls"); |
fStats.Define(kStatNErrMiss, "NErrMiss", "decode: missing data"); |
153,24 → 147,6
|
fpPort->SetLogFile(fspLog); |
fpPort->SetTraceLevel(fLogOpts.tracelevel); |
|
RlinkCommandList clist; |
clist.AddRreg(kRbaddr_RLSTAT); |
clist.AddRreg(kRbaddr_RLID1); |
clist.AddRreg(kRbaddr_RLID0); |
|
if (!Exec(clist, emsg)) { |
Close(); |
return false; |
} |
|
uint16_t rlstat = clist[0].Data(); |
uint16_t rlid1 = clist[1].Data(); |
uint16_t rlid0 = clist[2].Data(); |
|
fRbufSize = size_t(1) << (10 + (rlstat & kRLSTAT_M_RBSize)); |
fSysId = uint32_t(rlid1)<<16 | uint32_t(rlid0); |
|
return true; |
} |
|
323,8 → 299,7
RlinkCommand& cmd = clist[i]; |
|
bool checkfound = cmd.TestFlagAny(RlinkCommand::kFlagChkStat | |
RlinkCommand::kFlagChkData | |
RlinkCommand::kFlagChkDone); |
RlinkCommand::kFlagChkData); |
bool errorfound = cmd.TestFlagAny(RlinkCommand::kFlagErrNak | |
RlinkCommand::kFlagErrDec); |
checkseen |= checkfound; |
596,6 → 571,7
|
// FIXME_code: handle send fail properly; |
if (!fSndPkt.SndPacket(fpPort.get(), emsg)) return false; |
fStats.Inc(kStatNTxPktByt, double(fSndPkt.PktSize())); |
|
// FIXME_code: handle recoveries |
// FIXME_code: use proper value for timeout |
801,13 → 777,8
// expect handling |
if (cmd.Expect()) { // expect object attached ? |
RlinkCommandExpect& expect = *cmd.Expect(); |
if (ccode==RlinkCommand::kCmdRblk || |
ccode==RlinkCommand::kCmdWblk) { |
if (expect.BlockValue().size()>0) fStats.Inc(kStatNExpData); |
if (expect.DoneIsChecked()) fStats.Inc(kStatNExpDone); |
} else { |
if (expect.DataIsChecked()) fStats.Inc(kStatNExpData); |
} |
if (expect.DataIsChecked() || |
expect.BlockValue().size()>0) fStats.Inc(kStatNExpData); |
if (expect.StatusIsChecked()) fStats.Inc(kStatNExpStat); |
|
if (ccode==RlinkCommand::kCmdRreg || |
824,13 → 795,6
cmd.SetFlagBit(RlinkCommand::kFlagChkData); |
} |
} |
if (ccode==RlinkCommand::kCmdRblk || |
ccode==RlinkCommand::kCmdWblk) { |
if (!expect.DoneCheck(cmd.BlockDone())) { |
fStats.Inc(kStatNChkDone); |
cmd.SetFlagBit(RlinkCommand::kFlagChkDone); |
} |
} |
if (!expect.StatusCheck(cmd.Status())) { |
fStats.Inc(kStatNChkStat); |
cmd.SetFlagBit(RlinkCommand::kFlagChkStat); |
/tools/src/librlink/RlinkCommandExpect.hpp
1,6 → 1,6
// $Id: RlinkCommandExpect.hpp 616 2014-12-21 10:09:25Z mueller $ |
// $Id: RlinkCommandExpect.hpp 492 2013-02-24 22:14:47Z mueller $ |
// |
// Copyright 2011-2014 by Walter F.J. Mueller <W.F.J.Mueller@gsi.de> |
// Copyright 2011- by Walter F.J. Mueller <W.F.J.Mueller@gsi.de> |
// |
// 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 |
13,7 → 13,6
// |
// Revision History: |
// Date Rev Version Comment |
// 2014-12-20 616 1.1 add Done count methods (for rblk/wblk) |
// 2011-03-12 368 1.0 Initial version |
// 2011-01-15 355 0.1 First draft |
// --------------------------------------------------------------------------- |
21,7 → 20,7
|
/*! |
\file |
\version $Id: RlinkCommandExpect.hpp 616 2014-12-21 10:09:25Z mueller $ |
\version $Id: RlinkCommandExpect.hpp 492 2013-02-24 22:14:47Z mueller $ |
\brief Declaration of class RlinkCommandExpect. |
*/ |
|
49,7 → 48,6
|
void SetStatus(uint8_t stat, uint8_t statmsk=0); |
void SetData(uint16_t data, uint16_t datamsk=0); |
void SetDone(uint16_t done, bool check=true); |
void SetBlock(const std::vector<uint16_t>& block); |
void SetBlock(const std::vector<uint16_t>& block, |
const std::vector<uint16_t>& blockmsk); |
58,19 → 56,16
uint8_t StatusMask() const; |
uint16_t DataValue() const; |
uint16_t DataMask() const; |
uint16_t DoneValue() const; |
const std::vector<uint16_t>& BlockValue() const; |
const std::vector<uint16_t>& BlockMask() const; |
|
bool StatusCheck(uint8_t val) const; |
bool DataCheck(uint16_t val) const; |
bool DoneCheck(uint16_t val) const; |
bool BlockCheck(size_t ind, uint16_t val) const; |
size_t BlockCheck(const uint16_t* pval, size_t size) const; |
|
bool StatusIsChecked() const; |
bool DataIsChecked() const; |
bool DoneIsChecked() const; |
bool BlockIsChecked(size_t ind) const; |
|
void Dump(std::ostream& os, int ind=0, const char* text=0) const; |
/tools/src/librlink/RlinkCommandExpect.ipp
1,6 → 1,6
// $Id: RlinkCommandExpect.ipp 616 2014-12-21 10:09:25Z mueller $ |
// $Id: RlinkCommandExpect.ipp 488 2013-02-16 18:49:47Z mueller $ |
// |
// Copyright 2011-2014 by Walter F.J. Mueller <W.F.J.Mueller@gsi.de> |
// Copyright 2011- by Walter F.J. Mueller <W.F.J.Mueller@gsi.de> |
// |
// 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 |
13,7 → 13,6
// |
// Revision History: |
// Date Rev Version Comment |
// 2014-12-20 616 1.1 add Done count methods (for rblk/wblk) |
// 2011-03-12 368 1.0 Initial version |
// 2011-01-15 355 0.1 First draft |
// --------------------------------------------------------------------------- |
20,7 → 19,7
|
/*! |
\file |
\version $Id: RlinkCommandExpect.ipp 616 2014-12-21 10:09:25Z mueller $ |
\version $Id: RlinkCommandExpect.ipp 488 2013-02-16 18:49:47Z mueller $ |
\brief Implemenation (inline) of class RlinkCommandExpect. |
*/ |
|
50,16 → 49,6
//------------------------------------------+----------------------------------- |
//! FIXME_docs |
|
inline void RlinkCommandExpect::SetDone(uint16_t done, bool check) |
{ |
fDataVal = done; |
fDataMsk = check ? 0 : 0xffff; |
return; |
} |
|
//------------------------------------------+----------------------------------- |
//! FIXME_docs |
|
inline void RlinkCommandExpect::SetBlock(const std::vector<uint16_t>& block) |
{ |
fBlockVal = block; |
113,14 → 102,6
//------------------------------------------+----------------------------------- |
//! FIXME_docs |
|
inline uint16_t RlinkCommandExpect::DoneValue() const |
{ |
return fDataVal; |
} |
|
//------------------------------------------+----------------------------------- |
//! FIXME_docs |
|
inline const std::vector<uint16_t>& RlinkCommandExpect::BlockValue() const |
{ |
return fBlockVal; |
153,14 → 134,6
//------------------------------------------+----------------------------------- |
//! FIXME_docs |
|
inline bool RlinkCommandExpect::DoneCheck(uint16_t val) const |
{ |
return !DoneIsChecked() || val == fDataVal; |
} |
|
//------------------------------------------+----------------------------------- |
//! FIXME_docs |
|
inline bool RlinkCommandExpect::StatusIsChecked() const |
{ |
return fStatusMsk != 0xff; |
174,12 → 147,4
return fDataMsk != 0xffff; |
} |
|
//------------------------------------------+----------------------------------- |
//! FIXME_docs |
|
inline bool RlinkCommandExpect::DoneIsChecked() const |
{ |
return fDataMsk == 0; |
} |
|
} // end namespace Retro |
/tools/src/librtools/Rexception.cpp
1,6 → 1,6
// $Id: Rexception.cpp 625 2014-12-30 16:17:45Z mueller $ |
// $Id: Rexception.cpp 488 2013-02-16 18:49:47Z mueller $ |
// |
// Copyright 2013-2014 by Walter F.J. Mueller <W.F.J.Mueller@gsi.de> |
// Copyright 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 |
// the terms of the GNU General Public License as published by the Free |
13,13 → 13,12
// |
// Revision History: |
// Date Rev Version Comment |
// 2014-12-30 625 1.1 add ctor(meth,text,emsg) |
// 2013-01-12 474 1.0 Initial version |
// --------------------------------------------------------------------------- |
|
/*! |
\file |
\version $Id: Rexception.cpp 625 2014-12-30 16:17:45Z mueller $ |
\version $Id: Rexception.cpp 488 2013-02-16 18:49:47Z mueller $ |
\brief Implemenation of Rexception. |
*/ |
|
65,14 → 64,6
{} |
|
//------------------------------------------+----------------------------------- |
//! FIXME_docs |
|
Rexception::Rexception(const std::string& meth, const std::string& text, |
const RerrMsg& errmsg) |
: fErrmsg(meth,text+errmsg.Message()) |
{} |
|
//------------------------------------------+----------------------------------- |
//! Destructor |
|
Rexception::~Rexception() throw() |
/tools/src/librtools/Rexception.hpp
1,6 → 1,6
// $Id: Rexception.hpp 625 2014-12-30 16:17:45Z mueller $ |
// $Id: Rexception.hpp 487 2013-02-12 19:14:38Z mueller $ |
// |
// Copyright 2013-2014 by Walter F.J. Mueller <W.F.J.Mueller@gsi.de> |
// Copyright 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 |
// the terms of the GNU General Public License as published by the Free |
13,8 → 13,7
// |
// Revision History: |
// Date Rev Version Comment |
// 2014-12-30 625 1.1 add ctor(meth,text,emsg) |
// 2013-02-12 487 1.0.1 add ErrMsg() getter |
// 2013-02-12 487 1.0,1 add ErrMsg() getter |
// 2013-01-12 474 1.0 Initial version |
// --------------------------------------------------------------------------- |
|
21,7 → 20,7
|
/*! |
\file |
\version $Id: Rexception.hpp 625 2014-12-30 16:17:45Z mueller $ |
\version $Id: Rexception.hpp 487 2013-02-12 19:14:38Z mueller $ |
\brief Declaration of class Rexception. |
*/ |
|
43,8 → 42,6
const std::string& text); |
Rexception(const std::string& meth, |
const std::string& text, int errnum); |
Rexception(const std::string& meth, |
const std::string& text, const RerrMsg& errmsg); |
~Rexception() throw(); |
|
const char* what() const throw(); |
/tools/src/librlinktpp/RtclRlinkConnect.cpp
1,6 → 1,6
// $Id: RtclRlinkConnect.cpp 628 2015-01-04 16:22:09Z mueller $ |
// $Id: RtclRlinkConnect.cpp 609 2014-12-07 19:35:25Z mueller $ |
// |
// Copyright 2011-2015 by Walter F.J. Mueller <W.F.J.Mueller@gsi.de> |
// Copyright 2011-2014 by Walter F.J. Mueller <W.F.J.Mueller@gsi.de> |
// |
// 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 |
13,8 → 13,6
// |
// Revision History: |
// Date Rev Version Comment |
// 2015-01-04 628 1.3.2 add M_get |
// 2014-12-20 616 1.3.1 M_exec: add -edone for BlockDone checking |
// 2014-12-06 609 1.3 new rlink v4 iface |
// 2014-08-22 584 1.2.1 use nullptr |
// 2014-08-15 583 1.2 rb_mreq addr now 16 bit |
33,7 → 31,7
|
/*! |
\file |
\version $Id: RtclRlinkConnect.cpp 628 2015-01-04 16:22:09Z mueller $ |
\version $Id: RtclRlinkConnect.cpp 609 2014-12-07 19:35:25Z mueller $ |
\brief Implemenation of class RtclRlinkConnect. |
*/ |
|
42,7 → 40,6
#include <iostream> |
|
#include "boost/bind.hpp" |
#include "boost/thread/locks.hpp" |
|
#include "librtcltools/Rtcl.hpp" |
#include "librtcltools/RtclOPtr.hpp" |
70,8 → 67,7
|
RtclRlinkConnect::RtclRlinkConnect(Tcl_Interp* interp, const char* name) |
: RtclProxyOwned<RlinkConnect>("RlinkConnect", interp, name, |
new RlinkConnect()), |
fGets() |
new RlinkConnect()) |
{ |
AddMeth("open", boost::bind(&RtclRlinkConnect::M_open, this, _1)); |
AddMeth("close", boost::bind(&RtclRlinkConnect::M_close, this, _1)); |
86,22 → 82,11
AddMeth("print", boost::bind(&RtclRlinkConnect::M_print, this, _1)); |
AddMeth("dump", boost::bind(&RtclRlinkConnect::M_dump, this, _1)); |
AddMeth("config", boost::bind(&RtclRlinkConnect::M_config, this, _1)); |
AddMeth("get", boost::bind(&RtclRlinkConnect::M_get, this, _1)); |
AddMeth("$default", boost::bind(&RtclRlinkConnect::M_default, this, _1)); |
|
for (size_t i=0; i<8; i++) { |
fCmdnameObj[i] = Tcl_NewStringObj(RlinkCommand::CommandName(i), -1); |
} |
|
RlinkConnect* pobj = &Obj(); |
fGets.Add<uint32_t> ("sysid", |
boost::bind(&RlinkConnect::SysId, pobj)); |
fGets.Add<size_t> ("rbufsize", |
boost::bind(&RlinkConnect::RbufSize, pobj)); |
fGets.Add<size_t> ("bsizemax", |
boost::bind(&RlinkConnect::BlockSizeMax, pobj)); |
fGets.Add<size_t> ("bsizeprudent", |
boost::bind(&RlinkConnect::BlockSizePrudent, pobj)); |
} |
|
//------------------------------------------+----------------------------------- |
147,8 → 132,8
int RtclRlinkConnect::M_exec(RtclArgs& args) |
{ |
static RtclNameSet optset("-rreg|-rblk|-wreg|-wblk|-labo|-attn|-init|" |
"-edata|-edone|-estat|-estatdef|" |
"-print|-dump|-rlist"); |
"-edata|-estat|-estatdef|" |
"-volatile|-print|-dump|-rlist"); |
|
Tcl_Interp* interp = args.Interp(); |
|
169,7 → 154,7
|
size_t lsize = clist.Size(); |
if (opt == "-rreg") { // -rreg addr ?varData ?varStat --- |
if (!GetAddr(args, addr)) return kERR; |
if (!GetAddr(args, Obj(), addr)) return kERR; |
if (!GetVarName(args, "??varData", lsize, vardata)) return kERR; |
if (!GetVarName(args, "??varStat", lsize, varstat)) return kERR; |
clist.AddRreg(addr); |
176,8 → 161,8
|
} else if (opt == "-rblk") { // -rblk addr size ?varData ?varStat |
int32_t bsize; |
if (!GetAddr(args, addr)) return kERR; |
if (!args.GetArg("bsize", bsize, 1, Obj().BlockSizeMax())) return kERR; |
if (!GetAddr(args, Obj(), addr)) return kERR; |
if (!args.GetArg("bsize", bsize, 1, 2048)) return kERR; |
if (!GetVarName(args, "??varData", lsize, vardata)) return kERR; |
if (!GetVarName(args, "??varStat", lsize, varstat)) return kERR; |
clist.AddRblk(addr, (size_t) bsize); |
184,7 → 169,7
|
} else if (opt == "-wreg") { // -wreg addr data ?varStat ------- |
uint16_t data; |
if (!GetAddr(args, addr)) return kERR; |
if (!GetAddr(args, Obj(), addr)) return kERR; |
if (!args.GetArg("data", data)) return kERR; |
if (!GetVarName(args, "??varStat", lsize, varstat)) return kERR; |
clist.AddWreg(addr, data); |
191,8 → 176,8
|
} else if (opt == "-wblk") { // -wblk addr block ?varStat ------ |
vector<uint16_t> block; |
if (!GetAddr(args, addr)) return kERR; |
if (!args.GetArg("data", block, 1, Obj().BlockSizeMax())) return kERR; |
if (!GetAddr(args, Obj(), addr)) return kERR; |
if (!args.GetArg("data", block, 1, 2048)) return kERR; |
if (!GetVarName(args, "??varStat", lsize, varstat)) return kERR; |
clist.AddWblk(addr, block); |
|
208,7 → 193,7
|
} else if (opt == "-init") { // -init addr data ?varStat ------- |
uint16_t data; |
if (!GetAddr(args, addr)) return kERR; |
if (!GetAddr(args, Obj(), addr)) return kERR; |
if (!args.GetArg("data", data)) return kERR; |
if (!GetVarName(args, "??varStat", lsize, varstat)) return kERR; |
clist.AddInit(addr, data); |
234,22 → 219,6
clist[lsize-1].Expect()->SetData(data, mask); |
} |
|
} else if (opt == "-edone") { // -edone done -------------------- |
if (!ClistNonEmpty(args, clist)) return kERR; |
uint16_t done=0; |
if (!args.GetArg("done", done)) return kERR; |
if (clist[lsize-1].Expect()==0) { |
clist[lsize-1].SetExpect(new RlinkCommandExpect(estatdef_val, |
estatdef_msk)); |
} |
uint8_t cmd = clist[lsize-1].Command(); |
if (cmd == RlinkCommand::kCmdRblk || |
cmd == RlinkCommand::kCmdWblk) { |
clist[lsize-1].Expect()->SetDone(done); |
} else { |
return args.Quit("-E: -edone allowed only after -rblk,-wblk"); |
} |
|
} else if (opt == "-estat") { // -estat ?stat ?mask ------------- |
if (!ClistNonEmpty(args, clist)) return kERR; |
uint8_t stat=0; |
300,7 → 269,7
if (varlist == "-") nact += 1; |
if (nact > 1) |
return args.Quit( |
"-E: more that one of -print,-dump,-rlist without target variable found"); |
"-E: more that one of -print,-dump,-list without target variable found"); |
|
if (!args.AllDone()) return kERR; |
if (clist.Size() == 0) return kOK; |
743,16 → 712,6
//------------------------------------------+----------------------------------- |
//! FIXME_docs |
|
int RtclRlinkConnect::M_get(RtclArgs& args) |
{ |
// synchronize with server thread (really needed ??) |
boost::lock_guard<RlinkConnect> lock(Obj()); |
return fGets.M_get(args); |
} |
|
//------------------------------------------+----------------------------------- |
//! FIXME_docs |
|
int RtclRlinkConnect::M_default(RtclArgs& args) |
{ |
if (!args.AllDone()) return kERR; |
773,7 → 732,8
//------------------------------------------+----------------------------------- |
//! FIXME_docs |
|
bool RtclRlinkConnect::GetAddr(RtclArgs& args, uint16_t& addr) |
bool RtclRlinkConnect::GetAddr(RtclArgs& args, RlinkConnect& conn, |
uint16_t& addr) |
{ |
Tcl_Obj* pobj=0; |
if (!args.GetArg("addr", pobj)) return kERR; |
851,7 → 811,7
const RlinkCommandList& clist) |
{ |
if (clist.Size() == 0) { |
args.AppendResult("-E: -edata, -edone, or -estat " |
args.AppendResult("-E: -edata, -estat, or -volatile " |
"not allowed on empty command list", nullptr); |
return false; |
} |
/tools/src/librlinktpp/RtclAttnShuttle.cpp
1,4 → 1,4
// $Id: RtclAttnShuttle.cpp 625 2014-12-30 16:17:45Z mueller $ |
// $Id: RtclAttnShuttle.cpp 602 2014-11-08 21:42:47Z mueller $ |
// |
// Copyright 2013-2014 by Walter F.J. Mueller <W.F.J.Mueller@gsi.de> |
// |
13,7 → 13,6
// |
// Revision History: |
// Date Rev Version Comment |
// 2014-12-30 625 1.1 adopt to Rlink V4 attn logic |
// 2014-11-08 602 1.0.3 cast int first to ptrdiff_t, than to ClientData |
// 2014-08-22 584 1.0.2 use nullptr |
// 2013-05-20 521 1.0.1 Setup proper Tcl channel options |
23,7 → 22,7
|
/*! |
\file |
\version $Id: RtclAttnShuttle.cpp 625 2014-12-30 16:17:45Z mueller $ |
\version $Id: RtclAttnShuttle.cpp 602 2014-11-08 21:42:47Z mueller $ |
\brief Implemenation of class RtclAttnShuttle. |
*/ |
|
127,16 → 126,13
//------------------------------------------+----------------------------------- |
//! FIXME_docs |
|
int RtclAttnShuttle::AttnHandler(RlinkServer::AttnArgs& args) |
int RtclAttnShuttle::AttnHandler(const RlinkServer::AttnArgs& args) |
{ |
fpServ->GetAttnInfo(args); |
|
uint16_t apat = args.fAttnPatt & args.fAttnMask; |
int irc = ::write(fFdPipeWrite, (void*) &apat, sizeof(apat)); |
if (irc < 0) |
throw Rexception("RtclAttnShuttle::AttnHandler()", |
"write() failed: ", errno); |
|
return 0; |
} |
|
/tools/src/librlinktpp/RtclRlinkConnect.hpp
1,6 → 1,6
// $Id: RtclRlinkConnect.hpp 628 2015-01-04 16:22:09Z mueller $ |
// $Id: RtclRlinkConnect.hpp 492 2013-02-24 22:14:47Z mueller $ |
// |
// Copyright 2011-2015 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 |
// the terms of the GNU General Public License as published by the Free |
13,7 → 13,6
// |
// Revision History: |
// Date Rev Version Comment |
// 2015-01-04 628 1.0.4 add M_get |
// 2013-02-23 492 1.0.3 use RlogFile.Name(); use Context().ErrorCount() |
// 2013-01-06 473 1.0.2 add M_rawio |
// 2011-11-28 434 1.0.1 ConfigBase(): use uint32_t for lp64 compatibility |
23,7 → 22,7
|
/*! |
\file |
\version $Id: RtclRlinkConnect.hpp 628 2015-01-04 16:22:09Z mueller $ |
\version $Id: RtclRlinkConnect.hpp 492 2013-02-24 22:14:47Z mueller $ |
\brief Declaration of class RtclRlinkConnect. |
*/ |
|
35,7 → 34,6
|
#include "librtcltools/RtclOPtr.hpp" |
#include "librtcltools/RtclProxyOwned.hpp" |
#include "librtcltools/RtclGetList.hpp" |
|
#include "librlink/RlinkConnect.hpp" |
|
60,10 → 58,9
int M_print(RtclArgs& args); |
int M_dump(RtclArgs& args); |
int M_config(RtclArgs& args); |
int M_get(RtclArgs& args); |
int M_default(RtclArgs& args); |
|
bool GetAddr(RtclArgs& args, uint16_t& addr); |
bool GetAddr(RtclArgs& args, RlinkConnect& conn, uint16_t& addr); |
bool GetVarName(RtclArgs& args, const char* argname, |
size_t nind, std::vector<std::string>& varname); |
bool ConfigBase(RtclArgs& args, uint32_t& base); |
72,7 → 69,6
|
protected: |
RtclOPtr fCmdnameObj[8]; |
RtclGetList fGets; |
}; |
|
} // end namespace Retro |
/tools/src/librlinktpp/RtclAttnShuttle.hpp
1,6 → 1,6
// $Id: RtclAttnShuttle.hpp 625 2014-12-30 16:17:45Z mueller $ |
// $Id: RtclAttnShuttle.hpp 495 2013-03-06 17:13:48Z mueller $ |
// |
// Copyright 2013-2014 by Walter F.J. Mueller <W.F.J.Mueller@gsi.de> |
// Copyright 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 |
// the terms of the GNU General Public License as published by the Free |
13,7 → 13,6
// |
// Revision History: |
// Date Rev Version Comment |
// 2014-12-30 625 1.1 adopt to Rlink V4 attn logic |
// 2013-03-01 493 1.0 Initial version |
// 2013-01-14 475 0.5 First draft |
// --------------------------------------------------------------------------- |
20,7 → 19,7
|
/*! |
\file |
\version $Id: RtclAttnShuttle.hpp 625 2014-12-30 16:17:45Z mueller $ |
\version $Id: RtclAttnShuttle.hpp 495 2013-03-06 17:13:48Z mueller $ |
\brief Declaration of class RtclAttnShuttle. |
*/ |
|
48,7 → 47,7
void Remove(); |
|
protected: |
int AttnHandler(RlinkServer::AttnArgs& args); |
int AttnHandler(const RlinkServer::AttnArgs& args); |
void TclChannelHandler(int mask); |
static void ThunkTclChannelHandler(ClientData cdata, int mask); |
|
/tools/bin/ghdl_assert_filter
File deleted
tools/bin/ghdl_assert_filter
Property changes :
Deleted: svn:executable
## -1 +0,0 ##
-*
\ No newline at end of property
Index: tools/bin/tbrun_tbwrri
===================================================================
--- tools/bin/tbrun_tbwrri (revision 28)
+++ tools/bin/tbrun_tbwrri (nonexistent)
@@ -1,116 +0,0 @@
-#!/bin/bash
-# $Id: tbrun_tbwrri 622 2014-12-28 20:45:26Z mueller $
-#
-# Revision History:
-# Date Rev Version Comment
-# 2014-12-27 622 1.0 Initial version
-#
-
-docmd ()
-{
- echo "$1"
- if [[ -z "$optdry" ]] ; then
- eval "$1"
- fi
-}
-
-optdry=""
-optlsuf=""
-optstack=""
-optghw=""
-opttbw=""
-optpack=""
-optrri=""
-optpcom=""
-optcuff=""
-
-# handle options
-while (( $# > 0 )) ; do
- case $1 in
- -dry|--dry) optdry=$1 ; shift 1 ;;
- -lsuf|--lsuf) optlsuf=$2 ; shift 2 ;;
- -stack|--stack) optstack=$2 ; shift 2 ;;
- -ghw|--ghw) optghw=$2 ; shift 2 ;;
- -tbw|--tbw) opttbw=$2 ; shift 2 ;;
- -pack|--pack) optpack=$2 ; shift 2 ;;
- -rri|--rri) optrri=$2 ; shift 2 ;;
- -cuff|--cuff) optcuff=$1 ; shift 1 ;;
- -pcom|--pcom) optpcom=$1 ; shift 1 ;;
- -*) echo "tbrun_tbwrri-E: invalid option '$1'"; exit 1 ;;
- *) break;;
- esac
-done
-
-# complain if no tbench defined
-if (( $# == 0 )) ; then
- echo "Usage: tbrun_tbwrri [opts] testbench rricmds..."
- echo " Options:"
- echo " --dry dry run, print commands, don't execute"
- echo " --lsuf suff use '_.log' as suffix for log file"
- echo " --stack nnn use as ghdl stack size"
- echo " --ghw fname write ghw file with name '.ghw"
- echo " --tbw opts append to tbw command"
- echo " --pack plist add '--pack=<=plist>' option to ti_rri"
- echo " --rri opts append to ti_rri command"
- echo " --cuff use cuff and not serport"
- echo " --pcom print test comments"
- exit 1
-fi
-
-tbench=$1
-shift 1
-
-tbenchname=$(basename $tbench)
-tbenchpath=$(dirname $tbench)
-
-# check for ghdl with _ssim, _fsim, _tsim
-isghdlxsim=""
-if [[ $tbench =~ _[sft]sim$ ]] ; then
- isghdlxsim=true
- logsuff=""
-fi
-
-# issue makes
-if [[ -n "$isghdlxsim" ]] ; then docmd "make -C $tbenchpath ghdl_tmp_clean"; fi
-docmd "make -C $tbenchpath $tbenchname"
-exitstat=$?
-if [[ -n "$isghdlxsim" ]] ; then docmd "make -C $tbenchpath ghdl_tmp_clean"; fi
-
-if (( $exitstat > 0 )) ; then exit $exitstat; fi
-
-# determine logfile name
-logsuff="_dsim"
-if [[ $tbenchname =~ _[sft]sim$ ]] ; then logsuff=""; fi
-if [[ -n "$optlsuf" ]] ; then logsuff="_$optlsuf"; fi
-
-logfile="${tbenchname}${logsuff}.log"
-
-# now build actual test command
-cmd="time ti_rri --run=\"tbw $tbench -fifo"
-if [[ -n "$opttbw" ]] ; then cmd+=" $opttbw"; fi
-if [[ -n "$optstack" ]] ; then cmd+=" --stack-max-size=$optstack"; fi
-if [[ -n "$optghw" ]] ; then cmd+=" --wave=$optghw.ghw"; fi
-cmd+=" 2>&1 | ghdl_assert_filter\""
-cmd+=" --fifo --logl=3"
-if [[ -n "$optpack" ]] ; then cmd+=" --pack=$optpack"; fi
-if [[ -n "$optrri" ]] ; then cmd+=" $optrri"; fi
-cmd+=" --"
-
-if [[ -n "$optcuff" ]] ; then
- cmd+=" \"rlc oob -sbdata 8 0x2\" \"rlc oob -sbdata 16 0x4\""
-fi
-
-while (( $# > 0 )) ; do
- cmd+=" "
- if [[ $1 =~ " " ]] ; then cmd+="\""; fi
- cmd+="$1"
- if [[ $1 =~ " " ]] ; then cmd+="\""; fi
- shift 1
-done
-cmd+=" | tee $logfile"
-
-pcomtag=""
-if [[ -n "$optpcom" ]] ; then pcomtag="^\#|"; fi
-# FAIL, PASS, DONE come from tbs
-cmd+=" | egrep \"(${pcomtag}-[EFW]:|FAIL|PASS|DONE)\""
-docmd "$cmd"
tools/bin/tbrun_tbwrri
Property changes :
Deleted: svn:executable
## -1 +0,0 ##
-*
\ No newline at end of property
Index: tools/bin/tbrun_tbw
===================================================================
--- tools/bin/tbrun_tbw (revision 28)
+++ tools/bin/tbrun_tbw (nonexistent)
@@ -1,97 +0,0 @@
-#!/bin/bash
-# $Id: tbrun_tbw 622 2014-12-28 20:45:26Z mueller $
-#
-# Revision History:
-# Date Rev Version Comment
-# 2014-12-27 622 1.0.1 add --stack, --ghw, --tbw, --pcom
-# 2014-12-26 621 1.0 Initial version
-#
-
-docmd ()
-{
- echo "$1"
- if [[ -z "$optdry" ]] ; then
- eval "$1"
- fi
-}
-
-optdry=""
-optlsuf=""
-optstack=""
-optghw=""
-opttbw=""
-optpcom=""
-
-# handle options
-while (( $# > 0 )) ; do
- case $1 in
- -dry|--dry) optdry=$1 ; shift 1 ;;
- -lsuf|--lsuf) optlsuf=$2 ; shift 2 ;;
- -stack|--stack) optstack=$2 ; shift 2 ;;
- -ghw|--ghw) optghw=$2 ; shift 2 ;;
- -tbw|--tbw) opttbw=$2 ; shift 2 ;;
- -pcom|--pcom) optpcom=$1 ; shift 1 ;;
- -*) echo "tbrun_tbw-E: invalid option '$1'"; exit 1 ;;
- *) break;;
- esac
-done
-
-tbench=$1
-stimfile=$2
-
-# complain if no tbench defined
-if (( $# == 0 )) ; then
- echo "Usage: tbrun_tbw [opts] testbench [stimfile]"
- echo " Options:"
- echo " --dry dry run, print commands, don't execute"
- echo " --lsuf suff use '_.log' as suffix for log file"
- echo " --stack nnn use as ghdl stack size"
- echo " --ghw fname write ghw file with name '.ghw"
- echo " --tbw opts append to tbw command"
- exit 1
-fi
-
-# check for ISim
-isisim=""
-if [[ $tbench =~ _ISim ]] ; then
- isisim=true
-fi
-
-# check for ghdl with _ssim, _fsim, _tsim
-isghdlxsim=""
-if [[ "$isisim" == "" ]] && [[ $tbench =~ _[sft]sim$ ]] ; then
- isghdlxsim=true
- logsuff=""
-fi
-
-# issue makes
-if [[ -n "$isghdlxsim" ]] ; then docmd "make ghdl_tmp_clean"; fi
-docmd "make $tbench"
-exitstat=$?
-if [[ -n "$isghdlxsim" ]] ; then docmd "make ghdl_tmp_clean"; fi
-
-if (( $exitstat > 0 )) ; then exit $exitstat; fi
-
-# determine logfile name
-logsuff="_dsim"
-if [[ $tbench =~ _[sft]sim$ ]] ; then logsuff=""; fi
-if [[ -n "$optlsuf" ]] ; then logsuff="_$optlsuf"; fi
-
-logfile="${tbench}${logsuff}.log"
-
-# now build actual test command (a tbw|filter|tee|egrep pipe)
-cmd="time tbw $tbench"
-if [[ -n "$isisim" ]] ; then cmd+=" -run"; fi
-if [[ -n "$stimfile" ]] ; then cmd+=" $stimfile"; fi
-if [[ -n "$opttbw" ]] ; then cmd+=" $opttbw"; fi
-if [[ -n "$optstack" ]] ; then cmd+=" --stack-max-size=$optstack"; fi
-if [[ -n "$optghw" ]] ; then cmd+=" --wave=$optghw.ghw"; fi
-cmd+=" 2>&1"
-if [[ -z "$isisim" ]] ; then cmd+=" | ghdl_assert_filter"; fi
-cmd+=" | tee $logfile"
-
-pcomtag=""
-if [[ -n "$optpcom" ]] ; then pcomtag="^C|"; fi
-# FAIL, PASS, DONE come from tbs; ERROR comes from ISim
-cmd+=" | egrep \"(${pcomtag}-[EFW]:|ERROR|FAIL|PASS|DONE)\""
-docmd "$cmd"
tools/bin/tbrun_tbw
Property changes :
Deleted: svn:executable
## -1 +0,0 ##
-*
\ No newline at end of property
Index: tools/bin/ticonv_pdpcp
===================================================================
--- tools/bin/ticonv_pdpcp (revision 28)
+++ tools/bin/ticonv_pdpcp (revision 27)
@@ -1,5 +1,5 @@
#!/usr/bin/perl -w
-# $Id: ticonv_pdpcp 622 2014-12-28 20:45:26Z mueller $
+# $Id: ticonv_pdpcp 609 2014-12-07 19:35:25Z mueller $
#
# Copyright 2013-2014 by Walter F.J. Mueller
#
@@ -14,7 +14,6 @@
#
# Revision History:
# Date Rev Version Comment
-# 2014-12-27 622 1.2.1 use wmembe now
# 2014-12-07 609 1.2 use rlink::anena (for rlink v4)
# 2014-07-31 576 1.1 add --cmax option (default = 3); support .sdef
# 2014-07-26 575 1.0.4 add --tout option (sets wtcpu timeout)
@@ -125,15 +124,14 @@
} elsif ($cmd =~ /^(wr[0-7]|wps|wal|wah|wmi|wm|stapc)\s+([0-7]+)$/) {
push @cmdlist, "-$1 0$2";
- # (write) data type commands: wmembe ---
- } elsif ($cmd =~ /^wmembe\s+([01]+)/) {
- my $val = oct("0b$1");
- my $be = $val & 0x3;
- my $stick = $val & 0x4;
- if ($stick == 0) {
- push @cmdlist, "-wmembe $be";
+ # (write) data type commands: wibrb ---
+ } elsif ($cmd =~ /^(wibrb)\s+([0-7]+)/) {
+ my $base = oct($2);
+ my $be = $base & 0x3;
+ if ($be == 0) {
+ push @cmdlist, "-wibrb 0$2";
} else {
- push @cmdlist, "-wmembe $be -stick";
+ push @cmdlist, sprintf "-wibrb 0%6.6o -be %o", $base&0177700, $be;
}
# (read) [d=data] type commands: rrx,rps,rm,rmi --------------------
/tools/bin/tbw
1,7 → 1,7
#!/usr/bin/perl -w |
# $Id: tbw 619 2014-12-23 13:17:41Z mueller $ |
# $Id: tbw 575 2014-07-27 20:55:41Z mueller $ |
# |
# Copyright 2007-2015 by Walter F.J. Mueller <W.F.J.Mueller@gsi.de> |
# Copyright 2007-2014 by Walter F.J. Mueller <W.F.J.Mueller@gsi.de> |
# |
# 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 |
14,8 → 14,6
# |
# Revision History: |
# Date Rev Version Comment |
# 2015-01-04 629 1.2.6 BUGFIX: setup proper dsc values after -fifo |
# 2014-12-23 619 1.2.5 add -fifo and -verbose options |
# 2014-07-27 575 1.2.4 use xtwi to start ISim models |
# 2011-11-06 420 1.2.3 fix tbw.dat parsing (allow / in file names) |
# 2010-05-23 294 1.2.2 handle tb_code's in non-local directories |
46,8 → 44,6
my $tb_code; |
my $is_isim; |
my $is_isim_run; |
my $is_fifo; |
my $is_verbose; |
|
my @args_pos; # list of positional args |
my @args_nam; # list of named args |
88,18 → 84,6
} |
} |
|
if (scalar(@ARGV) && $ARGV[0] eq "-fifo") { |
push @file_dsc, {tag=>'rlink_cext_fifo_rx', val=>'<fifo>'}; |
push @file_dsc, {tag=>'rlink_cext_fifo_tx', val=>'<fifo>'}; |
push @file_dsc, {tag=>'rlink_cext_conf', val=>'<null>'}; |
$is_fifo = 1; |
shift @ARGV; |
} |
if (scalar(@ARGV) && $ARGV[0] eq "-verbose") { |
$is_verbose = 1; |
shift @ARGV; |
} |
|
if (not -e $tb_code) { |
print "tbw-E: $tb_code not existing or not executable\n"; |
print_usage; |
113,7 → 97,7
my $tbwdat_file = "tbw.dat"; |
$tbwdat_file = "$tb_code_path/tbw.dat" unless (-r "tbw.dat"); |
|
if ((!$is_fifo) && -r $tbwdat_file) { |
if (-r $tbwdat_file) { |
my $ok = 0; |
my $done = 0; |
|
137,17 → 121,20
} |
|
# |
# if no tbw.dat or no matching stanza found, setup defaults |
# if no matching stanza found, setup default _stim linkage |
# |
|
if (!$is_fifo) { |
unless (scalar (@file_dsc)) { |
push @file_dsc, {tag=>$tb_code_stem . "_stim", |
val=>$tb_code_stem . "_stim.dat"}; |
unless (scalar (@file_dsc)) { |
push @file_dsc, {tag=>$tb_code_stem . "_stim", |
val=>$tb_code_stem . "_stim.dat"}; |
} |
|
if (0) { |
foreach my $dsc (@file_dsc) { |
my $tag = $dsc->{tag}; |
my $val = $dsc->{val}; |
printf " %s = %s\n", $tag, $val; |
} |
} else { |
push @file_dsc, {tag=>"rlink_cext_fifo_rx", |
val=>"<fifo>"}; |
} |
|
# |
188,14 → 175,6
} |
} |
|
if ($is_verbose) { |
foreach my $dsc (@file_dsc) { |
my $tag = $dsc->{tag}; |
my $val = $dsc->{val}; |
printf " %s = %s\n", $tag, $val; |
} |
} |
|
# |
# now handle all specified file descriptors |
# |
273,17 → 252,14
|
# ---------------------------------------------------------------------------- |
sub print_usage { |
print "usage: tbw <tb_code> [opts] [filedefs] [ghdl-opts]\n"; |
print " opts\n"; |
print " -run for _ISim tb's, runs the tb with a 'run all' command\n"; |
print " -fifo use rlink_cext fifo, ignore tbw.dat\n"; |
print " -verbose show the used tag,value settings before execution\n"; |
print "usage: tbw <tb_code> [-run] [filedefs] [opts]\n"; |
print " -run for _ISim tb's, runs the tb with a 'run all' command\n"; |
print " filedefs define tb input, either filename in tbw.dat order or\n"; |
print " tag=name or tag=[<content>] pairs with tag matching one in in\n"; |
print " tbw.dat. The [<content>] form allows to give data inline, e.g.\n"; |
print " like \"_conf=[.rpmon 1]\"\n"; |
print " ghdl-opts are all other options starting with a '-', they are\n"; |
print " passed to the testbench. Some useful ghdl options are:\n"; |
print " opts are all other options starting with a '-', they are passed\n"; |
print " to the testbench. Some useful ghdl options are:\n"; |
print " --wave=x.ghw\n"; |
print " --stack-max-size=16384\n"; |
print " --stop-time=1ns --disp-time --trace-processes\n"; |
/tools/bin/ti_w11
1,10 → 1,9
#!/usr/bin/perl -w |
# $Id: ti_w11 619 2014-12-23 13:17:41Z mueller $ |
# $Id: ti_w11 570 2014-07-20 19:05:11Z mueller $ |
# |
# Revision History: |
# Date Rev Version Comment |
# 2014-12-23 619 1.2.1 use -fifo tbw option for test bench starts |
# 2014-07-13 570 1.2 BUGFIX: split options args into ti_rri opts and cmds |
# 2014-07-13 570 1.2 bugfix: split options args into ti_rri opts and cmds |
# 2013-05-05 516 1.1 renamed to ti_w11 |
# 2013-04-26 510 1.0 Initial version (derived from dorri) |
# |
25,9 → 24,9
my $opt_tmu; |
my $tirri; |
my $val_term; |
my $val_tb_s3 = "tbw $sysbase/s3board/tb/tb_w11a_s3 -fifo"; |
my $val_tb_n2 = "tbw $sysbase/nexys2/tb/tb_w11a_n2 -fifo"; |
my $val_tb_n3 = "tbw $sysbase/nexys3/tb/tb_w11a_n3 -fifo"; |
my $val_tb_s3 = "tbw $sysbase/s3board/tb/tb_w11a_s3"; |
my $val_tb_n2 = "tbw $sysbase/nexys2/tb/tb_w11a_n2"; |
my $val_tb_n3 = "tbw $sysbase/nexys3/tb/tb_w11a_n3"; |
my $val_tb; |
my $val_e; |
|
/tools/oskit/rsx11m-40_rk/rsx11m-40_rk_boot.tcl
1,11 → 1,11
# $Id: rsx11m-40_rk_boot.tcl 622 2014-12-28 20:45:26Z mueller $ |
# $Id: rsx11m-40_rk_boot.tcl 525 2013-07-06 12:19:39Z mueller $ |
# |
# Setup file for RSX11-M V4.0 RK05 based system |
# |
# Usage: |
# |
# console_starter -d DL0 & |
# console_starter -d DL1 & |
# telnet_starter -d DL0 & |
# telnet_starter -d DL1 & |
# ti_w11 -xxx @rsx11m-40_rk_boot.tcl ( -xxx depends on sim or fpga connect) |
# |
|
/tools/oskit/rt11-40_rk/rt11-40_rk_boot.tcl
1,10 → 1,10
# $Id: rt11-40_rk_boot.tcl 622 2014-12-28 20:45:26Z mueller $ |
# $Id: rt11-40_rk_boot.tcl 517 2013-05-09 21:34:45Z mueller $ |
# |
# Setup file for RT-11 V4.0 RK05 based system |
# |
# Usage: |
# |
# console_starter -d DL0 & |
# telnet_starter -d DL0 & |
# ti_w11 -xxx @rt11-40_rk_boot.tcl ( -xxx depends on sim or fpga connect) |
# |
|
/tools/oskit/unix-v5_rk/uv5_rk_boot.tcl
1,10 → 1,10
# $Id: uv5_rk_boot.tcl 622 2014-12-28 20:45:26Z mueller $ |
# $Id: uv5_rk_boot.tcl 517 2013-05-09 21:34:45Z mueller $ |
# |
# Setup file for Unix V5 RK05 based system |
# |
# Usage: |
# |
# console_starter -d DL0 & |
# telnet_starter -d DL0 & |
# ti_w11 -xxx @uv5_boot.tcl ( -xxx depends on sim or fpga connect) |
|
# setup w11 cpu |
/tools/oskit/211bsd_rk/211bsd_rk_boot.tcl
1,11 → 1,11
# $Id: 211bsd_rk_boot.tcl 622 2014-12-28 20:45:26Z mueller $ |
# $Id: 211bsd_rk_boot.tcl 517 2013-05-09 21:34:45Z mueller $ |
# |
# Setup file for 211bsd RK05 based system |
# |
# Usage: |
# |
# console_starter -d DL0 & |
# console_starter -d DL1 & |
# telnet_starter -d DL0 & |
# telnet_starter -d DL1 & |
# ti_w11 -xxx @211bsd_rk_boot.tcl ( -xxx depends on sim or fpga connect) |
# |
|
/tools/oskit/rsx11m-31_rk/rsx11m-31_rk_boot.tcl
1,11 → 1,11
# $Id: rsx11m-31_rk_boot.tcl 622 2014-12-28 20:45:26Z mueller $ |
# $Id: rsx11m-31_rk_boot.tcl 517 2013-05-09 21:34:45Z mueller $ |
# |
# Setup file for RSX11-M V3.1 RK05 based system |
# |
# Usage: |
# |
# console_starter -d DL0 & |
# console_starter -d DL1 & |
# telnet_starter -d DL0 & |
# telnet_starter -d DL1 & |
# ti_w11 -xxx @rsx11m-31_rk_boot.tcl ( -xxx depends on sim or fpga connect) |
# |
|
/tools/dox/w11_vhd_all.Doxyfile
5,7 → 5,7
#--------------------------------------------------------------------------- |
DOXYFILE_ENCODING = UTF-8 |
PROJECT_NAME = "w11 - vhd" |
PROJECT_NUMBER = 0.63 |
PROJECT_NUMBER = 0.62 |
PROJECT_BRIEF = "W11 CPU core and support modules" |
PROJECT_LOGO = |
OUTPUT_DIRECTORY = $(RETRODOXY)/w11/vhd |
/tools/dox/w11_cpp.Doxyfile
5,7 → 5,7
#--------------------------------------------------------------------------- |
DOXYFILE_ENCODING = UTF-8 |
PROJECT_NAME = "w11 - cpp" |
PROJECT_NUMBER = 0.63 |
PROJECT_NUMBER = 0.62 |
PROJECT_BRIEF = "Backend server for Rlink and w11" |
PROJECT_LOGO = |
OUTPUT_DIRECTORY = $(RETRODOXY)/w11/cpp |
/tools/dox/w11_tcl.Doxyfile
5,7 → 5,7
#--------------------------------------------------------------------------- |
DOXYFILE_ENCODING = UTF-8 |
PROJECT_NAME = "w11 - tcl" |
PROJECT_NUMBER = 0.63 |
PROJECT_NUMBER = 0.62 |
PROJECT_BRIEF = "Backend server for Rlink and w11" |
PROJECT_LOGO = |
OUTPUT_DIRECTORY = $(RETRODOXY)/w11/tcl |
/tools/tbench/test_cp_ibrbasics.tcl
1,4 → 1,4
# $Id: test_cp_ibrbasics.tcl 621 2014-12-26 21:20:05Z mueller $ |
# $Id: test_cp_ibrbasics.tcl 552 2014-03-02 23:02:00Z mueller $ |
# |
# Copyright 2014- by Walter F.J. Mueller <W.F.J.Mueller@gsi.de> |
# License disclaimer see LICENSE_gpl_v2.txt in $RETROBASE directory |
5,7 → 5,6
# |
# Revision History: |
# Date Rev Version Comment |
# 2014-12-26 621 1.1 test membe |
# 2014-03-02 552 1.0 Initial version |
# |
# Test very basic memory interface gymnastics |
13,7 → 12,7
# |
|
# ---------------------------------------------------------------------------- |
rlc log "test_cp_ibrbasics: Test very basic ibus interface gymnastics" |
rlc log "test_cp_membasics: Test very basic ibus interface gymnastics" |
|
rlc log " write/read ibus space (MMU SAR SM I regs) via bwm/brm" |
$cpu cp -wal 0172240 \ |
22,77 → 21,4
$cpu cp -wal 0172240 \ |
-brm 3 -edata {012340 012342 012344} |
|
rlc log " write/read ibus space (MMU SAR SM I regs) via wibr/ribr" |
$cpu cp -ribr 0172240 -edata 012340 \ |
-ribr 0172242 -edata 012342 \ |
-ribr 0172244 -edata 012344 |
$cpu cp -wibr 0172240 022340 \ |
-wibr 0172242 022342 \ |
-wibr 0172244 022344 |
$cpu cp -ribr 0172240 -edata 022340 \ |
-ribr 0172242 -edata 022342 \ |
-ribr 0172244 -edata 022344 |
|
rlc log " membe with wibr (non sticky)" |
$cpu cp -wibr 0172240 0x0100 \ |
-wibr 0172242 0x0302 \ |
-wibr 0172244 0x0504 |
rlc log " membe = 0 (no byte selected)" |
$cpu cp -wmembe 0 \ |
-wibr 0172242 0xffff \ |
-rmembe -edata 0x03 \ |
-ribr 0172242 -edata 0x0302 |
rlc log " membe = 1 (lsb selected)" |
$cpu cp -wmembe 0x01 \ |
-wibr 0172242 0xffaa \ |
-rmembe -edata 0x03 \ |
-ribr 0172242 -edata 0x03aa |
rlc log " membe = 2 (msb selected)" |
$cpu cp -wmembe 0x02 \ |
-wibr 0172242 0xbbff \ |
-rmembe -edata 0x03 \ |
-ribr 0172242 -edata 0xbbaa |
|
$cpu cp -ribr 0172240 -edata 0x0100 \ |
-ribr 0172242 -edata 0xbbaa \ |
-ribr 0172244 -edata 0x0504 |
|
rlc log " membe with wibr (sticky)" |
$cpu cp -wibr 0172240 0x1110 \ |
-wibr 0172242 0x1312 \ |
-wibr 0172244 0x1514 |
|
rlc log " membe = 0 + stick (no byte selected)" |
$cpu cp -wmembe 0 -stick \ |
-wibr 0172242 0xffff \ |
-rmembe -edata 0x04 \ |
-ribr 0172242 -edata 0x1312 |
|
rlc log " membe = 1 + stick (lsb selected)" |
$cpu cp -wmembe 1 -stick \ |
-wibr 0172240 0xffaa \ |
-rmembe -edata 0x05 \ |
-wibr 0172242 0xffbb \ |
-rmembe -edata 0x05 \ |
-wibr 0172244 0xffcc \ |
-rmembe -edata 0x05 |
$cpu cp -ribr 0172240 -edata 0x11aa \ |
-ribr 0172242 -edata 0x13bb \ |
-ribr 0172244 -edata 0x15cc |
|
rlc log " membe = 2 + stick (msb selected)" |
$cpu cp -wmembe 2 -stick \ |
-wibr 0172240 0xccff \ |
-rmembe -edata 0x06 \ |
-wibr 0172242 0xbbff \ |
-rmembe -edata 0x06 \ |
-wibr 0172244 0xaaff \ |
-rmembe -edata 0x06 |
$cpu cp -ribr 0172240 -edata 0xccaa \ |
-ribr 0172242 -edata 0xbbbb \ |
-ribr 0172244 -edata 0xaacc |
rlc log " membe = 3 again" |
$cpu cp -wmembe 3 \ |
-rmembe -edata 0x03 |
|
# -------------------------------------------------------------------- |
/tools/tbench/test_cp_membasics.tcl
1,4 → 1,4
# $Id: test_cp_membasics.tcl 621 2014-12-26 21:20:05Z mueller $ |
# $Id: test_cp_membasics.tcl 552 2014-03-02 23:02:00Z mueller $ |
# |
# Copyright 2014- by Walter F.J. Mueller <W.F.J.Mueller@gsi.de> |
# License disclaimer see LICENSE_gpl_v2.txt in $RETROBASE directory |
70,3 → 70,5
|
$cpu cp -wal 02200 \ |
-brm 4 -edata {007700 007710 007720 007730} |
|
|
/tools/tbench/test_cp_psw.tcl
1,11 → 1,10
# $Id: test_cp_psw.tcl 621 2014-12-26 21:20:05Z mueller $ |
# $Id: test_cp_psw.tcl 552 2014-03-02 23:02:00Z mueller $ |
# |
# Copyright 2013-2014 by Walter F.J. Mueller <W.F.J.Mueller@gsi.de> |
# Copyright 2013- by Walter F.J. Mueller <W.F.J.Mueller@gsi.de> |
# License disclaimer see LICENSE_gpl_v2.txt in $RETROBASE directory |
# |
# Revision History: |
# Date Rev Version Comment |
# 2014-12-26 621 1.0.1 adopt to 4k word ibus window |
# 2013-03-31 502 1.0 Initial version |
# |
# Test that psw is writable and readable via various ways |
12,7 → 11,7
# 1. direct cp access |
# 2. via 16bit memory addressing |
# 3. via 22bit memory addressing |
# 4. via ibr window |
# 4. via ibr mapping |
# |
# This test not only verifies psw, but also all basic access methods |
# |
42,8 → 41,10
} |
|
rlc log " write/read via ibr window" |
$cpu cp -wibrb 0177700 \ |
-ribrb -edata 0017700 |
foreach w { 000000 000017 } { |
$cpu cp -wibr 0177776 $w \ |
-ribr 0177776 -edata $w \ |
-rps -edata $w |
$cpu cp -wibr 076 $w \ |
-ribr 076 -edata $w \ |
-rps -edata $w |
} |
/rtl/sys_gen/tst_rlink/rbd_tst_rlink.vhd
1,4 → 1,4
-- $Id: rbd_tst_rlink.vhd 620 2014-12-25 10:48:35Z mueller $ |
-- $Id: rbd_tst_rlink.vhd 603 2014-11-09 22:50:26Z mueller $ |
-- |
-- Copyright 2011-2014 by Walter F.J. Mueller <W.F.J.Mueller@gsi.de> |
-- |
59,8 → 59,8
RB_LAM : out slv16; -- rbus: look at me |
RB_STAT : out slv4; -- rbus: status flags |
RB_SRES_TOP : in rb_sres_type; -- top-level rb_sres, for rbd_mon |
RXSD : in slbit; -- serport rxsd, for rbd_eyemon |
RXACT : in slbit; -- serport rxact, for rbd_eyemon |
RXSD : in slbit; -- serport rxsd, for rbd_emon |
RXACT : in slbit; -- serport rxact, for rbd_emon |
STAT : out slv8 -- status flags |
|
); |
83,18 → 83,18
signal TIM1_DONE : slbit := '0'; |
signal TIM1_BUSY : slbit := '0'; |
|
constant rbaddr_rbmon : slv16 := x"ffe8"; -- ffe8/8: 1111 1111 1110 1xxx |
constant rbaddr_tester : slv16 := x"ffe0"; -- ffe0/8: 1111 1111 1110 0xxx |
constant rbaddr_eyemon : slv16 := x"ffd0"; -- ffd0/4: 1111 1111 1101 00xx |
constant rbaddr_tim1 : slv16 := x"fe11"; -- fe11/1: 1111 1110 0001 0001 |
constant rbaddr_tim0 : slv16 := x"fe10"; -- fe10/1: 1111 1110 0001 0000 |
constant rbaddr_bram : slv16 := x"fe00"; -- fe00/2: 1111 1110 0000 00xx |
constant rbaddr_mon : slv16 := x"ffe8"; -- ffe8/8: 1111 1111 1110 1xxx |
constant rbaddr_test : slv16 := x"ffe0"; -- ffe0/8: 1111 1111 1110 0xxx |
constant rbaddr_emon : slv16 := x"ffd0"; -- ffd0/4: 1111 1111 1101 00xx |
constant rbaddr_tim1 : slv16 := x"fe11"; -- fe11/1: 1111 1110 0001 0001 |
constant rbaddr_tim0 : slv16 := x"fe10"; -- fe10/1: 1111 1110 0001 0000 |
constant rbaddr_bram : slv16 := x"fe00"; -- fe00/2: 1111 1110 0000 00xx |
|
begin |
|
TEST : rbd_tester |
generic map ( |
RB_ADDR => rbaddr_tester) |
RB_ADDR => rbaddr_test) |
port map ( |
CLK => CLK, |
RESET => RESET, |
116,7 → 116,7
|
MON : rbd_rbmon |
generic map ( |
RB_ADDR => rbaddr_rbmon, |
RB_ADDR => rbaddr_mon, |
AWIDTH => 9) |
port map ( |
CLK => CLK, |
128,7 → 128,7
|
EMON : rbd_eyemon |
generic map ( |
RB_ADDR => rbaddr_eyemon, |
RB_ADDR => rbaddr_emon, |
RDIV => slv(to_unsigned(0,8))) |
port map ( |
CLK => CLK, |
/rtl/sys_gen/w11a/nexys2/sys_w11a_n2.vhd
1,4 → 1,4
-- $Id: sys_w11a_n2.vhd 620 2014-12-25 10:48:35Z mueller $ |
-- $Id: sys_w11a_n2.vhd 614 2014-12-20 15:00:45Z mueller $ |
-- |
-- Copyright 2010-2014 by Walter F.J. Mueller <W.F.J.Mueller@gsi.de> |
-- |
21,8 → 21,7
-- bplib/bpgen/sn_humanio_rbus |
-- bplib/fx2rlink/rlink_sp1c_fx2 |
-- bplib/fx2rlink/ioleds_sp1c_fx2 |
-- vlib/rbus/rb_sres_or_4 |
-- vlib/rbus/rbd_rbmon |
-- vlib/rri/rb_sres_or_3 |
-- w11a/pdp11_core_rbus |
-- w11a/pdp11_core |
-- w11a/pdp11_bram |
42,7 → 41,6
-- |
-- Synthesized (xst): |
-- Date Rev ise Target flop lutl lutm slic t peri |
-- 2014-12-22 619 14.7 131013 xc3s1200e-4 1828 5131 366 3263 ok: +rbmon |
-- 2014-12-20 614 14.7 131013 xc3s1200e-4 1714 4896 366 3125 ok: -RL11,rlv4 |
-- 2014-06-08 561 14.7 131013 xc3s1200e-4 1626 4821 360 3052 ok: +RL11 |
-- 2014-06-01 558 14.7 131013 xc3s1200e-4 1561 4597 334 2901 ok: |
71,8 → 69,6
-- |
-- Revision History: |
-- Date Rev Version Comment |
-- 2014-12-24 620 1.6.2 relocate ibus window and hio rbus address |
-- 2014-12-22 619 1.6.1 add rbus monitor rbd_rbmon |
-- 2014-08-28 588 1.6 use new rlink v4 iface generics and 4 bit STAT |
-- 2014-08-15 583 1.5 rb_mreq addr now 16 bit |
-- 2013-04-20 509 1.4 added fx2 (cuff) support; ATOWIDTH=7 |
150,7 → 146,6
use work.genlib.all; |
use work.serportlib.all; |
use work.rblib.all; |
use work.rbdlib.all; |
use work.rlinklib.all; |
use work.fx2lib.all; |
use work.fx2rlinklib.all; |
223,12 → 218,11
signal SER_MONI : serport_moni_type := serport_moni_init; |
signal FX2_MONI : fx2ctl_moni_type := fx2ctl_moni_init; |
|
signal RB_MREQ : rb_mreq_type := rb_mreq_init; |
signal RB_SRES : rb_sres_type := rb_sres_init; |
signal RB_SRES_CPU : rb_sres_type := rb_sres_init; |
signal RB_SRES_IBD : rb_sres_type := rb_sres_init; |
signal RB_SRES_HIO : rb_sres_type := rb_sres_init; |
signal RB_SRES_RBMON : rb_sres_type := rb_sres_init; |
signal RB_MREQ : rb_mreq_type := rb_mreq_init; |
signal RB_SRES : rb_sres_type := rb_sres_init; |
signal RB_SRES_CPU : rb_sres_type := rb_sres_init; |
signal RB_SRES_IBD : rb_sres_type := rb_sres_init; |
signal RB_SRES_HIO : rb_sres_type := rb_sres_init; |
|
signal RESET : slbit := '0'; |
signal CE_USEC : slbit := '0'; |
280,10 → 274,9
|
signal DISPREG : slv16 := (others=>'0'); |
|
constant rbaddr_rbmon : slv16 := x"ffe8"; -- ffe8/0008: 1111 1111 1110 1xxx |
constant rbaddr_hio : slv16 := x"fef0"; -- fef0/0004: 1111 1110 1111 00xx |
constant rbaddr_ibus0 : slv16 := x"4000"; -- 4000/1000: 0100 xxxx xxxx xxxx |
constant rbaddr_core0 : slv16 := x"0000"; -- 0000/0020: 0000 0000 000x xxxx |
constant rbaddr_core0 : slv16 := "0000000000000000"; |
constant rbaddr_ibus : slv16 := "0000000010000000"; |
constant rbaddr_hio : slv16 := "0000000011000000"; |
|
begin |
|
396,34 → 389,18
IO_FX2_DATA => IO_FX2_DATA |
); |
|
RB_SRES_OR : rb_sres_or_4 |
RB_SRES_OR : rb_sres_or_3 |
port map ( |
RB_SRES_1 => RB_SRES_CPU, |
RB_SRES_2 => RB_SRES_IBD, |
RB_SRES_3 => RB_SRES_HIO, |
RB_SRES_4 => RB_SRES_RBMON, |
RB_SRES_OR => RB_SRES |
); |
|
RBMON : if sys_conf_rbmon_awidth > 0 generate |
begin |
RBMON : rbd_rbmon |
generic map ( |
RB_ADDR => rbaddr_rbmon, |
AWIDTH => sys_conf_rbmon_awidth) |
port map ( |
CLK => CLK, |
RESET => RESET, |
RB_MREQ => RB_MREQ, |
RB_SRES => RB_SRES_RBMON, |
RB_SRES_SUM => RB_SRES |
); |
end generate RBMON; |
|
RB2CP : pdp11_core_rbus |
generic map ( |
RB_ADDR_CORE => rbaddr_core0, |
RB_ADDR_IBUS => rbaddr_ibus0) |
RB_ADDR_IBUS => rbaddr_ibus) |
port map ( |
CLK => CLK, |
RESET => RESET, |
/rtl/sys_gen/w11a/nexys2/tb/sys_conf_sim.vhd
1,6 → 1,6
-- $Id: sys_conf_sim.vhd 619 2014-12-23 13:17:41Z mueller $ |
-- $Id: sys_conf_sim.vhd 509 2013-04-21 20:46:20Z mueller $ |
-- |
-- Copyright 2010-2014 by Walter F.J. Mueller <W.F.J.Mueller@gsi.de> |
-- Copyright 2010-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 |
-- the terms of the GNU General Public License as published by the Free |
16,10 → 16,9
-- Description: Definitions for sys_w11a_n2 (for simulation) |
-- |
-- Dependencies: - |
-- Tool versions: xst 11.4-14.7; ghdl 0.26-0.31 |
-- Tool versions: xst 11.4, 13.1; ghdl 0.26-0.29 |
-- Revision History: |
-- Date Rev Version Comment |
-- 2014-12-22 619 1.2.1 add _rbmon_awidth |
-- 2013-04-21 509 1.2 add fx2 settings |
-- 2011-11-27 433 1.1.1 use /1*1 to skip dcm in sim, _ssim fails with dcm |
-- 2010-11-27 341 1.1 add dcm and memctl related constants (clksys=58) |
44,8 → 43,6
|
constant sys_conf_ser2rri_cdinit : integer := 1-1; -- 1 cycle/bit in sim |
|
constant sys_conf_rbmon_awidth : integer := 9; -- use 0 to disable rbmon |
|
-- fx2 settings: petowidth=10 -> 2^10 30 MHz clocks -> ~33 usec |
constant sys_conf_fx2_petowidth : positive := 10; |
constant sys_conf_fx2_ccwidth : positive := 5; |
/rtl/sys_gen/w11a/nexys2/sys_conf.vhd
1,6 → 1,6
-- $Id: sys_conf.vhd 619 2014-12-23 13:17:41Z mueller $ |
-- $Id: sys_conf.vhd 509 2013-04-21 20:46:20Z mueller $ |
-- |
-- Copyright 2010-2014 by Walter F.J. Mueller <W.F.J.Mueller@gsi.de> |
-- Copyright 2010-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 |
-- the terms of the GNU General Public License as published by the Free |
16,10 → 16,9
-- Description: Definitions for sys_w11a_n2 (for synthesis) |
-- |
-- Dependencies: - |
-- Tool versions: xst 11.4-14.7; ghdl 0.26-0.31 |
-- Tool versions: xst 11.4, 13.1; ghdl 0.26-0.29 |
-- Revision History: |
-- Date Rev Version Comment |
-- 2014-12-22 619 1.2.1 add _rbmon_awidth |
-- 2013-04-21 509 1.2 add fx2 settings |
-- 2011-11-19 428 1.1.1 use clksys=56 (58 no closure after numeric_std...) |
-- 2010-11-27 341 1.1 add dcm and memctl related constants (clksys=58) |
48,8 → 47,6
|
constant sys_conf_ser2rri_defbaud : integer := 115200; -- default 115k baud |
|
constant sys_conf_rbmon_awidth : integer := 9; -- use 0 to disable rbmon |
|
-- fx2 settings: petowidth=10 -> 2^10 30 MHz clocks -> ~33 usec |
constant sys_conf_fx2_petowidth : positive := 10; |
constant sys_conf_fx2_ccwidth : positive := 5; |
/rtl/sys_gen/w11a/nexys2/sys_w11a_n2.vbom
4,7 → 4,6
../../../vlib/genlib/genlib.vhd |
../../../vlib/serport/serportlib.vbom |
../../../vlib/rbus/rblib.vhd |
../../../vlib/rbus/rbdlib.vhd |
../../../vlib/rlink/rlinklib.vbom |
../../../bplib/fx2lib/fx2lib.vhd |
../../../bplib/fx2rlink/fx2rlinklib.vbom |
23,8 → 22,7
../../../bplib/bpgen/sn_humanio_rbus.vbom |
../../../bplib/fx2rlink/rlink_sp1c_fx2.vbom |
../../../bplib/fx2rlink/ioleds_sp1c_fx2.vbom |
../../../vlib/rbus/rb_sres_or_4.vbom |
../../../vlib/rbus/rbd_rbmon.vbom |
../../../vlib/rbus/rb_sres_or_3.vbom |
../../../w11a/pdp11_core_rbus.vbom |
../../../w11a/pdp11_core.vbom |
../../../w11a/pdp11_bram.vbom |
/rtl/sys_gen/w11a/nexys3/sys_w11a_n3.vhd
1,4 → 1,4
-- $Id: sys_w11a_n3.vhd 620 2014-12-25 10:48:35Z mueller $ |
-- $Id: sys_w11a_n3.vhd 614 2014-12-20 15:00:45Z mueller $ |
-- |
-- Copyright 2011-2014 by Walter F.J. Mueller <W.F.J.Mueller@gsi.de> |
-- |
21,8 → 21,7
-- bplib/bpgen/sn_humanio_rbus |
-- bplib/fx2rlink/rlink_sp1c_fx2 |
-- bplib/fx2rlink/ioleds_sp1c_fx2 |
-- vlib/rbus/rb_sres_or_4 |
-- vlib/rbus/rbd_rbmon |
-- vlib/rri/rb_sres_or_3 |
-- w11a/pdp11_core_rbus |
-- w11a/pdp11_core |
-- w11a/pdp11_bram |
42,7 → 41,6
-- |
-- Synthesized (xst): |
-- Date Rev ise Target flop lutl lutm slic t peri |
-- 2014-12-22 619 14.7 131013 xc6slx16-2 1742 3767 150 1350 ok: +rbmon |
-- 2014-12-20 614 14.7 131013 xc6slx16-2 1640 3692 150 1297 ok: -RL11,rlv4 |
-- 2014-06-08 561 14.7 131013 xc6slx16-2 1531 3500 142 1165 ok: +RL11 |
-- 2014-05-29 556 14.7 131013 xc6slx16-2 1459 3342 128 1154 ok: |
52,8 → 50,6
-- |
-- Revision History: |
-- Date Rev Version Comment |
-- 2014-12-24 620 1.7.2 relocate ibus window and hio rbus address |
-- 2014-12-22 619 1.7.1 add rbus monitor rbd_rbmon |
-- 2014-08-28 588 1.7 use new rlink v4 iface generics and 4 bit STAT |
-- 2014-08-15 583 1.6 rb_mreq addr now 16 bit |
-- 2013-10-06 538 1.5 pll support, use clksys_vcodivide ect |
112,7 → 108,6
use work.genlib.all; |
use work.serportlib.all; |
use work.rblib.all; |
use work.rbdlib.all; |
use work.rlinklib.all; |
use work.fx2lib.all; |
use work.fx2rlinklib.all; |
186,12 → 181,11
signal SER_MONI : serport_moni_type := serport_moni_init; |
signal FX2_MONI : fx2ctl_moni_type := fx2ctl_moni_init; |
|
signal RB_MREQ : rb_mreq_type := rb_mreq_init; |
signal RB_SRES : rb_sres_type := rb_sres_init; |
signal RB_SRES_CPU : rb_sres_type := rb_sres_init; |
signal RB_SRES_IBD : rb_sres_type := rb_sres_init; |
signal RB_SRES_HIO : rb_sres_type := rb_sres_init; |
signal RB_SRES_RBMON : rb_sres_type := rb_sres_init; |
signal RB_MREQ : rb_mreq_type := rb_mreq_init; |
signal RB_SRES : rb_sres_type := rb_sres_init; |
signal RB_SRES_CPU : rb_sres_type := rb_sres_init; |
signal RB_SRES_IBD : rb_sres_type := rb_sres_init; |
signal RB_SRES_HIO : rb_sres_type := rb_sres_init; |
|
signal RESET : slbit := '0'; |
signal CE_USEC : slbit := '0'; |
243,10 → 237,9
|
signal DISPREG : slv16 := (others=>'0'); |
|
constant rbaddr_rbmon : slv16 := x"ffe8"; -- ffe8/0008: 1111 1111 1110 1xxx |
constant rbaddr_hio : slv16 := x"fef0"; -- fef0/0004: 1111 1110 1111 00xx |
constant rbaddr_ibus0 : slv16 := x"4000"; -- 4000/1000: 0100 xxxx xxxx xxxx |
constant rbaddr_core0 : slv16 := x"0000"; -- 0000/0020: 0000 0000 000x xxxx |
constant rbaddr_core0 : slv16 := "0000000000000000"; |
constant rbaddr_ibus : slv16 := "0000000010000000"; |
constant rbaddr_hio : slv16 := "0000000011000000"; |
|
begin |
|
364,34 → 357,18
IO_FX2_DATA => IO_FX2_DATA |
); |
|
RB_SRES_OR : rb_sres_or_4 |
RB_SRES_OR : rb_sres_or_3 |
port map ( |
RB_SRES_1 => RB_SRES_CPU, |
RB_SRES_2 => RB_SRES_IBD, |
RB_SRES_3 => RB_SRES_HIO, |
RB_SRES_4 => RB_SRES_RBMON, |
RB_SRES_OR => RB_SRES |
); |
|
RBMON : if sys_conf_rbmon_awidth > 0 generate |
begin |
RBMON : rbd_rbmon |
generic map ( |
RB_ADDR => rbaddr_rbmon, |
AWIDTH => sys_conf_rbmon_awidth) |
port map ( |
CLK => CLK, |
RESET => RESET, |
RB_MREQ => RB_MREQ, |
RB_SRES => RB_SRES_RBMON, |
RB_SRES_SUM => RB_SRES |
); |
end generate RBMON; |
|
RB2CP : pdp11_core_rbus |
generic map ( |
RB_ADDR_CORE => rbaddr_core0, |
RB_ADDR_IBUS => rbaddr_ibus0) |
RB_ADDR_IBUS => rbaddr_ibus) |
port map ( |
CLK => CLK, |
RESET => RESET, |
/rtl/sys_gen/w11a/nexys3/tb/sys_conf_sim.vhd
1,6 → 1,6
-- $Id: sys_conf_sim.vhd 619 2014-12-23 13:17:41Z mueller $ |
-- $Id: sys_conf_sim.vhd 538 2013-10-06 17:21:25Z mueller $ |
-- |
-- Copyright 2011-2014 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 |
-- the terms of the GNU General Public License as published by the Free |
16,10 → 16,9
-- Description: Definitions for sys_w11a_n3 (for simulation) |
-- |
-- Dependencies: - |
-- Tool versions: xst 13.1-14.7; ghdl 0.29-0.31 |
-- Tool versions: xst 13.1, 14.6; ghdl 0.29 |
-- Revision History: |
-- Date Rev Version Comment |
-- 2014-12-22 619 1.3.1 add _rbmon_awidth |
-- 2013-10-06 538 1.3 pll support, use clksys_vcodivide ect |
-- 2013-04-21 509 1.2 add fx2 settings |
-- 2011-11-25 432 1.0 Initial version (cloned from _n3) |
42,9 → 41,7
constant sys_conf_memctl_writedelay : positive := 5; |
|
constant sys_conf_ser2rri_cdinit : integer := 1-1; -- 1 cycle/bit in sim |
|
constant sys_conf_rbmon_awidth : integer := 9; -- use 0 to disable rbmon |
|
|
-- fx2 settings: petowidth=10 -> 2^10 30 MHz clocks -> ~33 usec |
constant sys_conf_fx2_petowidth : positive := 10; |
constant sys_conf_fx2_ccwidth : positive := 5; |
/rtl/sys_gen/w11a/nexys3/sys_conf.vhd
1,6 → 1,6
-- $Id: sys_conf.vhd 621 2014-12-26 21:20:05Z mueller $ |
-- $Id: sys_conf.vhd 538 2013-10-06 17:21:25Z mueller $ |
-- |
-- Copyright 2011-2014 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 |
-- the terms of the GNU General Public License as published by the Free |
16,11 → 16,9
-- Description: Definitions for sys_w11a_n3 (for synthesis) |
-- |
-- Dependencies: - |
-- Tool versions: xst 13.1-14.7; ghdl 0.29-0.31 |
-- Tool versions: xst 13.1, 14.6; ghdl 0.29 |
-- Revision History: |
-- Date Rev Version Comment |
-- 2014-12-26 621 1.2.2 use 68 MHz, get occasional problems with 72 MHz |
-- 2014-12-22 619 1.2.1 add _rbmon_awidth |
-- 2013-10-06 538 1.2 pll support, use clksys_vcodivide ect |
-- 2013-10-05 537 1.1.1 use 72 MHz, no closure w/ ISE 14.x for 80 anymore |
-- 2013-04-21 509 1.1 add fx2 settings |
45,8 → 43,8
package sys_conf is |
|
constant sys_conf_clksys_vcodivide : positive := 25; |
constant sys_conf_clksys_vcomultiply : positive := 17; -- dcm 68 MHz |
constant sys_conf_clksys_outdivide : positive := 1; -- sys 68 MHz |
constant sys_conf_clksys_vcomultiply : positive := 18; -- dcm 72 MHz |
constant sys_conf_clksys_outdivide : positive := 1; -- sys 72 MHz |
constant sys_conf_clksys_gentype : string := "DCM"; |
|
constant sys_conf_memctl_read0delay : positive := 4; |
55,8 → 53,6
|
constant sys_conf_ser2rri_defbaud : integer := 115200; -- default 115k baud |
|
constant sys_conf_rbmon_awidth : integer := 9; -- use 0 to disable rbmon |
|
-- fx2 settings: petowidth=10 -> 2^10 30 MHz clocks -> ~33 usec |
constant sys_conf_fx2_petowidth : positive := 10; |
constant sys_conf_fx2_ccwidth : positive := 5; |
/rtl/sys_gen/w11a/nexys3/sys_w11a_n3.vbom
4,7 → 4,6
../../../vlib/genlib/genlib.vhd |
../../../vlib/serport/serportlib.vbom |
../../../vlib/rbus/rblib.vhd |
../../../vlib/rbus/rbdlib.vhd |
../../../vlib/rlink/rlinklib.vbom |
../../../bplib/fx2lib/fx2lib.vhd |
../../../bplib/fx2rlink/fx2rlinklib.vbom |
23,8 → 22,7
../../../bplib/bpgen/sn_humanio_rbus.vbom |
../../../bplib/fx2rlink/rlink_sp1c_fx2.vbom |
../../../bplib/fx2rlink/ioleds_sp1c_fx2.vbom |
../../../vlib/rbus/rb_sres_or_4.vbom |
../../../vlib/rbus/rbd_rbmon.vbom |
../../../vlib/rbus/rb_sres_or_3.vbom |
../../../w11a/pdp11_core_rbus.vbom |
../../../w11a/pdp11_core.vbom |
../../../w11a/pdp11_bram.vbom |
/rtl/sys_gen/w11a/s3board/sys_w11a_s3.vhd
1,4 → 1,4
-- $Id: sys_w11a_s3.vhd 620 2014-12-25 10:48:35Z mueller $ |
-- $Id: sys_w11a_s3.vhd 614 2014-12-20 15:00:45Z mueller $ |
-- |
-- Copyright 2007-2014 by Walter F.J. Mueller <W.F.J.Mueller@gsi.de> |
-- |
19,8 → 19,7
-- bplib/bpgen/bp_rs232_2l4l_iob |
-- bplib/bpgen/sn_humanio |
-- vlib/rlink/rlink_sp1c |
-- vlib/rbus/rb_sres_or_3 |
-- vlib/rbus/rbd_rbmon |
-- vlib/rbus/rb_sres_or_2 |
-- w11a/pdp11_core_rbus |
-- w11a/pdp11_core |
-- w11a/pdp11_bram |
40,7 → 39,6
-- |
-- Synthesized (xst): |
-- Date Rev ise Target flop lutl lutm slic t peri |
-- 2014-12-22 619 14.7 131013 xc3s1000-4 1569 4768 302 2994 OK: +rbmon |
-- 2014-12-20 614 14.7 131013 xc3s1000-4 1455 4523 302 2807 OK: -RL11,rlv4 |
-- 2014-06-08 561 14.7 131013 xc3s1000-4 1374 4580 286 2776 OK: +RL11 |
-- 2014-06-01 558 14.7 131013 xc3s1000-4 1301 4306 270 2614 OK: |
78,8 → 76,6
-- |
-- Revision History: |
-- Date Rev Version Comment |
-- 2014-12-24 620 1.6.2 relocate ibus window and hio rbus address |
-- 2014-12-22 619 1.6.1 add rbus monitor rbd_rbmon |
-- 2014-08-28 588 1.6 use new rlink v4 iface and 4 bit STAT |
-- 2014-08-15 583 1.5 rb_mreq addr now 16 bit |
-- 2011-12-21 442 1.4.4 use rlink_sp1c; hio led usage now a for n2/n3 |
166,7 → 162,6
use work.genlib.all; |
use work.serportlib.all; |
use work.rblib.all; |
use work.rbdlib.all; |
use work.rlinklib.all; |
use work.bpgenlib.all; |
use work.s3boardlib.all; |
225,7 → 220,6
signal RB_SRES : rb_sres_type := rb_sres_init; |
signal RB_SRES_CPU : rb_sres_type := rb_sres_init; |
signal RB_SRES_IBD : rb_sres_type := rb_sres_init; |
signal RB_SRES_RBMON : rb_sres_type := rb_sres_init; |
|
signal RESET : slbit := '0'; |
signal CE_USEC : slbit := '0'; |
275,10 → 269,9
|
signal DISPREG : slv16 := (others=>'0'); |
|
constant rbaddr_rbmon : slv16 := x"ffe8"; -- ffe8/0008: 1111 1111 1110 1xxx |
constant rbaddr_hio : slv16 := x"fef0"; -- fef0/0004: 1111 1110 1111 00xx |
constant rbaddr_ibus0 : slv16 := x"4000"; -- 4000/1000: 0100 xxxx xxxx xxxx |
constant rbaddr_core0 : slv16 := x"0000"; -- 0000/0020: 0000 0000 000x xxxx |
constant rbaddr_core0 : slv16 := "0000000000000000"; |
constant rbaddr_ibus : slv16 := "0000000010000000"; |
constant rbaddr_hio : slv16 := "0000000011000000"; |
|
begin |
|
362,33 → 355,17
SER_MONI => SER_MONI |
); |
|
RB_SRES_OR : rb_sres_or_3 |
RB_SRES_OR : rb_sres_or_2 |
port map ( |
RB_SRES_1 => RB_SRES_CPU, |
RB_SRES_2 => RB_SRES_IBD, |
RB_SRES_3 => RB_SRES_RBMON, |
RB_SRES_OR => RB_SRES |
); |
|
RBMON : if sys_conf_rbmon_awidth > 0 generate |
begin |
RBMON : rbd_rbmon |
generic map ( |
RB_ADDR => rbaddr_rbmon, |
AWIDTH => sys_conf_rbmon_awidth) |
port map ( |
CLK => CLK, |
RESET => RESET, |
RB_MREQ => RB_MREQ, |
RB_SRES => RB_SRES_RBMON, |
RB_SRES_SUM => RB_SRES |
); |
end generate RBMON; |
|
RP2CP : pdp11_core_rbus |
generic map ( |
RB_ADDR_CORE => rbaddr_core0, |
RB_ADDR_IBUS => rbaddr_ibus0) |
RB_ADDR_IBUS => rbaddr_ibus) |
port map ( |
CLK => CLK, |
RESET => RESET, |
/rtl/sys_gen/w11a/s3board/tb/sys_conf_sim.vhd
1,6 → 1,6
-- $Id: sys_conf_sim.vhd 619 2014-12-23 13:17:41Z mueller $ |
-- $Id: sys_conf_sim.vhd 314 2010-07-09 17:38:41Z mueller $ |
-- |
-- Copyright 2007-2014 by Walter F.J. Mueller <W.F.J.Mueller@gsi.de> |
-- Copyright 2007-2008 by Walter F.J. Mueller <W.F.J.Mueller@gsi.de> |
-- |
-- 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 |
16,10 → 16,9
-- Description: Definitions for sys_w11a_s3 (for simulation) |
-- |
-- Dependencies: - |
-- Tool versions: xst 8.1-14.7; ghdl 0.18-0.31 |
-- Tool versions: xst 8.1, 8.2, 9.1, 9.2; ghdl 0.18-0.25 |
-- Revision History: |
-- Date Rev Version Comment |
-- 2014-12-22 619 1.1.2 add _rbmon_awidth |
-- 2010-05-05 288 1.1.1 add sys_conf_hio_debounce |
-- 2008-02-23 118 1.1 add memory config |
-- 2007-09-23 84 1.0 Initial version |
34,8 → 33,7
|
constant sys_conf_hio_debounce : boolean := false; -- no debouncers |
constant sys_conf_ser2rri_cdinit : integer := 1-1; -- 1 cycle/bit in sim |
constant sys_conf_rbmon_awidth : integer := 9; -- use 0 to disable rbmon |
|
|
constant sys_conf_bram : integer := 0; -- no bram, use cache |
constant sys_conf_bram_awidth : integer := 14; -- bram size (16 kB) |
constant sys_conf_mem_losize : integer := 8#037777#; -- 1 MByte |
/rtl/sys_gen/w11a/s3board/sys_w11a_s3.vbom
3,7 → 3,6
../../../vlib/genlib/genlib.vhd |
../../../vlib/serport/serportlib.vbom |
../../../vlib/rbus/rblib.vhd |
../../../vlib/rbus/rbdlib.vhd |
../../../vlib/rlink/rlinklib.vbom |
../../../bplib/bpgen/bpgenlib.vbom |
../../../bplib/s3board/s3boardlib.vbom |
16,8 → 15,7
../../../bplib/bpgen/bp_rs232_2l4l_iob.vbom |
../../../bplib/bpgen/sn_humanio.vbom |
../../../vlib/rlink/rlink_sp1c.vbom |
../../../vlib/rbus/rb_sres_or_3.vbom |
../../../vlib/rbus/rbd_rbmon.vbom |
../../../vlib/rbus/rb_sres_or_2.vbom |
../../../w11a/pdp11_core_rbus.vbom |
../../../w11a/pdp11_core.vbom |
../../../w11a/pdp11_bram.vbom |
/rtl/sys_gen/w11a/s3board/sys_conf.vhd
1,6 → 1,6
-- $Id: sys_conf.vhd 619 2014-12-23 13:17:41Z mueller $ |
-- $Id: sys_conf.vhd 314 2010-07-09 17:38:41Z mueller $ |
-- |
-- Copyright 2007-2014 by Walter F.J. Mueller <W.F.J.Mueller@gsi.de> |
-- Copyright 2007-2008 by Walter F.J. Mueller <W.F.J.Mueller@gsi.de> |
-- |
-- 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 |
16,10 → 16,9
-- Description: Definitions for sys_w11a_s3 (for synthesis) |
-- |
-- Dependencies: - |
-- Tool versions: xst 8.1-14.7; ghdl 0.18-0.31 |
-- Tool versions: xst 8.1, 8.2, 9.1, 9.2; ghdl 0.18-0.25 |
-- Revision History: |
-- Date Rev Version Comment |
-- 2014-12-22 619 1.1.2 add _rbmon_awidth |
-- 2010-05-05 288 1.1.1 add sys_conf_hio_debounce |
-- 2008-02-23 118 1.1 add memory config |
-- 2007-09-23 84 1.0 Initial version |
34,7 → 33,6
|
constant sys_conf_hio_debounce : boolean := true; -- instantiate debouncers |
constant sys_conf_ser2rri_cdinit : integer := 434-1; -- 50000000/115200 |
constant sys_conf_rbmon_awidth : integer := 9; -- use 0 to disable rbmon |
|
constant sys_conf_bram : integer := 0; -- no bram, use cache |
constant sys_conf_bram_awidth : integer := 14; -- bram size (16 kB) |
/rtl/sys_gen/tst_rlink_cuff/nexys2/sys_tst_rlink_cuff_n2.vhd
1,4 → 1,4
-- $Id: sys_tst_rlink_cuff_n2.vhd 620 2014-12-25 10:48:35Z mueller $ |
-- $Id: sys_tst_rlink_cuff_n2.vhd 614 2014-12-20 15:00:45Z mueller $ |
-- |
-- Copyright 2012-2014 by Walter F.J. Mueller <W.F.J.Mueller@gsi.de> |
-- |
40,7 → 40,6
-- |
-- Revision History: |
-- Date Rev Version Comment |
-- 2014-12-24 620 1.1.1 relocate hio rbus address |
-- 2014-08-15 583 1.1 rb_mreq addr now 16 bit |
-- 2012-12-29 466 1.0 Initial version; derived from sys_tst_fx2loop_n2 |
-- the now obsoleted sys_tst_rlink_n2_cuff design |
161,7 → 160,7
signal FX2_TX2AFULL : slbit := '0'; |
signal FX2_MONI : fx2ctl_moni_type := fx2ctl_moni_init; |
|
constant rbaddr_hio : slv16 := x"fef0"; -- fef0/4: 1111 1110 1111 00xx |
constant rbaddr_hio : slv16 := "0000000011000000"; -- 110000xx |
|
begin |
|
/rtl/sys_gen/tst_rlink_cuff/nexys3/sys_tst_rlink_cuff_n3.vhd
1,4 → 1,4
-- $Id: sys_tst_rlink_cuff_n3.vhd 620 2014-12-25 10:48:35Z mueller $ |
-- $Id: sys_tst_rlink_cuff_n3.vhd 614 2014-12-20 15:00:45Z mueller $ |
-- |
-- Copyright 2013-2014 by Walter F.J. Mueller <W.F.J.Mueller@gsi.de> |
-- |
36,7 → 36,6
-- |
-- Revision History: |
-- Date Rev Version Comment |
-- 2014-12-24 620 1.2.1 relocate hio rbus address |
-- 2014-08-15 583 1.2 rb_mreq addr now 16 bit |
-- 2013-10-06 538 1.1 pll support, use clksys_vcodivide ect |
-- 2012-12-29 466 1.0 Initial version; derived from sys_tst_rlink_cuff_n2 |
159,7 → 158,7
signal FX2_TX2AFULL : slbit := '0'; |
signal FX2_MONI : fx2ctl_moni_type := fx2ctl_moni_init; |
|
constant rbaddr_hio : slv16 := x"fef0"; -- fef0/4: 1111 1110 1111 00xx |
constant rbaddr_hio : slv16 := "0000000011000000"; -- 110000xx |
|
begin |
|
/rtl/sys_gen/tst_rlink_cuff/atlys/sys_tst_rlink_cuff_atlys.vhd
1,4 → 1,4
-- $Id: sys_tst_rlink_cuff_atlys.vhd 620 2014-12-25 10:48:35Z mueller $ |
-- $Id: sys_tst_rlink_cuff_atlys.vhd 583 2014-08-16 07:40:12Z mueller $ |
-- |
-- Copyright 2013-2014 by Walter F.J. Mueller <W.F.J.Mueller@gsi.de> |
-- |
35,7 → 35,6
-- |
-- Revision History: |
-- Date Rev Version Comment |
-- 2014-12-24 620 1.1.1 relocate hio rbus address |
-- 2014-08-15 583 1.1 rb_mreq addr now 16 bit |
-- 2013-01-06 472 1.0 Initial version; derived from sys_tst_rlink_cuff_n3 |
-- and sys_tst_fx2loop_atlys |
142,7 → 141,7
signal FX2_TX2AFULL : slbit := '0'; |
signal FX2_MONI : fx2ctl_moni_type := fx2ctl_moni_init; |
|
constant rbaddr_hio : slv16 := x"fef0"; -- fef0/4: 1111 1110 1111 00xx |
constant rbaddr_hio : slv16 := "0000000011000000"; -- 110000xx |
|
begin |
|
/rtl/w11a/tb/tb_pdp11core_stim.dat
1,8 → 1,7
# $Id: tb_pdp11core_stim.dat 621 2014-12-26 21:20:05Z mueller $ |
# $Id: tb_pdp11core_stim.dat 614 2014-12-20 15:00:45Z mueller $ |
# |
# Revision History: |
# Date Rev Version Comment |
# 2014-12-26 621 2.5 adopt wmembe,ribr,wibr emulation to new 4k window |
# 2014-12-20 614 2.4 adopted to rlink v4 |
# 2014-07-13 569 2.3 after ECO-026: correct test 31.1 wrong V=1 cases |
# correct test 37.2: 2 V=1 cases have regs now updated |
115,11 → 114,12
# |
C via ibr (ibrb 177700) |
# |
wibr 177776 000017 -- set all cc flags in psw |
ribr 177776 d=000017 -- ! psw |
wibrb 177700 |
wibr 76 000017 -- set all cc flags in psw |
ribr 76 d=000017 -- ! psw |
rps d=000017 |
wibr 177776 000000 -- set all cc flags in psw |
ribr 177776 d=000000 -- ! psw |
wibr 76 000000 -- set all cc flags in psw |
ribr 76 d=000000 -- ! psw |
rps d=000000 |
# |
C write register set 1, sm,um stack |
177,16 → 177,17
# |
C read IB space via ibr: MMU SAR supervisor mode (16 bit regs) |
# |
ribr 172240 d=012340 |
ribr 172242 d=012342 |
ribr 172244 d=012344 |
wibrb 172200 |
ribr 40 d=012340 |
ribr 42 d=012342 |
ribr 44 d=012344 |
# |
C byte write IB space via ibr: MMU SAR supervisor mode (16 bit regs) |
# |
wmembe 101 -- write low byte (set sticky flag) |
wibr 172240 177000 |
wibr 172242 177002 |
wibr 172244 177004 |
wibrb 172201 -- write low byte |
wibr 40 177000 |
wibr 42 177002 |
wibr 44 177004 |
wal 172240 -- ! verify |
brm 3 |
d=012000 |
193,10 → 194,10
d=012002 |
d=012004 |
# |
wmembe 110 -- write high byte (set sticky flag) |
wibr 172240 000377 |
wibr 172242 022377 |
wibr 172244 044377 |
wibrb 172202 -- write high byte |
wibr 40 000377 |
wibr 42 022377 |
wibr 44 044377 |
wal 172240 -- ! verify |
brm 3 |
d=000000 |
203,10 → 204,10
d=022002 |
d=044004 |
# |
wmembe 011 -- write high and low byte |
wibr 172240 012340 |
wibr 172242 012342 |
wibr 172244 012344 |
wibrb 172203 -- write high and low byte (both be set) |
wibr 40 012340 |
wibr 42 012342 |
wibr 44 012344 |
wal 172240 -- ! verify |
brm 3 |
d=012340 |
/rtl/w11a/tb/Makefile
1,8 → 1,7
# $Id: Makefile 621 2014-12-26 21:20:05Z mueller $ |
# $Id: Makefile 575 2014-07-27 20:55:41Z mueller $ |
# |
# Revision History: |
# Date Rev Version Comment |
# 2014_12_26 621 1.4.2 use tbrun_tbw for check_* targets |
# 2014-07-27 545 1.4.1 make reference board configurable via XTW_BOARD |
# 2011-08-13 405 1.4 use includes from rtl/make |
# 2010-12-30 351 1.3 retire tb_rripdp_pdp11core tb_rriext_pdp11core |
52,12 → 51,16
grep FAIL $*.simh_log |
|
check_dsim: tb_pdp11core tb_pdp11core_stim.dat |
tbrun_tbw tb_pdp11core || true |
time tbw tb_pdp11core |\ |
tee tb_pdp11core_dsim.log |\ |
egrep "(FAIL|DONE)" || true |
@ echo "# diff to reference" |
diff tb_pdp11core_out_ref.dat tb_pdp11core_dsim.log |
|
check_ssim: tb_pdp11core_ssim tb_pdp11core_stim.dat |
tbrun_tbw tb_pdp11core_ssim || true |
time tbw tb_pdp11core_ssim |\ |
tee tb_pdp11core_ssim.log |\ |
egrep "(FAIL|DONE)" || true |
@ echo "# diff to reference" |
diff tb_pdp11core_out_ref.dat tb_pdp11core_ssim.log |
|
/rtl/w11a/tb/tb_pdp11core.vhd
1,6 → 1,6
-- $Id: tb_pdp11core.vhd 621 2014-12-26 21:20:05Z mueller $ |
-- $Id: tb_pdp11core.vhd 444 2011-12-25 10:04:58Z mueller $ |
-- |
-- Copyright 2006-2014 by Walter F.J. Mueller <W.F.J.Mueller@gsi.de> |
-- Copyright 2006-2011 by Walter F.J. Mueller <W.F.J.Mueller@gsi.de> |
-- |
-- 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 |
22,11 → 22,10
-- To test: pdp11_core |
-- |
-- Target Devices: generic |
-- Tool versions: ghdl 0.18-0.31; ISim 14.7 |
-- Tool versions: ghdl 0.18-0.29; ISim 11.3 |
-- |
-- Verified (with tb_pdp11core_stim.dat): |
-- Date Rev Code ghdl ise Target Comment |
-- 2014-12-23 620 - 0.31 14.7 131013 - u:ok |
-- 2010-12-30 351 - 0.29 - - u:ok |
-- 2010-12-30 351 _ssim 0.29 12.1 M53d xc3s1000 u:ok |
-- 2010-06-20 308 - 0.29 - - u:ok |
47,7 → 46,6
-- |
-- Revision History: |
-- Date Rev Version Comment |
-- 2014-12-26 621 1.4.1 adopt wmembe,ribr,wibr emulation to new 4k window |
-- 2011-12-23 444 1.4 use new simclk/simclkcnt |
-- 2011-11-18 427 1.3.2 now numeric_std clean |
-- 2011-01-02 352 1.3.1 rename .cpmon->.rlmon |
182,7 → 180,6
variable irnum : slv3 := (others=>'0'); |
variable idin : slv16 := (others=>'0'); |
variable imsk : slv16 := (others=>'1'); |
variable idin3 : slv3 := (others=>'0'); |
variable ichk : boolean := false; |
variable idosta: slbit := '0'; |
|
201,14 → 198,15
variable ien : slbit := '0'; |
variable ibit : integer := 0; |
variable imemi : boolean := false; |
variable iaddr : slv16 := (others=>'0'); |
variable ioff : slv6 := (others=>'0'); |
variable idoibr : boolean := false; |
|
variable r_addr : slv22_1 := (others=>'0'); |
variable r_ena_22bit : slbit := '0'; |
variable r_ena_ubmap : slbit := '0'; |
variable r_membe : slv2 := "11"; |
variable r_membestick : slbit := '0'; |
variable r_ibrbase : slv(c_ibrb_ibf_base) := (others=>'0'); |
variable r_ibrbe : slv2 := (others=>'0'); |
|
|
begin |
|
314,7 → 312,7
when ".rbmon" => -- .rbmon (ignore it) |
readempty(iline); |
|
when ".scntl" => -- .scntl |
when ".scntl" => -- .scntl |
read_ea(iline, ibit); |
read_ea(iline, ien); |
assert (ibit>=SB_CNTL'low and ibit<=SB_CNTL'high) |
367,7 → 365,7
irnum := slv(to_unsigned(rind, 3)); |
readoct_ea(iline, idin); |
|
-- Note: there are no field definitions for wal, wah, wmembe because |
-- Note: there are no field definitions for wal, wah, wibrb because |
-- there is no corresponding cp command. Therefore the |
-- rbus field definitions are used here |
when "wal " => -- wal |
387,10 → 385,14
testempty_ea(iline); |
next file_loop; |
|
when "wmembe" => -- wmembe |
read_ea(iline, idin3); |
r_membestick := idin3(c_membe_rbf_stick); |
r_membe := idin3(c_membe_rbf_be); |
when "wibrb " => -- wibrb |
readoct_ea(iline, idin); |
r_ibrbase := idin(c_ibrb_ibf_base); |
if idin(c_ibrb_ibf_be) /= "00" then |
r_ibrbe := idin(c_ibrb_ibf_be); |
else |
r_ibrbe := "11"; |
end if; |
testempty_ea(iline); |
next file_loop; |
|
413,12 → 415,12
when "ribr " => -- ribr |
ifunc := c_cpfunc_rmem; |
idoibr := true; |
readoct_ea(iline, iaddr); |
readoct_ea(iline, ioff); |
readtagval2_ea(iline, "d", ichk, idin, imsk, 8); |
when "wibr " => -- wibr |
ifunc := c_cpfunc_wmem; |
idoibr := true; |
readoct_ea(iline, iaddr); |
readoct_ea(iline, ioff); |
readoct_ea(iline, idin); |
|
when "rps " => -- rps |
469,11 → 471,12
|
end if; |
|
CP_ADDR_be <= r_membe; |
if idoibr then |
CP_ADDR_addr(15 downto 13) <= "111"; |
CP_ADDR_addr(12 downto 1) <= iaddr(12 downto 1); |
CP_ADDR_addr(15 downto 13) <= "111"; |
CP_ADDR_addr(c_ibrb_ibf_base) <= r_ibrbase; |
CP_ADDR_addr(5 downto 1) <= ioff(5 downto 1); |
CP_ADDR_racc <= '1'; |
CP_ADDR_be <= r_ibrbe; |
CP_ADDR_ena_22bit <= '0'; |
CP_ADDR_ena_ubmap <= '0'; |
else |
524,14 → 527,9
idelta := idelta - 1; |
end loop; |
|
if imemi then -- rmi or wmi seen ? then inc ar |
if imemi then -- rmi or wmi seen ? then inc ar |
r_addr := slv(unsigned(r_addr) + 1); |
end if; |
|
if ifunc = c_cpfunc_wmem and -- emulate be sticky logic of rbus iface |
r_membestick = '0' then |
r_membe := "11"; |
end if; |
|
write(oline, dcycle, right, 4); |
write(oline, string'(" ")); |
/rtl/w11a/pdp11_core_rbus.vhd
1,4 → 1,4
-- $Id: pdp11_core_rbus.vhd 621 2014-12-26 21:20:05Z mueller $ |
-- $Id: pdp11_core_rbus.vhd 591 2014-09-06 17:45:38Z mueller $ |
-- |
-- Copyright 2007-2014 by Walter F.J. Mueller <W.F.J.Mueller@gsi.de> |
-- |
20,15 → 20,8
-- |
-- Target Devices: generic |
-- Tool versions: xst 8.2-14.7; ghdl 0.18-0.31 |
-- |
-- Synthesized (xst): |
-- Date Rev ise Target flop lutl lutm slic t peri |
-- 2014-12-21 591 14.7 131013 xc6slx16-2 52 118 0 58 s 4.9 |
-- |
-- Revision History: - |
-- Date Rev Version Comment |
-- 2014-12-26 621 1.4 use full size 4k word ibus window |
-- 2014-12-21 617 1.3.1 use separate RB_STAT bits for cmderr and cmdmerr |
-- 2014-09-05 591 1.3 use new rlink v4 iface and 4 bit STAT |
-- 2014-08-15 583 1.2 rb_mreq addr now 16 bit |
-- 2011-11-18 427 1.1.1 now numeric_std clean |
56,12 → 49,12
-- |
-- rbus registers: |
-- |
-- Addr Bits Name r/w/f Function |
-- Address Bits Name r/w/i Function |
-- |
-- 00000 conf r/w/- cpu configuration (e.g. cpu type) |
-- bbb00000 conf r/w/- cpu configuration (e.g. cpu type) |
-- (currently unused, all bits MBZ) |
-- 00001 cntl -/f/- cpu control |
-- 3:00 func function code |
-- bbb00001 cntl -/f/- cpu control |
-- 3:0 func function code |
-- 0000: noop |
-- 0001: start |
-- 0010: stop |
68,24 → 61,25
-- 0011: continue |
-- 0100: step |
-- 1111: reset (soft) |
-- 00010 stat r/-/- cpu status |
-- 7:04 cpurust r/-/- cp_stat: cpurust |
-- 3 cpuhalt r/-/- cp_stat: cpuhalt |
-- 2 cpugo r/-/- cp_stat: cpugo |
-- 1 cmdmerr r/-/- cp_stat: cmdmerr |
-- 0 cmderr r/-/- cp_stat: cmderr |
-- 00011 psw r/w/- processor status word access |
-- 00100 al r/w/- address register, low |
-- 00101 ah r/w/- address register, high |
-- 7 ubm r/w/- ubmap access |
-- 6 p22 r/w/- 22bit access |
-- 5:00 addr r/w/- addr(21:16) |
-- 00110 mem r/w/- memory access |
-- 00111 memi r/w/- memory access, inc address |
-- 01rrr gpr[] r/w/- general purpose regs |
-- 10000 membe r/w/- memory write byte enables |
-- 3 stick r/w/- sticky flag |
-- 1:00 be r/w/- byte enables |
-- bbb00010 stat r/-/- cpu status |
-- 7:04 cpurust r/-/- cp_stat: cpurust |
-- 3 cpuhalt r/-/- cp_stat: cpuhalt |
-- 2 cpugo r/-/- cp_stat: cpugo |
-- 1 cmdmerr r/-/- cp_stat: cmdmerr |
-- 0 cmderr r/-/- cp_stat: cmderr |
-- bbb00011 psw r/w/- processor status word access |
-- bbb00100 al r/w/- address register, low |
-- bbb00101 ah r/w/- address register, high |
-- 7 ubm r/w/- ubmap access |
-- 6 p22 r/w/- 22bit access |
-- 5: 0 addr r/w/- addr(21:16) |
-- bbb00110 mem r/w/- memory access |
-- bbb00111 memi r/w/- memory access, inc address |
-- bbb01rrr gpr[] r/w/- general purpose regs |
-- bbb10000 ibrb r/w/- ibr base address |
-- 12:06 base r/w/- ibr window base address |
-- 1:00 we r/w/- byte enables (00 equivalent to 11) |
-- www----- ibr[] r/w/- ibr window (32 words) |
-- |
|
library ieee; |
100,8 → 94,8
|
entity pdp11_core_rbus is -- core to rbus interface |
generic ( |
RB_ADDR_CORE : slv16 := slv(to_unsigned(16#0000#,16)); |
RB_ADDR_IBUS : slv16 := slv(to_unsigned(16#4000#,16))); |
RB_ADDR_CORE : slv16 := slv(to_unsigned(2#0000000000000000#,16)); |
RB_ADDR_IBUS : slv16 := slv(to_unsigned(2#0000000010000000#,16))); |
port ( |
CLK : in slbit; -- clock |
RESET : in slbit; -- reset |
137,8 → 131,9
addr : slv22_1; -- address register |
ena_22bit : slbit; -- 22bit enable |
ena_ubmap : slbit; -- ubmap enable |
membe : slv2; -- memory write byte enables |
membestick : slbit; -- memory write byte enables sticky |
ibrbase : slv(c_ibrb_ibf_base); -- ibr base address |
ibrbe : slv2; -- ibr byte enables |
ibrberet : slv2; -- ibr byte enables (for readback) |
doinc : slbit; -- at cmdack: do addr reg inc |
waitstep : slbit; -- at cmdack: wait for cpu step complete |
end record regs_type; |
151,7 → 146,7
'0', -- cpugo_1 |
(others=>'0'), -- addr |
'0','0', -- ena_22bit, ena_ubmap |
"11",'0', -- membe,membestick |
(others=>'0'),"00","00", -- ibrbase, ibrbe, ibrberet |
'0','0' -- doinc, waitstep |
); |
|
217,7 → 212,7
if RB_MREQ.addr(15 downto 5)=RB_ADDR_CORE(15 downto 5) then |
n.rbselc := '1'; |
end if; |
if RB_MREQ.addr(15 downto 12)=RB_ADDR_IBUS(15 downto 12) then |
if RB_MREQ.addr(15 downto 5)=RB_ADDR_IBUS(15 downto 5) then |
n.rbseli := '1'; |
end if; |
end if; |
258,7 → 253,7
end if; |
end if; |
|
when c_rbaddr_stat => -- stat ------------------ |
when c_rbaddr_stat => -- stat ------------------------- |
irb_dout(c_stat_rbf_cmderr) := CP_STAT.cmderr; |
irb_dout(c_stat_rbf_cmdmerr) := CP_STAT.cmdmerr; |
irb_dout(c_stat_rbf_cpugo) := CP_STAT.cpugo; |
265,7 → 260,7
irb_dout(c_stat_rbf_cpuhalt) := CP_STAT.cpuhalt; |
irb_dout(c_stat_rbf_cpurust) := CP_STAT.cpurust; |
|
when c_rbaddr_psw => -- psw ------------------- |
when c_rbaddr_psw => -- psw -------------------------- |
if irbena = '1' then |
n.cpfunc := c_cpfunc_rpsw; |
n.cpfunc(0) := RB_MREQ.we; |
272,7 → 267,7
icpreq := '1'; |
end if; |
|
when c_rbaddr_al => -- al -------------------- |
when c_rbaddr_al => -- al --------------------------- |
irb_dout(c_al_rbf_addr) := r.addr(c_al_rbf_addr); |
if RB_MREQ.we = '1' then |
n.addr := (others=>'0'); -- write to al clears ah !! |
281,7 → 276,7
n.addr(c_al_rbf_addr) := RB_MREQ.din(c_al_rbf_addr); |
end if; |
|
when c_rbaddr_ah => -- ah -------------------- |
when c_rbaddr_ah => -- ah --------------------------- |
irb_dout(c_ah_rbf_ena_ubmap) := r.ena_ubmap; |
irb_dout(c_ah_rbf_ena_22bit) := r.ena_22bit; |
irb_dout(c_ah_rbf_addr) := r.addr(21 downto 16); |
291,7 → 286,7
n.ena_ubmap := RB_MREQ.din(c_ah_rbf_ena_ubmap); |
end if; |
|
when c_rbaddr_mem => -- mem ------------------- |
when c_rbaddr_mem => -- mem ----------------- |
if irbena = '1' then |
n.cpfunc := c_cpfunc_rmem; |
n.cpfunc(0) := RB_MREQ.we; |
298,7 → 293,7
icpreq := '1'; |
end if; |
|
when c_rbaddr_memi => -- memi ------------------ |
when c_rbaddr_memi => -- memi ---------------- |
if irbena = '1' then |
n.cpfunc := c_cpfunc_rmem; |
n.cpfunc(0) := RB_MREQ.we; |
309,7 → 304,7
when c_rbaddr_r0 | c_rbaddr_r1 | |
c_rbaddr_r2 | c_rbaddr_r3 | |
c_rbaddr_r4 | c_rbaddr_r5 | |
c_rbaddr_sp | c_rbaddr_pc => -- r* ----------------- |
c_rbaddr_sp | c_rbaddr_pc => -- r* ------------------ |
if irbena = '1' then |
n.cpfunc := c_cpfunc_rreg; |
n.cpfunc(0) := RB_MREQ.we; |
316,12 → 311,17
icpreq := '1'; |
end if; |
|
when c_rbaddr_membe => -- membe ----------------- |
irb_dout(c_membe_rbf_be) := r.membe; |
irb_dout(c_membe_rbf_stick) := r.membestick; |
when c_rbaddr_ibrb => -- ibrb ---------------- |
irb_dout(c_ibrb_ibf_base) := r.ibrbase; |
irb_dout(c_ibrb_ibf_be) := r.ibrberet; |
if RB_MREQ.we = '1' then |
n.membe := RB_MREQ.din(c_membe_rbf_be); |
n.membestick := RB_MREQ.din(c_membe_rbf_stick); |
n.ibrbase := RB_MREQ.din(c_ibrb_ibf_base); |
n.ibrberet := RB_MREQ.din(c_ibrb_ibf_be); |
if RB_MREQ.din(c_ibrb_ibf_be) = "00" then -- both be=0 ? |
n.ibrbe := "11"; |
else -- otherwise take 2 LSB's |
n.ibrbe := RB_MREQ.din(c_ibrb_ibf_be); |
end if; |
end if; |
|
when others => |
341,19 → 341,11
n.cpreq := '0'; -- cpreq only for 1 cycle |
|
if (r.rbselc or r.rbseli)='0' or irbena='0' then -- rbus cycle abort |
if r.cpfunc = c_cpfunc_wmem and -- if wmem command |
r.membestick = '0' then -- and be's not sticky |
n.membe := "11"; -- re-enable both bytes |
end if; |
n.state := s_idle; -- quit |
else |
irb_dout := CP_DOUT; |
irb_err := CP_STAT.cmderr or CP_STAT.cmdmerr; |
if CP_STAT.cmdack = '1' then -- normal cycle end |
if r.cpfunc = c_cpfunc_wmem and -- if wmem command |
r.membestick = '0' then -- and be's not sticky |
n.membe := "11"; -- re-enable both bytes |
end if; |
if r.doinc = '1' then |
n.addr := slv(unsigned(r.addr) + 1); |
end if; |
382,18 → 374,19
when others => null; |
end case; |
|
icpaddr := cp_addr_init; |
icpaddr.be := r.membe; |
icpaddr := cp_addr_init; |
icpaddr.addr := r.addr; |
icpaddr.racc := '0'; |
icpaddr.be := "11"; |
icpaddr.ena_22bit := r.ena_22bit; |
icpaddr.ena_ubmap := r.ena_ubmap; |
|
if r.rbseli = '0' then -- access via cp |
icpaddr.addr := r.addr; |
icpaddr.racc := '0'; |
icpaddr.ena_22bit := r.ena_22bit; |
icpaddr.ena_ubmap := r.ena_ubmap; |
else -- access via ibus window |
icpaddr.addr(15 downto 13) := "111"; |
icpaddr.addr(12 downto 1) := RB_MREQ.addr(11 downto 0); |
if r.rbseli = '1' and irbena = '1' then |
icpaddr.addr(15 downto 13) := "111"; |
icpaddr.addr(c_ibrb_ibf_base) := r.ibrbase; |
icpaddr.addr(5 downto 1) := RB_MREQ.addr(4 downto 0); |
icpaddr.racc := '1'; |
icpaddr.be := r.ibrbe; |
icpaddr.ena_22bit := '0'; |
icpaddr.ena_ubmap := '0'; |
end if; |
410,8 → 403,8
RB_SRES.busy <= irb_busy; |
RB_SRES.dout <= irb_dout; |
|
RB_STAT(3) <= CP_STAT.cmderr; |
RB_STAT(2) <= CP_STAT.cmdmerr; |
RB_STAT(3) <= '0'; |
RB_STAT(2) <= CP_STAT.cmderr or CP_STAT.cmdmerr; |
RB_STAT(1) <= CP_STAT.cpuhalt or CP_STAT.cpurust(CP_STAT.cpurust'left); |
RB_STAT(0) <= CP_STAT.cpugo; |
|
/rtl/w11a/pdp11.vhd
1,4 → 1,4
-- $Id: pdp11.vhd 621 2014-12-26 21:20:05Z mueller $ |
-- $Id: pdp11.vhd 589 2014-08-30 12:43:16Z mueller $ |
-- |
-- Copyright 2006-2014 by Walter F.J. Mueller <W.F.J.Mueller@gsi.de> |
-- |
562,7 → 562,7
|
type cp_addr_type is record -- control port address |
addr : slv22_1; -- address |
racc : slbit; -- ibus remote access |
racc : slbit; -- ibr access |
be : slv2; -- byte enables |
ena_22bit : slbit; -- enable 22 bit mode |
ena_ubmap : slbit; -- enable unibus mapper |
650,12 → 650,12
constant c_rbaddr_sp : slv5 := "01110"; -- R/W gpr 6 (sp) |
constant c_rbaddr_pc : slv5 := "01111"; -- R/W gpr 7 (pc) |
|
constant c_rbaddr_membe: slv5 := "10000"; -- R/W memory write byte enables |
constant c_rbaddr_ibrb : slv5 := "10000"; -- R/W ibr base address |
|
subtype c_al_rbf_addr is integer range 15 downto 1; -- al: address |
constant c_ah_rbf_ena_ubmap: integer := 7; -- ah: ubmap |
constant c_ah_rbf_ena_22bit: integer := 6; -- ah: 22bit |
subtype c_ah_rbf_addr is integer range 5 downto 0; -- ah: address |
subtype c_al_rbf_addr is integer range 15 downto 1; -- al: address |
constant c_ah_rbf_ena_ubmap: integer := 7; -- ah: ubmap |
constant c_ah_rbf_ena_22bit: integer := 6; -- ah: 22bit |
subtype c_ah_rbf_addr is integer range 5 downto 0; -- ah: address |
|
constant c_stat_rbf_cmderr: integer := 0; -- stat field: cmderr |
constant c_stat_rbf_cmdmerr: integer := 1; -- stat field: cmdmerr |
663,9 → 663,9
constant c_stat_rbf_cpuhalt: integer := 3; -- stat field: cpuhalt |
subtype c_stat_rbf_cpurust is integer range 7 downto 4; -- cpurust |
|
subtype c_membe_rbf_be is integer range 1 downto 0; -- membe: be's |
constant c_membe_rbf_stick: integer := 2; -- membe: sticky flag |
|
subtype c_ibrb_ibf_base is integer range 12 downto 6; -- ibrb: base addr |
subtype c_ibrb_ibf_be is integer range 1 downto 0; -- ibrb: be's |
|
-- ------------------------------------- |
|
component pdp11_gpr is -- general purpose registers |
1082,8 → 1082,8
|
component pdp11_core_rbus is -- core to rbus interface |
generic ( |
RB_ADDR_CORE : slv16 := slv(to_unsigned(16#0000#,16)); |
RB_ADDR_IBUS : slv16 := slv(to_unsigned(16#4000#,16))); |
RB_ADDR_CORE : slv16 := slv(to_unsigned(2#0000000000000000#,16)); |
RB_ADDR_IBUS : slv16 := slv(to_unsigned(2#0000000010000000#,16))); |
port ( |
CLK : in slbit; -- clock |
RESET : in slbit; -- reset |
/rtl/vlib/rlink/rlinklib.vhd
1,4 → 1,4
-- $Id: rlinklib.vhd 617 2014-12-21 14:18:53Z mueller $ |
-- $Id: rlinklib.vhd 610 2014-12-09 22:44:43Z mueller $ |
-- |
-- Copyright 2007-2014 by Walter F.J. Mueller <W.F.J.Mueller@gsi.de> |
-- |
20,7 → 20,6
-- |
-- Revision History: |
-- Date Rev Version Comment |
-- 2014-12-21 617 4.1 use stat(2) to signal rbus timeout |
-- 2014-10-12 596 4.0 now rlink v4.0 iface, 4 bit STAT |
-- 2014-08-15 583 3.5 rb_mreq addr now 16 bit |
-- 2013-04-21 509 3.3.2 add rlb_moni record definition |
82,8 → 81,7
|
subtype c_rlink_stat_rbf_stat is integer range 7 downto 4; -- ext status bits |
constant c_rlink_stat_rbf_attn: integer := 3; -- attention flags set |
constant c_rlink_stat_rbf_rbtout: integer := 2; -- rbus timeout |
constant c_rlink_stat_rbf_rbnak: integer := 1; -- rbus no ack |
constant c_rlink_stat_rbf_rbnak: integer := 1; -- rbus no ack or timeout |
constant c_rlink_stat_rbf_rberr: integer := 0; -- rbus err bit set |
|
constant c_rlink_nakcode_ccrc : slv3 := "000"; -- cmd crc error |
/rtl/vlib/rlink/tb/tb_rlink_stim.dat
1,8 → 1,7
# $Id: tb_rlink_stim.dat 617 2014-12-21 14:18:53Z mueller $ |
# $Id: tb_rlink_stim.dat 596 2014-10-17 19:50:07Z mueller $ |
# |
# Revision History: |
# Date Rev Version Comment |
# 2014-12-21 617 4.0.1 rlink signals now tout and nak on separate stat bits |
# 2014-10-12 596 4.0 rewritten for rlink v4 |
# ... all history v1->v3 droped |
# 2007-06-17 58 1.0 Initial version |
317,9 → 316,9
C with data |
sop |
wreg 0 x"ffe0" x"03ff" 00000000 -- cntl := (nbusy=1023) |
wreg 1 x"ffe4" x"1234" 00000100 -- data := 1234 |
wreg 1 x"ffe4" x"1234" 00000010 -- data := 1234 |
rreg 2 x"ffe3" x"0020" 00000000 -- ncyc >? 0020 (ncyc=TO(32)) |
rreg 3 x"ffe4" x"5555" 00000100 -- data >? 5555 |
rreg 3 x"ffe4" x"5555" 00000010 -- data >? 5555 |
rreg 4 x"ffe3" x"0020" 00000000 -- ncyc >? 0020 (ncyc=TO(32)) |
eop |
.iowt 10 |
326,9 → 325,9
# |
C with dinc |
sop |
wreg 0 x"ffe5" x"1234" 00000100 -- dinc := 1234 |
wreg 0 x"ffe5" x"1234" 00000010 -- dinc := 1234 |
rreg 1 x"ffe3" x"0020" 00000000 -- ncyc >? 0020 (ncyc=TO(32)) |
rreg 2 x"ffe5" x"5555" 00000100 -- dinc >? 5555 |
rreg 2 x"ffe5" x"5555" 00000010 -- dinc >? 5555 |
rreg 3 x"ffe3" x"0020" 00000000 -- ncyc >? 0020 (ncyc=TO(32)) |
eop |
.iowt 10 |
335,9 → 334,9
# |
C with fifo |
sop |
wreg 0 x"ffe6" x"3300" 00000100 -- fifo := 3300 |
wreg 0 x"ffe6" x"3300" 00000010 -- fifo := 3300 |
rreg 1 x"ffe3" x"0020" 00000000 -- ncyc >? 0020 (ncyc=TO(32)) |
rreg 2 x"ffe6" x"5555" 00000100 -- fifo >? 5555 |
rreg 2 x"ffe6" x"5555" 00000010 -- fifo >? 5555 |
rreg 3 x"ffe3" x"0020" 00000000 -- ncyc >? 0020 (ncyc=TO(32)) |
eop |
.iowt 10 |
344,9 → 343,9
# |
C with lnak |
sop |
wreg 0 x"ffe7" x"aaaa" 00000100 -- lnak := aaaa {nak=1} |
wreg 0 x"ffe7" x"aaaa" 00000010 -- lnak := aaaa {nak=1} |
rreg 1 x"ffe3" x"0020" 00000000 -- ncyc >? 0020 (ncyc=TO(32)) |
rreg 2 x"ffe7" x"5555" 00000100 -- lnak >? 5555 {nak=1} |
rreg 2 x"ffe7" x"5555" 00000010 -- lnak >? 5555 {nak=1} |
rreg 3 x"ffe3" x"0020" 00000000 -- ncyc >? 0020 (ncyc=TO(32)) |
eop |
.iowt 10 |
/rtl/vlib/rlink/rlink_core.vhd
1,4 → 1,4
-- $Id: rlink_core.vhd 620 2014-12-25 10:48:35Z mueller $ |
-- $Id: rlink_core.vhd 614 2014-12-20 15:00:45Z mueller $ |
-- |
-- Copyright 2007-2014 by Walter F.J. Mueller <W.F.J.Mueller@gsi.de> |
-- |
38,7 → 38,6
-- |
-- Revision History: |
-- Date Rev Version Comment |
-- 2014-12-21 617 4.1 use stat(_rbf_rbtout) to signal rbus timeout |
-- 2014-12-20 614 4.0 largely rewritten; 2 FSMs; v3 protocol; 4 bit STAT |
-- 2014-08-15 583 3.5 rb_mreq addr now 16 bit; add s_rxaddrl state |
-- 2011-11-19 427 3.1.3 now numeric_std clean |
185,8 → 184,8
end entity rlink_core; |
|
architecture syn of rlink_core is |
-- core config registers (top 4 in rbus space) |
constant rbaddr : slv16 := x"fffc"; -- fffc/4: 1111 1111 1111 11xx |
|
constant rbaddr : slv16:= "1111111111111100"; -- core config base (top 4) |
constant rbaddr_cntl : slv2 := "11"; -- cntl address offset |
constant rbaddr_stat : slv2 := "10"; -- stat address offset |
constant rbaddr_id1 : slv2 := "01"; -- id1 address offset |
346,8 → 345,7
rbre : slbit; -- rbus re signal |
rbwe : slbit; -- rbus we signal |
rbdout : slv16; -- rbus dout |
rbtout: slbit; -- rbus timeout |
rbnak: slbit; -- rbus no ack |
rbnak: slbit; -- rbus no ack or timeout |
rberr : slbit; -- rbus err bit set |
blkabo : slbit; -- blk abort |
cnt : slv(cntawidth-1 downto 0); -- word count for rblk and wblk |
365,7 → 363,7
sb_idle, -- state |
'0','0','0','0', -- rbinit,rbaval,rbre,rbwe |
(others=>'0'), -- rbdout |
'0','0','0', -- rbtout,rbnak,rberr |
'0','0', -- rbnak,rberr |
'0', -- blkabo |
cnt_zero, -- cnt |
cnt_zero, -- dcnt |
1118,7 → 1116,7
n.state := sl_txdcntl; -- next: send dcnt lsb |
|
when sl_txdcntl => -- sl_txdcntl: send dcnt lsb --------- |
n.babo := R_BREGS.blkabo; -- remember blk abort |
n.babo := R_BREGS.rbnak or R_BREGS.rberr; -- remember blk abort |
ido := '0' & R_BREGS.dcnt(f_byte0); -- send dcnt lsb |
ival := '1'; |
if RL_HOLD = '0' then -- wait for accept |
1154,11 → 1152,10
n.state := sl_txcntl; -- next: send cnt lsb (holding attn) |
|
when sl_txstat => -- sl_txstat: send status ------------ |
ido(c_rlink_stat_rbf_stat) := R_BREGS.stat; |
ido(c_rlink_stat_rbf_attn) := has_attn; |
ido(c_rlink_stat_rbf_rbtout) := R_BREGS.rbtout; |
ido(c_rlink_stat_rbf_rbnak) := R_BREGS.rbnak; |
ido(c_rlink_stat_rbf_rberr) := R_BREGS.rberr; |
ido(c_rlink_stat_rbf_stat) := R_BREGS.stat; |
ido(c_rlink_stat_rbf_attn) := has_attn; |
ido(c_rlink_stat_rbf_rbnak) := R_BREGS.rbnak; |
ido(c_rlink_stat_rbf_rberr) := R_BREGS.rberr; |
ival := '1'; |
if RL_HOLD ='0' then -- wait for accept |
irtwea := '1'; |
1346,9 → 1343,8
when sb_idle => -- sb_idle: wait for cmd ------------ |
if L2B_GO = '1' then -- if cmd seen |
n.stat := RB_STAT; -- always latch external status bits |
n.rbtout := '0'; |
n.rbnak := '0'; |
n.rberr := '0'; |
n.rbnak := '0'; |
n.rberr := '0'; |
n.blkabo := '0'; |
n.dathpend := '0'; |
dcnt_clear := '1'; |
1383,13 → 1379,13
n.rbaval := '1'; -- extend aval |
bto_go := '1'; -- activate rbus timeout counter |
if RB_SRES_TOT.err = '1' then -- latch rbus error flag |
n.rberr := '1'; |
n.rberr := '1'; |
n.blkabo := '1'; |
end if; |
n.rbdout := RB_SRES_TOT.dout; -- latch data (follow till valid) |
if RB_SRES_TOT.busy='0' or bto_end='1' then -- wait non-busy or timeout |
if RB_SRES_TOT.busy='1' and bto_end='1' then -- if timeout and busy |
n.rbtout := '1'; -- set rbus timeout flag |
n.rbnak := '1'; -- set rbus nak flag |
n.blkabo := '1'; |
elsif RB_SRES_TOT.ack = '0' then -- if non-busy and no ack |
n.rbnak := '1'; -- set rbus nak flag |
1462,12 → 1458,12
n.rbaval := '1'; -- extend aval |
bto_go := '1'; -- activate rbus timeout counter |
if RB_SRES_TOT.err = '1' then -- latch rbus error flag |
n.rberr := '1'; |
n.rberr := '1'; |
n.blkabo := '1'; |
end if; |
if RB_SRES_TOT.busy='0' or bto_end='1' then -- wait non-busy or timeout |
if RB_SRES_TOT.busy='1' and bto_end='1' then -- if timeout and busy |
n.rbtout := '1'; -- set rbus timeout flag |
n.rbnak := '1'; -- set rbus nak flag |
n.blkabo := '1'; |
elsif RB_SRES_TOT.ack='0' then -- if non-busy and no ack |
n.rbnak := '1'; -- set rbus nak flag |
/rtl/vlib/rbus/rbd_rbmon.vhd
1,4 → 1,4
-- $Id: rbd_rbmon.vhd 620 2014-12-25 10:48:35Z mueller $ |
-- $Id: rbd_rbmon.vhd 593 2014-09-14 22:21:33Z mueller $ |
-- |
-- Copyright 2010-2014 by Walter F.J. Mueller <W.F.J.Mueller@gsi.de> |
-- |
24,15 → 24,12
-- |
-- Synthesized (xst): |
-- Date Rev ise Target flop lutl lutm slic t peri |
-- 2014-12-22 619 14.7 131013 xc6slx16-2 114 209 - 72 s 5.6 |
-- 2014-12-21 593 14.7 131013 xc6slx16-2 99 207 - 77 s 7.0 |
-- 2010-12-27 349 12.1 M53d xc3s1000-4 95 228 - 154 s 10.4 |
-- |
-- Revision History: |
-- Date Rev Version Comment |
-- 2014-12-22 619 5.0 reorganized, supports now 16 bit addresses |
-- 2014-09-13 593 4.1 change default address -> ffe8 |
-- 2014-08-15 583 4.0 rb_mreq addr now 16 bit (but only 8 bit recorded) |
-- 2014-08-15 583 4.0 rb_mreq addr now 16 bit |
-- 2011-11-19 427 1.0.3 now numeric_std clean |
-- 2011-03-27 374 1.0.2 rename ncyc -> nbusy because it counts busy cycles |
-- 2010-12-31 352 1.0.1 simplify irb_ack logic |
39,34 → 36,31
-- 2010-12-27 349 1.0 Initial version |
------------------------------------------------------------------------------ |
-- |
-- Addr Bits Name r/w/f Function |
-- 000 cntl r/w/f Control register |
-- 02 wena r/w/- wrap enable |
-- 01 stop r/w/f writing 1 stops moni |
-- 00 start r/w/f writing 1 starts moni and clears addr |
-- 001 stat r/w/- Status register |
-- 00 wrap r/-/- line address wrapped (cleared on go) |
-- 010 hilim r/w/- upper address limit (def: 0xfffb) |
-- 011 lolim r/w/- lower address limit (def: 0x0000) |
-- 100 addr r/w/- Address register |
-- *:02 laddr r/w/- line address |
-- 01:00 waddr r/w/- word address |
-- 101 data r/w/- Data register |
-- Address Bits Name r/w/f Function |
-- bbbbbb00 cntl r/w/f Control register |
-- 00 go r/w/f writing 1 clears add |
-- bbbbbb01 alim r/w/- Address limit register |
-- 15:08 hilim r/w/- upper address limit (def: ff) |
-- 07:00 lolim r/w/- lower address limit (def: 00) |
-- bbbbbb10 addr r/w/- Address register |
-- 15 wrap r/0/- line address wrapped (cleared on write) |
-- *:02 laddr r/w/- line address |
-- 01:00 waddr r/w/- word address |
-- bbbbbb11 data r/w/- Data register |
-- |
-- data format: |
-- word 3 15 : burst (2nd re/we in a aval sequence) |
-- 14 : tout (busy in last re-we cycle) |
-- 13 : nak (no ack in last non-busy cycle) |
-- 12 : ack (ack seen) |
-- 11 : busy (busy seen) |
-- 10 : err (err seen) |
-- 09 : we (write cycle) |
-- 08 : init (init cycle) |
-- 07:00 : delay to prev (msb's) |
-- word 2 15:10 : delay to prev (lsb's) |
-- 09:00 : number of busy cycles |
-- word 1 : data |
-- word 0 : addr |
-- word 3 15 : ack |
-- 14 : busy |
-- 13 : err |
-- 12 : nak |
-- 11 : tout |
-- 09 : init |
-- 08 : we |
-- 07:00 : addr |
-- word 2 data |
-- word 1 15:00 : delay to prev (lsb's) |
-- word 0 15:12 : delay to prev (msb's) |
-- 11:00 : number of busy cycles |
-- |
|
|
94,44 → 88,39
|
architecture syn of rbd_rbmon is |
|
constant rbaddr_cntl : slv3 := "000"; -- cntl address offset |
constant rbaddr_stat : slv3 := "001"; -- stat address offset |
constant rbaddr_hilim : slv3 := "010"; -- hilim address offset |
constant rbaddr_lolim : slv3 := "011"; -- lolim address offset |
constant rbaddr_addr : slv3 := "100"; -- addr address offset |
constant rbaddr_data : slv3 := "101"; -- data address offset |
constant rbaddr_cntl : slv2 := "00"; -- cntl address offset |
constant rbaddr_alim : slv2 := "01"; -- alim address offset |
constant rbaddr_addr : slv2 := "10"; -- addr address offset |
constant rbaddr_data : slv2 := "11"; -- data address offset |
|
constant cntl_rbf_wena : integer := 2; |
constant cntl_rbf_stop : integer := 1; |
constant cntl_rbf_start : integer := 0; |
subtype stat_rbf_bsize is integer range 15 downto 13; |
constant stat_rbf_wrap : integer := 0; |
constant cntl_rbf_go : integer := 0; |
subtype alim_rbf_hilim is integer range 15 downto 8; |
subtype alim_rbf_lolim is integer range 7 downto 0; |
constant addr_rbf_wrap : integer := 15; |
subtype addr_rbf_laddr is integer range 2+AWIDTH-1 downto 2; |
subtype addr_rbf_waddr is integer range 1 downto 0; |
|
constant dat3_rbf_burst : integer := 15; |
constant dat3_rbf_tout : integer := 14; |
constant dat3_rbf_nak : integer := 13; |
constant dat3_rbf_ack : integer := 12; |
constant dat3_rbf_busy : integer := 11; |
constant dat3_rbf_err : integer := 10; |
constant dat3_rbf_we : integer := 9; |
constant dat3_rbf_init : integer := 8; |
subtype dat3_rbf_ndlymsb is integer range 7 downto 0; |
subtype dat2_rbf_ndlylsb is integer range 15 downto 10; |
subtype dat2_rbf_nbusy is integer range 9 downto 0; |
constant dat3_rbf_ack : integer := 15; |
constant dat3_rbf_busy : integer := 14; |
constant dat3_rbf_err : integer := 13; |
constant dat3_rbf_nak : integer := 12; |
constant dat3_rbf_tout : integer := 11; |
constant dat3_rbf_init : integer := 9; |
constant dat3_rbf_we : integer := 8; |
subtype dat3_rbf_addr is integer range 7 downto 0; |
subtype dat0_rbf_ndlymsb is integer range 15 downto 12; |
subtype dat0_rbf_nbusy is integer range 11 downto 0; |
|
type regs_type is record -- state registers |
rbsel : slbit; -- rbus select |
wena : slbit; -- wena flag (wrap enable) |
go : slbit; -- go flag |
hilim : slv16; -- upper address limit |
lolim : slv16; -- lower address limit |
hilim : slv8; -- upper address limit |
lolim : slv8; -- lower address limit |
wrap : slbit; -- laddr wrap flag |
laddr : slv(AWIDTH-1 downto 0); -- line address |
waddr : slv2; -- word address |
rbtake_1 : slbit; -- rb capture active in last cycle |
rbaddr : slv16; -- rbus trace: addr |
rbaddr : slv8; -- rbus trace: addr |
rbinit : slbit; -- rbus trace: init |
rbwe : slbit; -- rbus trace: we |
rback : slbit; -- rbus trace: ack seen |
139,10 → 128,9
rberr : slbit; -- rbus trace: err seen |
rbnak : slbit; -- rbus trace: nak detected |
rbtout : slbit; -- rbus trace: tout detected |
rbburst : slbit; -- rbus trace: burst detected |
rbdata : slv16; -- rbus trace: data |
rbnbusy : slv10; -- rbus number of busy cycles |
rbndly : slv14; -- rbus delay to prev. access |
rbnbusy : slv12; -- rbus number of busy cycles |
rbndly : slv20; -- rbus delay to prev. access |
end record regs_type; |
|
constant laddrzero : slv(AWIDTH-1 downto 0) := (others=>'0'); |
150,9 → 138,9
|
constant regs_init : regs_type := ( |
'0', -- rbsel |
'0','0', -- wena,go |
x"fffb", -- hilim (def: fffb) |
x"0000", -- lolim (def: 0000) |
'0', -- go (default is off) |
(others=>'1'), -- hilim (def: ff) |
(others=>'0'), -- lolim (def: 00) |
'0', -- wrap |
laddrzero, -- laddr |
"00", -- waddr |
159,14 → 147,14
'0', -- rbtake_1 |
(others=>'0'), -- rbaddr |
'0','0','0','0','0', -- rbinit,rbwe,rback,rbbusy,rberr |
'0','0','0', -- rbnak,rbtout,rbburst |
'0','0', -- rbnak,rbtout |
(others=>'0'), -- rbdata |
(others=>'0'), -- rbnbusy |
(others=>'0') -- rbndly |
); |
|
constant rbnbusylast : slv10 := (others=>'1'); |
constant rbndlylast : slv14 := (others=>'1'); |
constant rbnbusylast : slv12 := (others=>'1'); |
constant rbndlylast : slv20 := (others=>'1'); |
|
signal R_REGS : regs_type := regs_init; |
signal N_REGS : regs_type := regs_init; |
180,8 → 168,8
|
begin |
|
assert AWIDTH>=9 and AWIDTH<=14 |
report "assert(AWIDTH>=9 and AWIDTH<=14): unsupported AWIDTH" |
assert AWIDTH<=13 |
report "assert(AWIDTH<=13): max address width supported" |
severity failure; |
|
BRAM1 : ram_1swsr_wfirst_gen |
229,8 → 217,8
variable irb_err : slbit := '0'; |
variable irb_dout : slv16 := (others=>'0'); |
variable irbena : slbit := '0'; |
variable ibramen : slbit := '0'; -- BRAM enable |
variable ibramwe : slbit := '0'; -- BRAN we |
variable ibramen : slbit := '0'; |
variable ibramwe : slbit := '0'; |
variable rbtake : slbit := '0'; |
variable laddr_inc : slbit := '0'; |
variable idat0 : slv16 := (others=>'0'); |
256,7 → 244,7
|
-- rbus address decoder |
n.rbsel := '0'; |
if RB_MREQ.aval='1' and RB_MREQ.addr(15 downto 3)=RB_ADDR(15 downto 3) then |
if RB_MREQ.aval='1' and RB_MREQ.addr(15 downto 2)=RB_ADDR(15 downto 2) then |
n.rbsel := '1'; |
ibramen := '1'; |
end if; |
264,38 → 252,28
-- rbus transactions |
if r.rbsel = '1' then |
|
irb_ack := irbena; -- ack all accesses |
irb_ack := irbena; -- ack all accesses |
|
case RB_MREQ.addr(2 downto 0) is |
case RB_MREQ.addr(1 downto 0) is |
|
when rbaddr_cntl => -- cntl ------------------ |
when rbaddr_cntl => |
if RB_MREQ.we = '1' then |
n.wena := RB_MREQ.din(cntl_rbf_wena); |
if RB_MREQ.din(cntl_rbf_start) = '1' then |
n.go := '1'; |
n.go := RB_MREQ.din(cntl_rbf_go); |
if RB_MREQ.din(cntl_rbf_go)='1' then |
n.wrap := '0'; |
n.laddr := laddrzero; |
n.waddr := "00"; |
end if; |
if RB_MREQ.din(cntl_rbf_stop) = '1' then |
n.go := '0'; |
end if; |
end if; |
|
when rbaddr_stat => null; -- stat ------------------ |
|
when rbaddr_hilim => -- hilim ----------------- |
when rbaddr_alim => |
if RB_MREQ.we = '1' then |
n.hilim := RB_MREQ.din; |
n.hilim := RB_MREQ.din(alim_rbf_hilim); |
n.lolim := RB_MREQ.din(alim_rbf_lolim); |
end if; |
|
when rbaddr_lolim => -- lolim ----------------- |
when rbaddr_addr => |
if RB_MREQ.we = '1' then |
n.lolim := RB_MREQ.din; |
end if; |
|
when rbaddr_addr => -- addr ------------------ |
if RB_MREQ.we = '1' then |
n.go := '0'; |
n.wrap := '0'; |
n.laddr := RB_MREQ.din(addr_rbf_laddr); |
302,7 → 280,7
n.waddr := RB_MREQ.din(addr_rbf_waddr); |
end if; |
|
when rbaddr_data => -- data ------------------ |
when rbaddr_data => |
if r.go='1' or RB_MREQ.we='1' then |
irb_err := '1'; |
end if; |
313,29 → 291,23
end if; |
end if; |
|
when others => -- <> -------------------- |
irb_err := '1'; |
|
when others => null; |
end case; |
end if; |
|
-- rbus output driver |
if r.rbsel = '1' then |
case RB_MREQ.addr(2 downto 0) is |
when rbaddr_cntl => -- cntl ------------------ |
irb_dout(cntl_rbf_wena) := r.wena; |
irb_dout(cntl_rbf_start) := r.go; |
when rbaddr_stat => -- stat ------------------ |
irb_dout(stat_rbf_bsize) := slv(to_unsigned(AWIDTH-9,3)); |
irb_dout(stat_rbf_wrap) := r.wrap; |
when rbaddr_hilim => -- hilim ----------------- |
irb_dout := r.hilim; |
when rbaddr_lolim => -- lolim ----------------- |
irb_dout := r.lolim; |
when rbaddr_addr => -- addr ------------------ |
case RB_MREQ.addr(1 downto 0) is |
when rbaddr_cntl => |
irb_dout(cntl_rbf_go) := r.go; |
when rbaddr_alim => |
irb_dout(alim_rbf_hilim) := r.hilim; |
irb_dout(alim_rbf_lolim) := r.lolim; |
when rbaddr_addr => |
irb_dout(addr_rbf_wrap) := r.wrap; |
irb_dout(addr_rbf_laddr) := r.laddr; |
irb_dout(addr_rbf_waddr) := r.waddr; |
when rbaddr_data => -- data ------------------ |
when rbaddr_data => |
case r.waddr is |
when "11" => irb_dout := BRAM1_DO(31 downto 16); |
when "10" => irb_dout := BRAM1_DO(15 downto 0); |
353,8 → 325,8
|
rbtake := '0'; |
if RB_MREQ.aval='1' and irbena='1' then -- aval and (re or we) |
if unsigned(RB_MREQ.addr)>=unsigned(r.lolim) and -- and in addr window |
unsigned(RB_MREQ.addr)<=unsigned(r.hilim) and |
if unsigned(RB_MREQ.addr(7 downto 0))>=unsigned(r.lolim) and -- and in addr window |
unsigned(RB_MREQ.addr(7 downto 0))<=unsigned(r.hilim) and |
r.rbsel='0' then -- and not self |
rbtake := '1'; |
end if; |
364,7 → 336,7
end if; |
|
if rbtake = '1' then -- if capture active |
n.rbaddr := RB_MREQ.addr; -- keep track of some state |
n.rbaddr := RB_MREQ.addr(7 downto 0); -- keep track of some state |
n.rbinit := RB_MREQ.init; |
n.rbwe := RB_MREQ.we; |
if RB_MREQ.init='1' or RB_MREQ.we='1' then -- for write/init of din |
394,7 → 366,6
ibramen := '1'; |
ibramwe := '1'; |
laddr_inc := '1'; |
n.rbburst := '1'; -- assume burst |
end if; |
if r.rbtake_1 = '1' then -- rbus transaction just ended |
n.rbndly := (others=>'0'); -- clear delay counter |
405,35 → 376,26
end if; |
end if; |
|
if RB_MREQ.aval = '0' then -- if aval gone |
n.rbburst := '0'; -- clear burst flag |
end if; |
|
if laddr_inc = '1' then |
n.laddr := slv(unsigned(r.laddr) + 1); |
if r.go='1' and r.laddr=laddrlast then |
if r.wena = '1' then |
n.wrap := '1'; |
else |
n.go := '0'; |
end if; |
n.wrap := '1'; |
end if; |
end if; |
|
idat3 := (others=>'0'); |
idat3(dat3_rbf_burst) := r.rbburst; |
idat3(dat3_rbf_tout) := r.rbtout; |
idat3(dat3_rbf_nak) := r.rbnak; |
idat3(dat3_rbf_ack) := r.rback; |
idat3(dat3_rbf_busy) := r.rbbusy; |
idat3(dat3_rbf_err) := r.rberr; |
idat3(dat3_rbf_we) := r.rbwe; |
idat3(dat3_rbf_init) := r.rbinit; |
idat3(dat3_rbf_ndlymsb):= r.rbndly(13 downto 6); |
idat2(dat2_rbf_ndlylsb):= r.rbndly( 5 downto 0); |
idat2(dat2_rbf_nbusy) := r.rbnbusy; |
idat1 := r.rbdata; |
idat0 := r.rbaddr; |
idat3(dat3_rbf_ack) := r.rback; |
idat3(dat3_rbf_busy) := r.rbbusy; |
idat3(dat3_rbf_err) := r.rberr; |
idat3(dat3_rbf_nak) := r.rbnak; |
idat3(dat3_rbf_tout) := r.rbtout; |
idat3(dat3_rbf_init) := r.rbinit; |
idat3(dat3_rbf_we) := r.rbwe; |
idat3(dat3_rbf_addr) := r.rbaddr; |
idat2 := r.rbdata; |
idat1 := r.rbndly(15 downto 0); |
idat0(dat0_rbf_ndlymsb) := r.rbndly(19 downto 16); |
idat0(dat0_rbf_nbusy) := r.rbnbusy; |
|
n.rbtake_1 := rbtake; |
|
/rtl/vlib/rbus/rbdlib.vhd
1,4 → 1,4
-- $Id: rbdlib.vhd 620 2014-12-25 10:48:35Z mueller $ |
-- $Id: rbdlib.vhd 603 2014-11-09 22:50:26Z mueller $ |
-- |
-- Copyright 2010-2014 by Walter F.J. Mueller <W.F.J.Mueller@gsi.de> |
-- |
43,8 → 43,11
|
package rbdlib is |
|
constant rbaddr_rbmon : slv16 := x"ffe8"; -- ffe8/8: 1111 1111 1110 1xxx |
constant rbaddr_tester : slv16 := x"ffe0"; -- ffe0/8: 1111 1111 1110 0xxx |
-- ise 13.1 xst can bug check if generic defaults in a package are defined via |
-- 'slv(to_unsigned())'. The conv_ construct prior to numeric_std was ok. |
-- As workaround the ibus default addresses are defined here as constant. |
constant rbaddr_tester : slv16 := slv(to_unsigned(16#ffe0#,16)); |
constant rbaddr_rbmon : slv16 := slv(to_unsigned(16#ffe8#,16)); |
|
component rbd_tester is -- rbus dev: rbus tester |
-- complete rbus_aif interface |
/doc/w11a_tb_guide.txt
1,4 → 1,4
# $Id: w11a_tb_guide.txt 622 2014-12-28 20:45:26Z mueller $ |
# $Id: w11a_tb_guide.txt 609 2014-12-07 19:35:25Z mueller $ |
|
Guide to running w11a test benches |
|
53,36 → 53,40
all the rest is handled by the build environment. |
An example of a post-synthesis model is given for the w11a core test. |
|
- for convenience a wrapper script 'tbrun_tbw' is used to generate the |
tbw|tee|egrep pipe. This script also checks with 'make' whether the |
test bench is up-to-date or must be (re)-compiled. |
|
2. Available unit tests benches ------------------------------------------- |
|
In the following the available tests are listed with their tbrun_tbw which |
- will call 'make' to build them |
- and create the pipe setup to run them |
and the expected output (the run time measured on a 3 GHz system) |
In the following the available tests are listed with |
- the 'make' command to build them |
- the pipe setup to run them |
- the expected output (the run time measured on a 3 GHz system) |
|
- serport receiver test |
cd $RETROBASE/rtl/vlib/serport/tb |
tbrun_tbw tb_serport_uart_rx |
make tb_serport_uart_rx |
time tbw tb_serport_uart_rx |\ |
tee tb_serport_uart_rx_dsim.log | egrep "(FAIL|DONE)" |
-> 1269955.0 ns 63488: DONE |
-> real 0m01.178s user 0m01.172s sys 0m00.020s |
|
- serport receiver/transmitter test |
tbrun_tbw tb_serport_uart_rxtx |
make tb_serport_uart_rxtx |
time tbw tb_serport_uart_rxtx |\ |
tee tb_serport_uart_rxtx_dsim.log | egrep "(FAIL|DONE)" |
-> 52335.0 ns 2607: DONE |
-> real 0m00.094s user 0m00.092s sys 0m00.008s |
|
- serport autobauder test |
tbrun_tbw tb_serport_autobaud |
make tb_serport_autobaud |
time tbw tb_serport_autobaud |\ |
tee tb_serport_autobaud_dsim.log | egrep "(FAIL|DONE)" |
-> 367475.0 ns 18364: DONE |
-> real 0m00.610s user 0m00.612s sys 0m00.004s |
|
- 9 bit comma,data to Byte stream converter test |
cd $RETROBASE/rtl/vlib/comlib/tb |
tbrun_tbw tb_cdata2byte |
make tb_cdata2byte |
time tbw tb_cdata2byte |\ |
tee tb_cdata2byte_dsim.log | egrep "(FAIL|DONE)" |
-> 7261.0 ns 354: DONE |
-> real 0m0.385s user 0m0.041s sys 0m0.006s |
|
89,7 → 93,9
- rlink core test |
|
cd $RETROBASE/rtl/vlib/rlink/tb |
tbrun_tbw tb_rlink_direct |
make tb_rlink_direct |
time tbw tb_rlink_direct |\ |
tee tb_rlink_direct_dsim.log | egrep "(FAIL|DONE)" |
-> 78975.0 ns 3939: DONE |
-> real 0m00.508s user 0m00.262s sys 0m00.028s |
|
96,11 → 102,14
- rlink core test via serial port interface |
|
cd $RETROBASE/rtl/vlib/rlink/tb |
tbrun_tbw --lsuf stim2_dsim tb_rlink_sp1c tb_rlink_sp1c_stim.dat |
make tb_rlink_sp1c |
time tbw tb_rlink_sp1c tb_rlink_sp1c_stim.dat |\ |
tee tb_rlink_sp1c_stim2_dsim.log | egrep "(FAIL|DONE)" |
-> 27595.0 ns 1370: DONE |
-> real 0m0.250s user 0m0.108s sys 0m0.011s |
|
tbrun_tbw --lsuf stim1_dsim tb_rlink_sp1c tb_rlink_stim.dat |
time tbw tb_rlink_sp1c tb_rlink_stim.dat |\ |
tee tb_rlink_sp1c_dsim.log | egrep "(FAIL|DONE)" |
-> 420295.0 ns 21005: DONE |
-> real 0m02.271s user 0m01.360s sys 0m00.040s |
|
107,13 → 116,17
- w11a core test (using behavioural model) |
|
cd $RETROBASE/rtl/w11a/tb |
tbrun_tbw tb_pdp11core |
make tb_pdp11core |
time tbw tb_pdp11core |\ |
tee tb_pdp11core_dsim.log | egrep "(FAIL|DONE)" |
-> 1220255.0 ns 61073: DONE |
-> real 0m10.736s user 0m10.713s sys 0m00.060s |
|
- w11a core test (using post-synthesis model) |
|
tbrun_tbw tb_pdp11core_ssim |
make ghdl_tmp_clean && make tb_pdp11core_ssim |
time tbw tb_pdp11core_ssim |\ |
tee tb_pdp11core_ssim.log | egrep "(FAIL|DONE)" |
-> 1220255.0 ns 61073: DONE |
-> real 1m09.738s user 1m09.588s sys 0m00.096s |
|
120,7 → 133,9
- s3board sram controller test |
|
cd $RETROBASE/rtl/bplib/s3board/tb |
tbrun_tbw tb_s3_sram_memctl |
make tb_s3_sram_memctl |
time tbw tb_s3_sram_memctl |\ |
tee tb_s3_sram_memctl_dsim.log | egrep "(FAIL|DONE)" |
-> 5015.0 ns 241: DONE |
-> real 0m00.113s user 0m00.068s sys 0m00.016s |
|
127,7 → 142,9
- nexys2/nexys3 cram controller test |
|
cd $RETROBASE/rtl/bplib/nxcramlib/tb |
tbrun_tbw tb_nx_cram_memctl_as |
make tb_nx_cram_memctl_as |
time tbw tb_nx_cram_memctl_as |\ |
tee tb_nx_cram_memctl_as_dsim.log | egrep "(FAIL|DONE)" |
-> 24272.5 ns 1204: DONE |
-> real 0m00.343s user 0m00.248s sys 0m00.100s |
|
157,7 → 174,9
- sys_tst_serloop_s3 test bench |
|
cd $RETROBASE/rtl/sys_gen/tst_serloop/s3board/tb |
tbrun_tbw tb_tst_serloop_s3 |
make tb_tst_serloop_s3 |
time tbw tb_tst_serloop_s3 |\ |
tee tb_tst_serloop_s3_dsim.log | egrep "(FAIL|DONE)" |
-> 301353.3 ns 18068: DONE |
-> real 0m1.422s user 0m1.372s sys 0m0.024s |
|
164,11 → 183,15
- sys_tst_serloop_n2 test bench |
|
cd $RETROBASE/rtl/sys_gen/tst_serloop/nexys2/tb |
tbrun_tbw tb_tst_serloop1_n2 |
make tb_tst_serloop1_n2 |
time tbw tb_tst_serloop1_n2 |\ |
tee tb_tst_serloop1_n2_dsim.log | egrep "(FAIL|DONE)" |
-> 361560.0 ns 18068: DONE |
-> real 0m1.341s user 0m1.340s sys 0m0.016s |
|
tbrun_tbw tb_tst_serloop2_n2 |
make tb_tst_serloop2_n2 |
time tbw tb_tst_serloop2_n2 |\ |
tee tb_tst_serloop2_n2_dsim.log | egrep "(FAIL|DONE)" |
-> 304353.3 ns 18248: DONE |
-> real 0m1.933s user 0m1.924s sys 0m0.024s |
|
175,7 → 198,9
- sys_tst_serloop_n3 test bench |
|
cd $RETROBASE/rtl/sys_gen/tst_serloop/nexys3/tb |
tbrun_tbw tb_tst_serloop1_n3 |
make tb_tst_serloop1_n3 |
time tbw tb_tst_serloop1_n3 |\ |
tee tb_tst_serloop1_n3_dsim.log | egrep "(FAIL|DONE)" |
-> 361560.0 ns 18068: DONE |
-> real 0m1.371s user 0m1.372s sys 0m0.016s |
|
187,26 → 212,32
- sys_tst_rlink_s3 test bench |
|
cd $RETROBASE/rtl/sys_gen/tst_rlink/s3board/tb |
tbrun_tbwrri --pack tst_rlink tb_tst_rlink_s3 \ |
"tst_rlink::setup" "tst_rlink::test_all" |
-> 1377680.0 ns 68874: DONE |
-> real 0m6.876s user 0m6.790s sys 0m0.060s |
make tb_tst_rlink_s3 |
time ti_rri --run="tbw tb_tst_rlink_s3" --fifo --logl=3 -- \ |
"package require tst_rlink" "tst_rlink::setup" "tst_rlink::test_all" |\ |
tee tb_tst_rlink_s3_dsim.log | egrep "(-[EFW]:|FAIL|PEND|DONE)" |
-> 672560.0 ns 33618: DONE |
-> user 0m03.355s |
|
- sys_tst_rlink_n2 test bench |
|
cd $RETROBASE/rtl/sys_gen/tst_rlink/nexys2/tb |
tbrun_tbwrri --pack tst_rlink tb_tst_rlink_n2 \ |
"tst_rlink::setup" "tst_rlink::test_all" |
-> 1378200.0 ns 68899: DONE |
-> real 0m10.320s user 0m10.110s sys 0m0.204s |
make tb_tst_rlink_n2 |
time ti_rri --run="tbw tb_tst_rlink_n2" --fifo --logl=3 -- \ |
"package require tst_rlink" "tst_rlink::setup" "tst_rlink::test_all" |\ |
tee tb_tst_rlink_n2_dsim.log | egrep "(-[EFW]:|FAIL|PEND|DONE)" |
-> 674740.0 ns 33726: DONE |
-> user 0m03.362s |
|
- sys_tst_rlink_n3 test bench |
|
cd $RETROBASE/rtl/sys_gen/tst_rlink/nexys3/tb |
tbrun_tbwrri --pack tst_rlink tb_tst_rlink_n3 \ |
"tst_rlink::setup" "tst_rlink::test_all" |
-> 689210.0 ns 68900: DONE |
-> real 0m7.098s user 0m6.874s sys 0m0.191s |
make tb_tst_rlink_n3 |
time ti_rri --run="tbw tb_tst_rlink_n3" --fifo --logl=3 -- \ |
"package require tst_rlink" "tst_rlink::setup" "tst_rlink::test_all" |\ |
tee tb_tst_rlink_n3_dsim.log | egrep "(-[EFW]:|FAIL|PEND|DONE)" |
-> 336390.0 ns 33618: DONE |
-> user 0m03.434s |
|
4c. w11a systems ----------------------------------------------------- |
|
217,17 → 248,14
backend process and thus scheduling of backend vs. ghdl process |
can affect the result. |
|
For convenience a wrapper script 'tbrun_tbwrri' is used to generate the |
required quite long ti_rri command. Like for 'tbrun_tbw' the script also |
checks with 'make' whether the test bench is up-to-date or must be |
(re)-compiled. |
|
- sys_w11a_s3 test bench |
|
cd $RETROBASE/rtl/sys_gen/w11a/s3board/tb |
tbrun_tbwrri --pack rw11 tb_w11a_s3 \ |
make tb_w11a_s3 |
time ti_rri --pack=rw11 --run="tbw tb_w11a_s3" --fifo --logl=3 -- \ |
"rw11::setup_cpu" \ |
"rw11::run_pdpcp ../../../../w11a/tb/tb_pdp11core_stim.dat" |
"rw11::run_pdpcp ../../../../w11a/tb/tb_pdp11core_stim.dat" |\ |
tee tb_w11a_s3_stim2_dsim.log | egrep "(-[EFW]:|FAIL|PEND|DONE)" |
-> 9864500.0 ns 493215: DONE |
-> real 0m59.728s user 0m58.586s sys 0m0.576s |
|
234,20 → 262,24
- sys_w11a_n2 test bench |
|
cd $RETROBASE/rtl/sys_gen/w11a/nexys2/tb |
tbrun_tbwrri --pack rw11 --cuff tb_w11a_n2 \ |
make tb_w11a_n2 |
time ti_rri --pack=rw11 --run="tbw tb_w11a_n2" --fifo --logl=3 -- \ |
"rw11::setup_cpu" \ |
"rw11::run_pdpcp ../../../../w11a/tb/tb_pdp11core_stim.dat" |
-> 3809180.0 ns 190448: DONE |
-> real 0m55.733s user 0m55.504s sys 0m0.592s |
"rw11::run_pdpcp ../../../../w11a/tb/tb_pdp11core_stim.dat" |\ |
tee tb_w11a_n2_stim2_dsim.log | egrep "(-[EFW]:|FAIL|PEND|DONE)" |
-> 9880260.0 ns 494002: DONE |
-> real 1m10.632s user 1m09.824s sys 0m0.599s |
|
- sys_w11a_n3 test bench |
|
cd $RETROBASE/rtl/sys_gen/w11a/nexys3/tb |
tbrun_tbwrri --pack rw11 --cuff tb_w11a_n3 \ |
make tb_w11a_n3 |
time ti_rri --pack=rw11 --run="tbw tb_w11a_n3" --fifo --logl=3 -- \ |
"rw11::setup_cpu" \ |
"rw11::run_pdpcp ../../../../w11a/tb/tb_pdp11core_stim.dat" |
-> 279834.9 ns 236133: DONE |
-> real 0m59.998s user 0m59.676s sys 0m0.618s |
"rw11::run_pdpcp ../../../../w11a/tb/tb_pdp11core_stim.dat" |\ |
tee tb_w11a_n3_stim2_dsim.log | egrep "(-[EFW]:|FAIL|PEND|DONE)" |
-> 6915376.6 ns 497892: DONE |
-> real 1m07.862s user 1m07.695s sys 0m0.427s |
|
A new, modular w11a test bench is under construction. So far it is very |
incomplete. This very preliminary version can be executed with |
255,8 → 287,10
- sys_w11a_n2 test bench |
|
cd $RETROBASE/rtl/sys_gen/w11a/nexys2/tb |
tbrun_tbwrri --lsuf tbench_dsim --pack rw11 --cuff tb_w11a_n2 \ |
"rw11::setup_cpu" "rw11::tbench @w11a_all.dat" |
-> 2638820.0 ns 131930: DONE |
-> real 0m24.890s user 0m25.286s sys 0m0.439s |
make tb_w11a_n2 |
time ti_rri --pack=rw11 --run="tbw tb_w11a_n2" --fifo --logl=3 -- \ |
"rw11::setup_cpu" "rw11::tbench @w11a_all.dat" | \ |
tee w11a_tbench_dsim.log | egrep "(-[EFW]:|FAIL|PASS|DONE)" |
-> 7081280.0 ns 354053: DONE |
-> real 0m43.742s user 0m44.084s sys 0m0.379s |
|
/doc/README.txt
21,62 → 21,6
|
2. Change Log ---------------------------------------------------------------- |
|
- trunk (2015-01-04: svn rev 28(oc) 629(wfjm); untagged w11a_V0.63) +++++++++ |
|
- Summary |
- the w11a rbus interface used so far a narrow dynamically adjusted |
rbus->ibus window. Replaces with a 4k word window for whole IO page. |
- utilize rlink protocol version 4 features in w11a backend |
- use attn notifies to dispatch attn handlers |
- use larger blocks (7*512 rather 1*512 bytes) for rdma transfers |
- use labo and merge csr updates with last block transfer |
- this combined reduces the number of round trips by a factor 2 to 3, |
and in some cases the throughput accordingly. |
|
- Remarks on reference system |
- still using tcl 8.5 (even though 8.6 is now default in Ub 14.04) |
- don't use doxygen 1.8.8 and 1.8.9, it fails to generate vhdl docs |
|
- New features |
- new modules |
- tools/bin |
- ghdl_assert_filter - filter to suppress startup warnings |
- tbrun_tbw - wrapper for tbw based test benches |
- tbrun_tbwrri - wrapper for ti_rri + tbw based test benches |
- tools/src/librw11 |
- Rw11Rdma - Rdma engine base class |
- Rw11RdmaDisk - Rdma engine for disk emulation |
|
- Changes |
- rtl/vlib/rlink |
- rlink_core - use 4th stat bit to signal rbus timeout |
- rtl/vlib/rbus |
- rbd_rbmon - reorganized, supports now 16 bit addresses |
- rtl/w11a |
- pdp11_core_rbus - use full size 4k word ibus window |
- tools/bin/tbw - add -fifo and -verbose options |
- tools/src/librtools |
- Rexception - add ctor from RerrMsg |
- tools/src/librlink |
- RlinkCommandExpect - rblk/wblk done counts now expectable |
- RlinkConnect - cleanups and minor enhancements |
- RlinkServer - use attn notifies to dispatch handlers |
- tools/src/librw11 |
- Rw11CntlRK11 - re-organize, use now Rw11RdmaDisk |
- Rw11Cpu - add ibus address map |
- tools/src/librwxxtpp |
- RtclRw11CntlRK11 - add get/set for ChunkSize |
- RtclRw11Cpu - add amap sub-command for ibus map access |
|
- Resolved known issues from V0.62 |
- the rbus monitor (rbd_rbmon) has been updated to handle 16 bit addresses |
|
- Known issues |
- (V0.62): rlink v4 error recovery not yet implemented, will crash on error |
- (V0.62): command lists aren't split to fit in retransmit buffer size |
{both issues not relevant for w11 backend over USB usage because the |
backend produces proper command lists and the USB channel is error free} |
|
- trunk (2014-12-20: svn rev 27(oc) 614(wfjm); untagged w11a_V0.62) +++++++++ |
|
- Summary |
/doc/man/man1/ti_w11.1
1,5 → 1,5
.\" -*- nroff -*- |
.\" $Id: ti_w11.1 620 2014-12-25 10:48:35Z mueller $ |
.\" $Id: ti_w11.1 563 2014-06-22 15:49:09Z mueller $ |
.\" |
.\" Copyright 2013- by Walter F.J. Mueller <W.F.J.Mueller@gsi.de> |
.\" |
60,7 → 60,7
.IP \fB-e "\fR=\fIfile"\fR |
load and execute \fIfile\fP. If the file type is '.mac' the file will |
be on the fly compiled with \fBasm-11\fP(1), for all other file types |
it is assumed that they are in \fBlda\fP(5) format. |
it is assumed that the are in \fBlda\fP(5) format. |
. |
.\" ------------------------------------------------------------------ |
.SH EXAMPLES |
/doc/man/man1/tbw.1
1,7 → 1,7
.\" -*- nroff -*- |
.\" $Id: tbw.1 620 2014-12-25 10:48:35Z mueller $ |
.\" $Id: tbw.1 550 2014-02-03 08:16:57Z mueller $ |
.\" |
.\" Copyright 2013-2014 by Walter F.J. Mueller <W.F.J.Mueller@gsi.de> |
.\" Copyright 2013- by Walter F.J. Mueller <W.F.J.Mueller@gsi.de> |
.\" |
.\" ------------------------------------------------------------------ |
. |
14,7 → 14,6
. |
.SY tbw |
.I TBPROG |
.RI [ OPTIONS ] |
.RI [ FILEDEF ]... |
.RI [ GHDL-OPTIONS ]... |
. |
67,17 → 66,6
defined via the \fItbw.dat\fP file, for details see section FILES. |
. |
.\" ------------------------------------------------------------------ |
.SH OPTIONS |
The options \fB\-run\fP, \fB\-fifo\fP and \fB\-verbose\fP are processed |
by tbw itself. If more than one is given they must be in this order. |
.IP \fB\-run\fR |
Used for _ISim tb's, runs the tb with a 'run all' command. |
.IP \fB\-fifo\fR |
Forces usage of rlink_cext fifo, will ignore tbw.dat |
.IP \fB\-verbose\fR |
show the used tag,value settings before execution |
|
.\" ------------------------------------------------------------------ |
.SH GHDL OPTIONS |
All options are passed on to the test bench executable. The list of |
available options for a \fBghdl\fP generated executable can be inquired |
180,7 → 168,7
|
.SS Test benches controlled with \fBti_rri\fP |
In these cases the test bench is started via \fBti_rri\fP using the |
\fB\-\-run\fP and \fB\-\-fifo\fP options. Also here usually a pipe with |
\fB\-\-run\fP and \fB\-\-fifo\fP options. Also here Usually a pipe with |
\fBtee\fP and \fBegrep\fP is used, a typical example is |
|
.EX |
/doc/man/man1/create_disk.1
1,5 → 1,5
.\" -*- nroff -*- |
.\" $Id: create_disk.1 622 2014-12-28 20:45:26Z mueller $ |
.\" $Id: create_disk.1 550 2014-02-03 08:16:57Z mueller $ |
.\" |
.\" Copyright 2013- by Walter F.J. Mueller <W.F.J.Mueller@gsi.de> |
.\" |
52,7 → 52,8
creates a disk with all data bytes set to 0xff. |
.IP \fBdead\fP |
creates a disk with an alternating 0xdead 0xbeaf pattern. Can be helpful |
to diagnose whether an operating system accesses uninitialized parts of a disk. |
to diagnose whether an operating system access previously in initialized |
parts of a disk. |
.IP \fBtest\fP |
creates a disk with a unique test pattern in each sector. The whole disk |
is initialized with groups of 8 16bit words (in PDP-11 little endian) with |
/Makefile
1,4 → 1,4
# $Id: Makefile 623 2014-12-29 19:11:40Z mueller $ |
# $Id: Makefile 613 2014-12-20 08:47:50Z mueller $ |
# |
# 'Meta Makefile' for whole retro project |
# allows to make all synthesis targets |
55,11 → 55,11
SIM_all += rtl/vlib/serport/tb |
SIM_all += rtl/w11a/tb |
# |
.PHONY : default all all_sim all_syn |
.PHONY : all all_sim all_syn |
.PHONY : clean clean_sim clean_sim_tmp clean_sym clean_sym_tmp |
.PHONY : $(SYN_all) $(SIM_all) |
# |
default : |
all : |
@echo "No default action defined:" |
@echo " for VHDL simulation/synthesis use:" |
@echo " make -j `nproc` all_sim" |
75,10 → 75,6
@echo " make all_tcl" |
@echo " make all_dox" |
# |
all : |
make -j `nproc` all_sim |
make -j `nproc` all_syn |
make -j `nproc` all_lib |
# |
clean : clean_sim clean_syn |
# |