From 8abe1ed421a2a7168c41d0ff2fbdf3614ec91cb3 Mon Sep 17 00:00:00 2001 From: wfjm Date: Sun, 10 Mar 2019 14:37:21 +0100 Subject: [PATCH] tbench: add ibd_ibmon, finish ibd_ibtst --- doc/CHANGELOG.md | 1 + tools/tbench/cpu_all.dat | 3 +- tools/tbench/w11a_ibmon/test_ibmon_cpu.tcl | 278 +++++++++++++ tools/tbench/w11a_ibmon/test_ibmon_ibtst.tcl | 387 +++++++++++++++++++ tools/tbench/w11a_ibmon/test_ibmon_regs.tcl | 193 +++++++++ tools/tbench/w11a_ibmon/w11a_ibmon_all.dat | 7 + tools/tbench/w11a_ibtst/test_ibtst_data.tcl | 21 +- tools/tbench/w11a_ibtst/test_ibtst_fifo.tcl | 11 +- tools/tbench/w11a_ibtst/test_ibtst_regs.tcl | 31 +- tools/tbench/w11a_ibtst/test_ibtst_stat.tcl | 11 +- 10 files changed, 917 insertions(+), 26 deletions(-) create mode 100644 tools/tbench/w11a_ibmon/test_ibmon_cpu.tcl create mode 100644 tools/tbench/w11a_ibmon/test_ibmon_ibtst.tcl create mode 100644 tools/tbench/w11a_ibmon/test_ibmon_regs.tcl create mode 100644 tools/tbench/w11a_ibmon/w11a_ibmon_all.dat diff --git a/doc/CHANGELOG.md b/doc/CHANGELOG.md index f007f190..9b155286 100644 --- a/doc/CHANGELOG.md +++ b/doc/CHANGELOG.md @@ -30,6 +30,7 @@ The full set of tests is only run for tagged releases. - simclkv: test bench clock generator with variable period - new verification codes - tbench/w11a_ibtst/*: tbench for ibd_ibtst + - tbench/w11a_ibmon/*: tbench for ibd_ibmon - test_w11a_sdreg.tcl: tbench for sdreg ### Changes diff --git a/tools/tbench/cpu_all.dat b/tools/tbench/cpu_all.dat index 45816112..af90981a 100644 --- a/tools/tbench/cpu_all.dat +++ b/tools/tbench/cpu_all.dat @@ -1,10 +1,11 @@ -# $Id: cpu_all.dat 1112 2019-02-17 11:10:04Z mueller $ +# $Id: cpu_all.dat 1115 2019-02-24 12:53:04Z mueller $ # ## steering file for all cpu tests # @cp/cp_all.dat # @w11a_ibtst/w11a_ibtst_all.dat +@w11a_ibmon/w11a_ibmon_all.dat # @w11a/w11a_all.dat # diff --git a/tools/tbench/w11a_ibmon/test_ibmon_cpu.tcl b/tools/tbench/w11a_ibmon/test_ibmon_cpu.tcl new file mode 100644 index 00000000..b8bd9f0b --- /dev/null +++ b/tools/tbench/w11a_ibmon/test_ibmon_cpu.tcl @@ -0,0 +1,278 @@ +# $Id: test_ibmon_cpu.tcl 1118 2019-03-05 19:26:39Z mueller $ +# +# Copyright 2019- by Walter F.J. Mueller +# License disclaimer see License.txt in $RETROBASE directory +# +# Revision History: +# Date Rev Version Comment +# 2019-03-05 1118 1.0 Initial version +# 2019-02-24 1115 0.1 First draft +# +# Test register response +# 1. write/read IB space via bwm/brm (use MMU SAR SM I regs) +# 2. write/read IB space via wibr/ribr (use MMU SAR SM I regs) +# 3. test membe (byte write) via wibr/ribr + +# ---------------------------------------------------------------------------- +rlc log "test_ibmon_cpu: test basics with cpu register accesses --------------" + +if {[$cpu get hasibmon] == 0} { + rlc log " test_ibmon_cpu-W: no ibmon unit found, test aborted" + return +} +package require ibd_ibmon +set print 0 + +# -- Section A --------------------------------------------------------------- +rlc log " A exercise monitor data access via data/addr regs ---------" + +rlc log " A1: capture write/read rem and loc -----------------" +# write/read rem and loc with ibmon on; check that 4 lines acquired +set cntlstastd [regbld ibd_ibmon::CNTL conena remena locena {func "STA"}] +set cntlsto [regbld ibd_ibmon::CNTL {func "STO"}] +set statmsk [regbld ibd_ibmon::STAT wrap susp run] +set sarsi0 [$cpu imap sarsi.0] +set sarsi1 [$cpu imap sarsi.1] +set sarsi2 [$cpu imap sarsi.2] + +$cpu cp \ + -wreg im.hilim 0177776 \ + -wreg im.lolim 0160000 \ + -wreg im.cntl $cntlstastd \ + -rreg im.stat -edata [regbld ibd_ibmon::STAT run] $statmsk \ + -wibr sarsi.0 0xdead \ + -ribr sarsi.0 -edata 0xdead \ + -wal $sarsi0 \ + -wm 0xbeef \ + -rm -edata 0xbeef \ + -wreg im.cntl $cntlsto \ + -rreg im.stat -edata 0x0000 $statmsk \ + -rreg im.addr -edata [regbld ibd_ibmon::ADDR {laddr 4}] + +if {$print} {puts [ibd_ibmon::print $cpu]} + +# build expect list: list of {eflag eaddr edata enbusy} sublists +ibd_ibmon::raw_edata edat emsk \ + [list [regbld ibd_ibmon::FLAGS ack ca ra be1 be0 we] $sarsi0 0xdead 0] \ + [list [regbld ibd_ibmon::FLAGS ack ca ra be1 be0 ] $sarsi0 0xdead 0] \ + [list [regbld ibd_ibmon::FLAGS ack ca be1 be0 we] $sarsi0 0xbeef 0] \ + [list [regbld ibd_ibmon::FLAGS ack ca be1 be0 ] $sarsi0 0xbeef 0] + +rlc log " A1.1: read all in one rblk -------------------------" +$cpu cp \ + -wreg im.addr 0x0000 \ + -rblk im.data 16 -edata $edat $emsk \ + -rreg im.addr -edata 16 + +rlc log " A1.2: random address read --------------------------" +foreach addr {0x1 0x3 0x5 0x7 0x6 0x4 0x2 0x0 \ + 0x9 0xb 0xd 0xf 0xe 0xc 0xa 0x8} { + $cpu cp \ + -wreg im.addr $addr \ + -rreg im.data -edata [lindex $edat $addr] [lindex $emsk $addr] \ + -rreg im.addr -edata [expr {$addr + 1}] +} + +rlc log " A1.3: random address with rblk length 2 ------------" +foreach addr {0x1 0x3 0x5 0x7 0x6 0x4 0x2 0x0 \ + 0x9 0xb 0xd 0xe 0xc 0xa 0x8} { + $cpu cp \ + -wreg im.addr $addr \ + -rblk im.data 2 -edata [lrange $edat $addr [expr {$addr + 1}] ] \ + [lrange $emsk $addr [expr {$addr + 1}] ] \ + -rreg im.addr -edata [expr {$addr + 2}] +} + +# -- Section B --------------------------------------------------------------- +rlc log " B test rreg,wreg capture: ack,we,be* flags ----------------" +rlc log " B1.1: test byte racc access (via wibr/ribr) --------" +# word write/read already tested in section A; now go for byte writes +ibd_ibmon::raw_edata edat emsk \ + [list [regbld ibd_ibmon::FLAGS ack ca ra be0 we] $sarsi0 0x00aa 0] \ + [list [regbld ibd_ibmon::FLAGS ack ca ra be1 be0 ] $sarsi0 0xbeaa 0] \ + [list [regbld ibd_ibmon::FLAGS ack ca ra be1 we] $sarsi0 0x5500 0] \ + [list [regbld ibd_ibmon::FLAGS ack ca ra be1 be0 ] $sarsi0 0x55aa 0] \ + [list [regbld ibd_ibmon::FLAGS ack ca ra we] $sarsi0 0xfade 0] \ + [list [regbld ibd_ibmon::FLAGS ack ca ra be1 be0 ] $sarsi0 0x55aa 0] +ibd_ibmon::start $cpu +$cpu cp \ + -wmembe 1 \ + -wibr sarsi.0 0x00aa \ + -ribr sarsi.0 -edata 0xbeaa \ + -wmembe 2 \ + -wibr sarsi.0 0x5500 \ + -ribr sarsi.0 -edata 0x55aa \ + -wmembe 0 \ + -wibr sarsi.0 0xfade \ + -ribr sarsi.0 -edata 0x55aa + +ibd_ibmon::stop $cpu +if {$print} {puts [ibd_ibmon::print $cpu]} +ibd_ibmon::raw_check $cpu $edat $emsk + +rlc log " B1.2: test byte cacc access (via wm/rm) ------------" +ibd_ibmon::raw_edata edat emsk \ + [list [regbld ibd_ibmon::FLAGS ack ca be0 we] $sarsi0 0xff34 0] \ + [list [regbld ibd_ibmon::FLAGS ack ca be1 be0 ] $sarsi0 0x5534 0] \ + [list [regbld ibd_ibmon::FLAGS ack ca be1 we] $sarsi0 0x12ff 0] \ + [list [regbld ibd_ibmon::FLAGS ack ca be1 be0 ] $sarsi0 0x1234 0] \ + [list [regbld ibd_ibmon::FLAGS ack ca we] $sarsi0 0xfade 0] \ + [list [regbld ibd_ibmon::FLAGS ack ca be1 be0 ] $sarsi0 0x1234 0] +ibd_ibmon::start $cpu +$cpu cp \ + -wal $sarsi0 \ + -wmembe 1 \ + -wm 0xff34 \ + -rm -edata 0x5534 \ + -wmembe 2 \ + -wm 0x12ff \ + -rm -edata 0x1234 \ + -wmembe 0 \ + -wm 0xfade \ + -rm -edata 0x1234 + +ibd_ibmon::stop $cpu +if {$print} {puts [ibd_ibmon::print $cpu]} +ibd_ibmon::raw_check $cpu $edat $emsk + +rlc log " B1.3: test loc access (via cpu code) --------------" +# check that burst flag is seen for write of rmw +ibd_ibmon::raw_edata edat emsk \ + [list [regbld ibd_ibmon::FLAGS ack be1 be0 we] $sarsi0 0xffff 0] \ + [list [regbld ibd_ibmon::FLAGS ack rmw be1 be0 ] $sarsi0 0xffff 0] \ + [list [regbld ibd_ibmon::FLAGS bu ack rmw be1 be0 we] $sarsi0 0x0000 0] \ + [list [regbld ibd_ibmon::FLAGS ack be1 be0 ] $sarsi0 0x0000 0] \ + [list [regbld ibd_ibmon::FLAGS ack rmw be0 ] $sarsi0 0x0000 0] \ + [list [regbld ibd_ibmon::FLAGS bu ack rmw be0 we] $sarsi0 0xffff 0] \ + [list [regbld ibd_ibmon::FLAGS ack be1 be0 ] $sarsi0 0x00ff 0] \ + [list [regbld ibd_ibmon::FLAGS ack rmw be1 ] $sarsi0 0x00ff 0] \ + [list [regbld ibd_ibmon::FLAGS bu ack rmw be1 we] $sarsi0 0x0101 0] \ + [list [regbld ibd_ibmon::FLAGS ack be1 be0 ] $sarsi0 0x01ff 0] + +$cpu ldasm -lst lst -sym sym { + . = 1000 +stack: +start: mov #177777,(r0) + inc (r0) + mov (r0),r1 + decb (r0) + mov (r0),r2 + incb 1(r0) + mov (r0),r3 + halt +stop: +} + +ibd_ibmon::start $cpu +rw11::asmrun $cpu sym r0 $sarsi0 +rw11::asmwait $cpu sym +rw11::asmtreg $cpu r1 0x0000 \ + r2 0x00ff \ + r3 0x01ff +ibd_ibmon::stop $cpu +if {$print} {puts [ibd_ibmon::print $cpu]} +ibd_ibmon::raw_check $cpu $edat $emsk + +# -- Section C --------------------------------------------------------------- +rlc log " C test access mode enable flags ---------------------------" +$cpu ldasm -lst lst -sym sym { + . = 1000 +stack: +start: mov r1,(r0) +stop: +} + +rlc log " C1.1: test conena ----------------------------------" +# note that ibr access set cacc and racc flags +ibd_ibmon::raw_edata edat emsk \ + [list [regbld ibd_ibmon::FLAGS ack ca ra be1 be0 we] $sarsi0 0x0100 0] \ + [list [regbld ibd_ibmon::FLAGS ack ca be1 be0 we] $sarsi1 0x0101 0] \ + [list [regbld ibd_ibmon::FLAGS ack ca ra be1 be0 ] $sarsi0 0x0100 0] \ + [list [regbld ibd_ibmon::FLAGS ack ca be1 be0 ] $sarsi1 0x0101 0] \ + [list [regbld ibd_ibmon::FLAGS ack ca ra be1 be0 ] $sarsi2 0x0102 0] + +ibd_ibmon::start $cpu conena 1 remena 0 locena 0 +$cpu cp \ + -wibr sarsi.0 0x0100 \ + -wal $sarsi1 \ + -wm 0x0101 \ + -wr0 $sarsi2 \ + -wr1 0x0102 \ + -wpc $sym(start) \ + -step \ + -rpc -edata $sym(stop) \ + -ribr sarsi.0 -edata 0x0100 \ + -wal $sarsi1 \ + -rm -edata 0x0101 \ + -ribr sarsi.2 -edata 0x0102 +ibd_ibmon::stop $cpu +if {$print} {puts [ibd_ibmon::print $cpu]} +ibd_ibmon::raw_check $cpu $edat $emsk + +rlc log " C1.2: test remena ----------------------------------" +# Note: use -wal and -wr0 setup above, skip -rpc also +ibd_ibmon::raw_edata edat emsk \ + [list [regbld ibd_ibmon::FLAGS ack ca ra be1 be0 we] $sarsi0 0x0200 0] \ + [list [regbld ibd_ibmon::FLAGS ack ca ra be1 be0 ] $sarsi0 0x0200 0] \ + [list [regbld ibd_ibmon::FLAGS ack ca ra be1 be0 ] $sarsi2 0x0202 0] + +ibd_ibmon::start $cpu conena 0 remena 1 locena 0 +$cpu cp \ + -wibr sarsi.0 0x0200 \ + -wm 0x0201 \ + -wr1 0x0202 \ + -wpc $sym(start) \ + -step \ + -ribr sarsi.0 -edata 0x0200 \ + -wal $sarsi1 \ + -rm -edata 0x0201 \ + -ribr sarsi.2 -edata 0x0202 +ibd_ibmon::stop $cpu +if {$print} {puts [ibd_ibmon::print $cpu]} +ibd_ibmon::raw_check $cpu $edat $emsk + +rlc log " C1.3: test locena ----------------------------------" +# Note: again reuse -wal and -wr0 setup above, skip -rpc also +ibd_ibmon::raw_edata edat emsk \ + [list [regbld ibd_ibmon::FLAGS ack be1 be0 we] $sarsi2 0x0302 0] \ + +ibd_ibmon::start $cpu conena 0 remena 0 locena 1 +$cpu cp \ + -wibr sarsi.0 0x0300 \ + -wm 0x0301 \ + -wr1 0x0302 \ + -wpc $sym(start) \ + -step \ + -ribr sarsi.0 -edata 0x0300 \ + -wal $sarsi1 \ + -rm -edata 0x0301 \ + -ribr sarsi.2 -edata 0x0302 +ibd_ibmon::stop $cpu +if {$print} {puts [ibd_ibmon::print $cpu]} +ibd_ibmon::raw_check $cpu $edat $emsk + +# -- Section D --------------------------------------------------------------- +rlc log " D test hilim,lolim ----------------------------------------" +# allow sarsi0,sarsi1, block sarsi2 +ibd_ibmon::raw_edata edat emsk \ + [list [regbld ibd_ibmon::FLAGS ack ca ra be1 be0 we] $sarsi0 0x1100 0] \ + [list [regbld ibd_ibmon::FLAGS ack ca ra be1 be0 we] $sarsi1 0x1101 0] \ + [list [regbld ibd_ibmon::FLAGS ack ca ra be1 be0 ] $sarsi0 0x1100 0] \ + [list [regbld ibd_ibmon::FLAGS ack ca ra be1 be0 ] $sarsi1 0x1101 0] + +ibd_ibmon::start $cpu +$cpu cp \ + -wreg im.hilim $sarsi1 \ + -wreg im.lolim $sarsi0 \ + -wibr sarsi.0 0x1100 \ + -wibr sarsi.1 0x1101 \ + -wibr sarsi.2 0x1102 \ + -ribr sarsi.0 -edata 0x1100 \ + -ribr sarsi.1 -edata 0x1101 \ + -ribr sarsi.2 -edata 0x1102 \ + -wreg im.hilim 0177777 \ + -wreg im.lolim 0160000 + +ibd_ibmon::stop $cpu +if {$print} {puts [ibd_ibmon::print $cpu]} +ibd_ibmon::raw_check $cpu $edat $emsk diff --git a/tools/tbench/w11a_ibmon/test_ibmon_ibtst.tcl b/tools/tbench/w11a_ibmon/test_ibmon_ibtst.tcl new file mode 100644 index 00000000..e239fd4c --- /dev/null +++ b/tools/tbench/w11a_ibmon/test_ibmon_ibtst.tcl @@ -0,0 +1,387 @@ +# $Id: test_ibmon_ibtst.tcl 1118 2019-03-05 19:26:39Z mueller $ +# +# Copyright 2019- by Walter F.J. Mueller +# License disclaimer see License.txt in $RETROBASE directory +# +# Revision History: +# Date Rev Version Comment +# 2019-03-05 1118 1.0 Initial version +# +# Test register response +# 1. write/read IB space via bwm/brm (use MMU SAR SM I regs) +# 2. write/read IB space via wibr/ribr (use MMU SAR SM I regs) +# 3. test membe (byte write) via wibr/ribr + +# ---------------------------------------------------------------------------- +rlc log "test_ibmon_ibtest: tests with ibd_ibtst as target -------------------" + +if {[$cpu get hasibmon] == 0} { + rlc log " test_ibmon_ibtst-W: no ibmon unit found, test aborted" + return +} +if {[$cpu get hasibtst] == 0} { + rlc log " test_ibmon_ibtst-W: no ibtst unit found, test aborted" + return +} +package require ibd_ibmon +package require ibd_ibtst +set print 0 + +# -- Section A --------------------------------------------------------------- +rlc log " A exercise ack,nak,tout,busy and nbusy --------------------" + +set itdata [$cpu imap it.data] +set itfifo [$cpu imap it.fifo] + +# only data and fifo visible for ibmon to keep logs short +$cpu cp \ + -wreg im.hilim $itfifo \ + -wreg im.lolim $itdata + +rlc log " A1: ack,nak on data --------------------------------" +# disable/enable rem/loc side visibility of data +ibd_ibmon::raw_edata edat emsk \ + [list [regbld ibd_ibmon::FLAGS nak ca ra be1 be0 we] $itdata 0xdead 0] \ + [list [regbld ibd_ibmon::FLAGS nak ca ra be1 be0 ] $itdata {} 0] \ + [list [regbld ibd_ibmon::FLAGS nak ca be1 be0 we] $itdata 0xdead 0] \ + [list [regbld ibd_ibmon::FLAGS nak ca be1 be0 ] $itdata {} 0] \ + [list [regbld ibd_ibmon::FLAGS ack ca ra be1 be0 we] $itdata 0x1111 0] \ + [list [regbld ibd_ibmon::FLAGS ack ca ra be1 be0 ] $itdata 0x1111 0] \ + [list [regbld ibd_ibmon::FLAGS nak ca be1 be0 we] $itdata 0xdead 0] \ + [list [regbld ibd_ibmon::FLAGS nak ca be1 be0 ] $itdata {} 0] \ + [list [regbld ibd_ibmon::FLAGS nak ca ra be1 be0 we] $itdata 0xdead 0] \ + [list [regbld ibd_ibmon::FLAGS nak ca ra be1 be0 ] $itdata {} 0] \ + [list [regbld ibd_ibmon::FLAGS ack ca be1 be0 we] $itdata 0x2222 0] \ + [list [regbld ibd_ibmon::FLAGS ack ca be1 be0 ] $itdata 0x2222 0] + +ibd_ibmon::start $cpu +$cpu cp \ + -wal $itdata \ + -wreg it.cntl [regbld ibd_ibtst::CNTL ] \ + -wibr it.data 0xdead -estaterr \ + -ribr it.data -estaterr \ + -wm 0xdead -estaterr \ + -rm -estaterr \ + -wreg it.cntl [regbld ibd_ibtst::CNTL remw remr] \ + -wibr it.data 0x1111 \ + -ribr it.data -edata 0x1111 \ + -wm 0xdead -estaterr \ + -rm -estaterr \ + -wreg it.cntl [regbld ibd_ibtst::CNTL locw locr] \ + -wibr it.data 0xdead -estaterr \ + -ribr it.data -estaterr \ + -wm 0x2222 \ + -rm -edata 0x2222 +ibd_ibmon::stop $cpu +if {$print} {puts [ibd_ibmon::print $cpu]} +ibd_ibmon::raw_check $cpu $edat $emsk + +rlc log " A2: ack with busy on data --------------------------" +# enable loc/rem side visibility of data, enable bsy +# use 3 cases: bsyw; bsyr; bsyw+bsyr; check that delay only on loc side +ibd_ibmon::raw_edata edat emsk \ + [list [regbld ibd_ibmon::FLAGS ack ca ra be1 be0 we] $itdata 0x0101 0] \ + [list [regbld ibd_ibmon::FLAGS ack ca ra be1 be0 ] $itdata 0x0101 0] \ + [list [regbld ibd_ibmon::FLAGS bsy ack ca be1 be0 we] $itdata 0x0102 8] \ + [list [regbld ibd_ibmon::FLAGS ack ca be1 be0 ] $itdata 0x0102 0] \ + [list [regbld ibd_ibmon::FLAGS ack ca ra be1 be0 we] $itdata 0x0201 0] \ + [list [regbld ibd_ibmon::FLAGS ack ca ra be1 be0 ] $itdata 0x0201 0] \ + [list [regbld ibd_ibmon::FLAGS ack ca be1 be0 we] $itdata 0x0202 0] \ + [list [regbld ibd_ibmon::FLAGS bsy ack ca be1 be0 ] $itdata 0x0202 8] \ + [list [regbld ibd_ibmon::FLAGS ack ca ra be1 be0 we] $itdata 0x0301 0] \ + [list [regbld ibd_ibmon::FLAGS ack ca ra be1 be0 ] $itdata 0x0301 0] \ + [list [regbld ibd_ibmon::FLAGS bsy ack ca be1 be0 we] $itdata 0x0302 8] \ + [list [regbld ibd_ibmon::FLAGS bsy ack ca be1 be0 ] $itdata 0x0302 8] + +ibd_ibmon::start $cpu +$cpu cp \ + -wreg it.cntl [regbld ibd_ibtst::CNTL bsyw remw remr locw locr] \ + -wibr it.data 0x0101 \ + -ribr it.data -edata 0x0101 \ + -wm 0x0102 \ + -rm -edata 0x0102 \ + -wreg it.cntl [regbld ibd_ibtst::CNTL bsyr remw remr locw locr] \ + -wibr it.data 0x0201 \ + -ribr it.data -edata 0x0201 \ + -wm 0x0202 \ + -rm -edata 0x0202 \ + -wreg it.cntl [regbld ibd_ibtst::CNTL bsyw bsyr remw remr locw locr] \ + -wibr it.data 0x0301 \ + -ribr it.data -edata 0x0301 \ + -wm 0x0302 \ + -rm -edata 0x0302 +ibd_ibmon::stop $cpu +if {$print} {puts [ibd_ibmon::print $cpu]} +ibd_ibmon::raw_check $cpu $edat $emsk + + +rlc log " A3: nak on data (bsy,bsy+datab,datto,datto+datab) --" +# disable loc side visibility of data and use +# --> prompt nak (as above) +# bsy --> delayed nak on write +# bsy --> delayed nak on read +# bsy+datab --> delayed nak with ack while busy +# datto --> timeout +# datto+bsy --> timeout (should look plain timeout) +# datto+bsy+datab --> timeout with inital ack + +set ibtout 63; # ibus timeout + +# [list [regbld ibd_ibmon::FLAGS to bsy nak ack ca be1 be0 we] +ibd_ibmon::raw_edata edat emsk \ + [list [regbld ibd_ibmon::FLAGS nak ca be1 be0 we] \ + $itdata 0xdead 0] \ + [list [regbld ibd_ibmon::FLAGS nak ca be1 be0 ] \ + $itdata {} 0] \ + [list [regbld ibd_ibmon::FLAGS bsy nak ca be1 be0 we] \ + $itdata 0xdead 8] \ + [list [regbld ibd_ibmon::FLAGS nak ca be1 be0 ] \ + $itdata {} 0] \ + [list [regbld ibd_ibmon::FLAGS nak ca be1 be0 we] \ + $itdata 0xdead 0] \ + [list [regbld ibd_ibmon::FLAGS bsy nak ca be1 be0 ] \ + $itdata {} 8] \ + [list [regbld ibd_ibmon::FLAGS bsy nak ack ca be1 be0 we] \ + $itdata 0xdead 8] \ + [list [regbld ibd_ibmon::FLAGS bsy nak ack ca be1 be0 ] \ + $itdata {} 8] \ + [list [regbld ibd_ibmon::FLAGS to bsy nak ca be1 be0 we] \ + $itdata 0xdead $ibtout] \ + [list [regbld ibd_ibmon::FLAGS to bsy nak ca be1 be0 ] \ + $itdata {} $ibtout] \ + [list [regbld ibd_ibmon::FLAGS to bsy nak ca be1 be0 we] \ + $itdata 0xdead $ibtout] \ + [list [regbld ibd_ibmon::FLAGS to bsy nak ca be1 be0 ] \ + $itdata {} $ibtout] \ + [list [regbld ibd_ibmon::FLAGS to bsy nak ack ca be1 be0 we] \ + $itdata 0xdead $ibtout] \ + [list [regbld ibd_ibmon::FLAGS to bsy nak ack ca be1 be0 ] \ + $itdata {} $ibtout] + +ibd_ibmon::start $cpu +$cpu cp \ + -wreg it.cntl [regbld ibd_ibtst::CNTL remw remr] \ + -wm 0xdead -estaterr \ + -rm -estaterr \ + -wreg it.cntl [regbld ibd_ibtst::CNTL bsyw remw remr] \ + -wm 0xdead -estaterr \ + -rm -estaterr \ + -wreg it.cntl [regbld ibd_ibtst::CNTL bsyr remw remr] \ + -wm 0xdead -estaterr \ + -rm -estaterr \ + -wreg it.cntl [regbld ibd_ibtst::CNTL datab bsyw bsyr remw remr] \ + -wm 0xdead -estaterr \ + -rm -estaterr \ + -wreg it.cntl [regbld ibd_ibtst::CNTL datto remw remr] \ + -wm 0xdead -estaterr \ + -rm -estaterr \ + -wreg it.cntl [regbld ibd_ibtst::CNTL datto bsyw bsyr remw remr] \ + -wm 0xdead -estaterr \ + -rm -estaterr \ + -wreg it.cntl [regbld ibd_ibtst::CNTL datab datto bsyw bsyr remw remr] \ + -wm 0xdead -estaterr \ + -rm -estaterr +ibd_ibmon::stop $cpu +if {$print} {puts [ibd_ibmon::print $cpu]} +ibd_ibmon::raw_check $cpu $edat $emsk + +# -- Section B --------------------------------------------------------------- +rlc log " B fifo basics ---------------------------------------------" +rlc log " B1: fifo read test (write 2, read 3) -------------" +# use remw locr +ibd_ibmon::raw_edata edat emsk \ + [list [regbld ibd_ibmon::FLAGS ack ca ra be1 be0 we] $itfifo 0x0101 0] \ + [list [regbld ibd_ibmon::FLAGS ack ca ra be1 be0 we] $itfifo 0x0102 0] \ + [list [regbld ibd_ibmon::FLAGS ack ca be1 be0 ] $itfifo 0x0101 0] \ + [list [regbld ibd_ibmon::FLAGS ack ca be1 be0 ] $itfifo 0x0102 0] \ + [list [regbld ibd_ibmon::FLAGS nak ca be1 be0 ] $itfifo {} 0] \ + +ibd_ibmon::start $cpu +$cpu cp \ + -wal $itfifo \ + -wreg it.cntl [regbld ibd_ibtst::CNTL fclr remw locr] \ + -wbibr it.fifo {0x0101 0x0102} \ + -rblk mem 3 -edone 2 -edata {0x0101 0x0102} -estaterr +ibd_ibmon::stop $cpu +if {$print} {puts [ibd_ibmon::print $cpu]} +ibd_ibmon::raw_check $cpu $edat $emsk + +rlc log " B2: fifo write test (write 16, read 15) ------------" +# use locw remr +ibd_ibmon::raw_edata edat emsk \ + [list [regbld ibd_ibmon::FLAGS ack ca be1 be0 we] $itfifo 0x0200 0] \ + [list [regbld ibd_ibmon::FLAGS ack ca be1 be0 we] $itfifo 0x0201 0] \ + [list [regbld ibd_ibmon::FLAGS ack ca be1 be0 we] $itfifo 0x0202 0] \ + [list [regbld ibd_ibmon::FLAGS ack ca be1 be0 we] $itfifo 0x0203 0] \ + [list [regbld ibd_ibmon::FLAGS ack ca be1 be0 we] $itfifo 0x0204 0] \ + [list [regbld ibd_ibmon::FLAGS ack ca be1 be0 we] $itfifo 0x0205 0] \ + [list [regbld ibd_ibmon::FLAGS ack ca be1 be0 we] $itfifo 0x0206 0] \ + [list [regbld ibd_ibmon::FLAGS ack ca be1 be0 we] $itfifo 0x0207 0] \ + [list [regbld ibd_ibmon::FLAGS ack ca be1 be0 we] $itfifo 0x0208 0] \ + [list [regbld ibd_ibmon::FLAGS ack ca be1 be0 we] $itfifo 0x0209 0] \ + [list [regbld ibd_ibmon::FLAGS ack ca be1 be0 we] $itfifo 0x020a 0] \ + [list [regbld ibd_ibmon::FLAGS ack ca be1 be0 we] $itfifo 0x020b 0] \ + [list [regbld ibd_ibmon::FLAGS ack ca be1 be0 we] $itfifo 0x020c 0] \ + [list [regbld ibd_ibmon::FLAGS ack ca be1 be0 we] $itfifo 0x020d 0] \ + [list [regbld ibd_ibmon::FLAGS ack ca be1 be0 we] $itfifo 0x020e 0] \ + [list [regbld ibd_ibmon::FLAGS nak ca be1 be0 we] $itfifo 0x020f 0] \ + [list [regbld ibd_ibmon::FLAGS ack ca ra be1 be0 ] $itfifo 0x0200 0] \ + [list [regbld ibd_ibmon::FLAGS ack ca ra be1 be0 ] $itfifo 0x0201 0] \ + [list [regbld ibd_ibmon::FLAGS ack ca ra be1 be0 ] $itfifo 0x0202 0] \ + [list [regbld ibd_ibmon::FLAGS ack ca ra be1 be0 ] $itfifo 0x0203 0] \ + [list [regbld ibd_ibmon::FLAGS ack ca ra be1 be0 ] $itfifo 0x0204 0] \ + [list [regbld ibd_ibmon::FLAGS ack ca ra be1 be0 ] $itfifo 0x0205 0] \ + [list [regbld ibd_ibmon::FLAGS ack ca ra be1 be0 ] $itfifo 0x0206 0] \ + [list [regbld ibd_ibmon::FLAGS ack ca ra be1 be0 ] $itfifo 0x0207 0] \ + [list [regbld ibd_ibmon::FLAGS ack ca ra be1 be0 ] $itfifo 0x0208 0] \ + [list [regbld ibd_ibmon::FLAGS ack ca ra be1 be0 ] $itfifo 0x0209 0] \ + [list [regbld ibd_ibmon::FLAGS ack ca ra be1 be0 ] $itfifo 0x020a 0] \ + [list [regbld ibd_ibmon::FLAGS ack ca ra be1 be0 ] $itfifo 0x020b 0] \ + [list [regbld ibd_ibmon::FLAGS ack ca ra be1 be0 ] $itfifo 0x020c 0] \ + [list [regbld ibd_ibmon::FLAGS ack ca ra be1 be0 ] $itfifo 0x020d 0] \ + [list [regbld ibd_ibmon::FLAGS ack ca ra be1 be0 ] $itfifo 0x020e 0] + +ibd_ibmon::start $cpu +$cpu cp \ + -wreg it.cntl [regbld ibd_ibtst::CNTL fclr locw remr] \ + -wblk mem {0x0200 0x0201 0x0202 0x0203 0x0204 0x0205 0x0206 0x0207 \ + 0x0208 0x0209 0x020a 0x020b 0x020c 0x020d 0x020e 0x020f} \ + -edone 15 -estaterr \ + -rbibr it.fifo 15 \ + -edata {0x0200 0x0201 0x0202 0x0203 0x0204 0x0205 0x0206 0x0207 \ + 0x0208 0x0209 0x020a 0x020b 0x020c 0x020d 0x020e} +ibd_ibmon::stop $cpu +if {$print} {puts [ibd_ibmon::print $cpu]} +ibd_ibmon::raw_check $cpu $edat $emsk + +# -- Section C --------------------------------------------------------------- +rlc log " C test repeat collapes ------------------------------------" +rlc log " C1: dry run, no collapse active --------------------" +# use remw remr (for simplicity) +ibd_ibmon::raw_edata edat emsk \ + [list [regbld ibd_ibmon::FLAGS ack ca ra be1 be0 we] $itfifo 0x0300 0] \ + [list [regbld ibd_ibmon::FLAGS ack ca ra be1 be0 we] $itfifo 0x0301 0] \ + [list [regbld ibd_ibmon::FLAGS ack ca ra be1 be0 we] $itfifo 0x0302 0] \ + [list [regbld ibd_ibmon::FLAGS ack ca ra be1 be0 we] $itfifo 0x0303 0] \ + [list [regbld ibd_ibmon::FLAGS ack ca ra be1 be0 ] $itfifo 0x0300 0] \ + [list [regbld ibd_ibmon::FLAGS ack ca ra be1 be0 ] $itfifo 0x0301 0] \ + [list [regbld ibd_ibmon::FLAGS ack ca ra be1 be0 ] $itfifo 0x0302 0] \ + [list [regbld ibd_ibmon::FLAGS ack ca ra be1 be0 ] $itfifo 0x0303 0] + +ibd_ibmon::start $cpu +$cpu cp \ + -wreg it.cntl [regbld ibd_ibtst::CNTL fclr remw remr] \ + -wbibr it.fifo {0x0300 0x0301 0x0302 0x0303} \ + -rbibr it.fifo 4 -edata {0x0300 0x0301 0x0302 0x0303} +ibd_ibmon::stop $cpu +if {$print} {puts [ibd_ibmon::print $cpu]} +ibd_ibmon::raw_check $cpu $edat $emsk + +rlc log " C2.1: read collapse active -------------------------" +ibd_ibmon::raw_edata edat emsk \ + [list [regbld ibd_ibmon::FLAGS ack ca ra be1 be0 we] $itfifo 0x0400 0] \ + [list [regbld ibd_ibmon::FLAGS ack ca ra be1 be0 we] $itfifo 0x0401 0] \ + [list [regbld ibd_ibmon::FLAGS ack ca ra be1 be0 we] $itfifo 0x0402 0] \ + [list [regbld ibd_ibmon::FLAGS ack ca ra be1 be0 we] $itfifo 0x0403 0] \ + [list [regbld ibd_ibmon::FLAGS ack ca ra be1 be0 ] $itfifo 0x0400 0] \ + [list [regbld ibd_ibmon::FLAGS ack ca ra be1 be0 ] $itfifo 0x0403 0] + +ibd_ibmon::start $cpu rcolr 1 +$cpu cp \ + -wreg it.cntl [regbld ibd_ibtst::CNTL fclr remw remr] \ + -wbibr it.fifo {0x0400 0x0401 0x0402 0x0403} \ + -rbibr it.fifo 4 -edata {0x0400 0x0401 0x0402 0x0403} +ibd_ibmon::stop $cpu +if {$print} {puts [ibd_ibmon::print $cpu]} +ibd_ibmon::raw_check $cpu $edat $emsk + +rlc log " C2.2: write collapse active ------------------------" +ibd_ibmon::raw_edata edat emsk \ + [list [regbld ibd_ibmon::FLAGS ack ca ra be1 be0 we] $itfifo 0x0500 0] \ + [list [regbld ibd_ibmon::FLAGS ack ca ra be1 be0 we] $itfifo 0x0503 0] \ + [list [regbld ibd_ibmon::FLAGS ack ca ra be1 be0 ] $itfifo 0x0500 0] \ + [list [regbld ibd_ibmon::FLAGS ack ca ra be1 be0 ] $itfifo 0x0501 0] \ + [list [regbld ibd_ibmon::FLAGS ack ca ra be1 be0 ] $itfifo 0x0502 0] \ + [list [regbld ibd_ibmon::FLAGS ack ca ra be1 be0 ] $itfifo 0x0503 0] + +ibd_ibmon::start $cpu rcolw 1 +$cpu cp \ + -wreg it.cntl [regbld ibd_ibtst::CNTL fclr remw remr] \ + -wbibr it.fifo {0x0500 0x0501 0x0502 0x0503} \ + -rbibr it.fifo 4 -edata {0x0500 0x0501 0x0502 0x0503} +ibd_ibmon::stop $cpu +if {$print} {puts [ibd_ibmon::print $cpu]} +ibd_ibmon::raw_check $cpu $edat $emsk + +rlc log " C2.3: read and write collapse active ---------------" +ibd_ibmon::raw_edata edat emsk \ + [list [regbld ibd_ibmon::FLAGS ack ca ra be1 be0 we] $itfifo 0x0600 0] \ + [list [regbld ibd_ibmon::FLAGS ack ca ra be1 be0 we] $itfifo 0x0603 0] \ + [list [regbld ibd_ibmon::FLAGS ack ca ra be1 be0 ] $itfifo 0x0600 0] \ + [list [regbld ibd_ibmon::FLAGS ack ca ra be1 be0 ] $itfifo 0x0603 0] + +ibd_ibmon::start $cpu rcolw 1 rcolr 1 +$cpu cp \ + -wreg it.cntl [regbld ibd_ibtst::CNTL fclr remw remr] \ + -wbibr it.fifo {0x0600 0x0601 0x0602 0x0603} \ + -rbibr it.fifo 4 -edata {0x0600 0x0601 0x0602 0x0603} +ibd_ibmon::stop $cpu +if {$print} {puts [ibd_ibmon::print $cpu]} +ibd_ibmon::raw_check $cpu $edat $emsk + +rlc log " C2.4: non-collapse of write-read same address ------" +ibd_ibmon::raw_edata edat emsk \ + [list [regbld ibd_ibmon::FLAGS ack ca ra be1 be0 we] $itfifo 0x0700 0] \ + [list [regbld ibd_ibmon::FLAGS ack ca ra be1 be0 ] $itfifo 0x0700 0] \ + [list [regbld ibd_ibmon::FLAGS ack ca ra be1 be0 we] $itfifo 0x0701 0] \ + [list [regbld ibd_ibmon::FLAGS ack ca ra be1 be0 ] $itfifo 0x0701 0] \ + [list [regbld ibd_ibmon::FLAGS ack ca ra be1 be0 we] $itfifo 0x0702 0] \ + [list [regbld ibd_ibmon::FLAGS ack ca ra be1 be0 ] $itfifo 0x0702 0] \ + [list [regbld ibd_ibmon::FLAGS ack ca ra be1 be0 we] $itfifo 0x0703 0] \ + [list [regbld ibd_ibmon::FLAGS ack ca ra be1 be0 ] $itfifo 0x0703 0] + +ibd_ibmon::start $cpu rcolw 1 rcolr 1 +$cpu cp \ + -wreg it.cntl [regbld ibd_ibtst::CNTL fclr remw remr] \ + -wibr it.fifo 0x0700 \ + -ribr it.fifo -edata 0x0700 \ + -wibr it.fifo 0x0701 \ + -ribr it.fifo -edata 0x0701 \ + -wibr it.fifo 0x0702 \ + -ribr it.fifo -edata 0x0702 \ + -wibr it.fifo 0x0703 \ + -ribr it.fifo -edata 0x0703 +ibd_ibmon::stop $cpu +if {$print} {puts [ibd_ibmon::print $cpu]} +ibd_ibmon::raw_check $cpu $edat $emsk + +rlc log " C2.5: non-collapse of reads to different address ---" +ibd_ibmon::raw_edata edat emsk \ + [list [regbld ibd_ibmon::FLAGS ack ca ra be1 be0 we] $itdata 0xbabe 0] \ + [list [regbld ibd_ibmon::FLAGS ack ca ra be1 be0 we] $itfifo 0x0800 0] \ + [list [regbld ibd_ibmon::FLAGS ack ca ra be1 be0 we] $itfifo 0x0803 0] \ + [list [regbld ibd_ibmon::FLAGS ack ca ra be1 be0 ] $itfifo 0x0800 0] \ + [list [regbld ibd_ibmon::FLAGS ack ca ra be1 be0 ] $itdata 0xbabe 0] \ + [list [regbld ibd_ibmon::FLAGS ack ca ra be1 be0 ] $itfifo 0x0801 0] \ + [list [regbld ibd_ibmon::FLAGS ack ca ra be1 be0 ] $itdata 0xbabe 0] \ + [list [regbld ibd_ibmon::FLAGS ack ca ra be1 be0 ] $itfifo 0x0802 0] \ + [list [regbld ibd_ibmon::FLAGS ack ca ra be1 be0 ] $itdata 0xbabe 0] \ + [list [regbld ibd_ibmon::FLAGS ack ca ra be1 be0 ] $itfifo 0x0803 0] \ + [list [regbld ibd_ibmon::FLAGS ack ca ra be1 be0 ] $itdata 0xbabe 0] + +ibd_ibmon::start $cpu rcolw 1 rcolr 1 +$cpu cp \ + -wreg it.cntl [regbld ibd_ibtst::CNTL fclr remw remr] \ + -wibr it.data 0xbabe \ + -wbibr it.fifo {0x0800 0x0801 0x0802 0x0803} \ + -ribr it.fifo -edata 0x0800 \ + -ribr it.data -edata 0xbabe \ + -ribr it.fifo -edata 0x0801 \ + -ribr it.data -edata 0xbabe \ + -ribr it.fifo -edata 0x0802 \ + -ribr it.data -edata 0xbabe \ + -ribr it.fifo -edata 0x0803 \ + -ribr it.data -edata 0xbabe +ibd_ibmon::stop $cpu +if {$print} {puts [ibd_ibmon::print $cpu]} +ibd_ibmon::raw_check $cpu $edat $emsk diff --git a/tools/tbench/w11a_ibmon/test_ibmon_regs.tcl b/tools/tbench/w11a_ibmon/test_ibmon_regs.tcl new file mode 100644 index 00000000..44164a8e --- /dev/null +++ b/tools/tbench/w11a_ibmon/test_ibmon_regs.tcl @@ -0,0 +1,193 @@ +# $Id: test_ibmon_regs.tcl 1120 2019-03-09 18:19:31Z mueller $ +# +# Copyright 2019- by Walter F.J. Mueller +# License disclaimer see License.txt in $RETROBASE directory +# +# Revision History: +# Date Rev Version Comment +# 2019-03-01 1116 1.0 Initial version +# 2019-02-24 1115 0.1 First draft +# +# Test register response + +# ---------------------------------------------------------------------------- +rlc log "test_ibmon_regs: test register response -----------------------------" + +if {[$cpu get hasibmon] == 0} { + rlc log " test_ibmon_regs-W: no ibmon unit found, test aborted" + return +} +package require ibd_ibmon + +# -- Section A --------------------------------------------------------------- +rlc log " A basic register access tests -----------------------------" + +rlc log " A1: write/read cntl---------------------------------" +# test that starting captures option flags, and that stoping keeps them +# test that NOOP is a noop and doesn't change flags +$cpu cp \ + -wreg im.cntl [regbld ibd_ibmon::CNTL {func "STA"}] \ + -rreg im.cntl -edata [regbld ibd_ibmon::CNTL] \ + -wreg im.cntl [regbld ibd_ibmon::CNTL locena {func "STA"}] \ + -rreg im.cntl -edata [regbld ibd_ibmon::CNTL locena] \ + -wreg im.cntl [regbld ibd_ibmon::CNTL remena {func "STA"}] \ + -rreg im.cntl -edata [regbld ibd_ibmon::CNTL remena] \ + -wreg im.cntl [regbld ibd_ibmon::CNTL conena {func "STA"}] \ + -rreg im.cntl -edata [regbld ibd_ibmon::CNTL conena] \ + -wreg im.cntl [regbld ibd_ibmon::CNTL wstop {func "STA"}] \ + -rreg im.cntl -edata [regbld ibd_ibmon::CNTL wstop] \ + -wreg im.cntl [regbld ibd_ibmon::CNTL rcolr {func "STA"}] \ + -rreg im.cntl -edata [regbld ibd_ibmon::CNTL rcolr] \ + -wreg im.cntl [regbld ibd_ibmon::CNTL rcolw {func "STA"}] \ + -rreg im.cntl -edata [regbld ibd_ibmon::CNTL rcolw] \ + -wreg im.cntl [regbld ibd_ibmon::CNTL wstop remena locena {func "STA"}] \ + -rreg im.cntl -edata [regbld ibd_ibmon::CNTL wstop remena locena ] \ + -wreg im.cntl [regbld ibd_ibmon::CNTL {func "STO"}] \ + -rreg im.cntl -edata [regbld ibd_ibmon::CNTL wstop remena locena] \ + -wreg im.cntl [regbld ibd_ibmon::CNTL {func "NOOP"}] \ + -rreg im.cntl -edata [regbld ibd_ibmon::CNTL wstop remena locena] + +rlc log " A2: write cntl, read stat --------------------------" +# test that susp/run follow functions set to cntl +# test that sus/res does not change option flags +set statmsk [regbld ibd_ibmon::STAT wrap susp run] +$cpu cp \ + -wreg im.cntl [regbld ibd_ibmon::CNTL wstop locena {func "STA"}] \ + -rreg im.cntl -edata [regbld ibd_ibmon::CNTL wstop locena ] \ + -rreg im.stat -edata [regbld ibd_ibmon::STAT run] $statmsk \ + -wreg im.cntl [regbld ibd_ibmon::CNTL {func "SUS"}] \ + -rreg im.cntl -edata [regbld ibd_ibmon::CNTL wstop locena ] \ + -rreg im.stat -edata [regbld ibd_ibmon::STAT susp run] $statmsk \ + -wreg im.cntl [regbld ibd_ibmon::CNTL {func "RES"}] \ + -rreg im.cntl -edata [regbld ibd_ibmon::CNTL wstop locena ] \ + -rreg im.stat -edata [regbld ibd_ibmon::STAT run] $statmsk \ + -wreg im.cntl [regbld ibd_ibmon::CNTL {func "STO"}] \ + -rreg im.stat -edata [regbld ibd_ibmon::STAT] $statmsk +# test that suspend/resume of a stopped system is a noop +$cpu cp \ + -wreg im.cntl [regbld ibd_ibmon::CNTL {func "SUS"}] \ + -rreg im.stat -edata [regbld ibd_ibmon::STAT] $statmsk \ + -wreg im.cntl [regbld ibd_ibmon::CNTL {func "RES"}] \ + -rreg im.stat -edata [regbld ibd_ibmon::STAT] $statmsk +# test that start of a suspended system clears suspend +$cpu cp \ + -wreg im.cntl [regbld ibd_ibmon::CNTL {func "STA"}] \ + -rreg im.stat -edata [regbld ibd_ibmon::STAT run] $statmsk \ + -wreg im.cntl [regbld ibd_ibmon::CNTL {func "SUS"}] \ + -rreg im.stat -edata [regbld ibd_ibmon::STAT susp run] $statmsk \ + -wreg im.cntl [regbld ibd_ibmon::CNTL {func "STA"}] \ + -rreg im.stat -edata [regbld ibd_ibmon::STAT run] $statmsk +# test that suspend of a suspended system is a noop +# test that stop of a suspended system clears suspend +$cpu cp \ + -wreg im.cntl [regbld ibd_ibmon::CNTL {func "STA"}] \ + -rreg im.stat -edata [regbld ibd_ibmon::STAT run] $statmsk \ + -wreg im.cntl [regbld ibd_ibmon::CNTL {func "SUS"}] \ + -rreg im.stat -edata [regbld ibd_ibmon::STAT susp run] $statmsk \ + -wreg im.cntl [regbld ibd_ibmon::CNTL {func "SUS"}] \ + -rreg im.stat -edata [regbld ibd_ibmon::STAT susp run] $statmsk \ + -wreg im.cntl [regbld ibd_ibmon::CNTL {func "STO"}] \ + -rreg im.stat -edata [regbld ibd_ibmon::STAT] $statmsk +# get amax for later usage +$cpu cp \ + -rreg im.stat rstat +set bsize [regget ibd_ibmon::STAT(bsize) $rstat] +set amax [expr {( 256 << $bsize ) - 1}] + +rlc log " A3: test addr --------------------------------------" +rlc log " A3.1: write/read addr when stopped -----------------" +foreach {laddr waddr} [list 0x0000 0 0x0000 3 $amax 0 $amax 3] { + set addr [regbld ibd_ibmon::ADDR [list laddr $laddr] [list waddr $waddr]] + $cpu cp \ + -wreg im.addr $addr \ + -rreg im.addr -edata $addr +} + +rlc log " A3.2: verify that starting clears addr -------------" +$cpu cp \ + -wreg im.cntl [regbldkv ibd_ibmon::CNTL func "STO"] \ + -wreg im.addr [regbldkv ibd_ibmon::ADDR laddr $amax] \ + -rreg im.addr -edata [regbldkv ibd_ibmon::ADDR laddr $amax] \ + -wreg im.cntl [regbldkv ibd_ibmon::CNTL func "STA"] \ + -rreg im.addr -edata 0x00 \ + -wreg im.cntl [regbldkv ibd_ibmon::CNTL func "STO"] + +rlc log " A3.3: test err when started and addr written -------" +$cpu cp \ + -wreg im.cntl [regbldkv ibd_ibmon::CNTL func "STA"] \ + -wreg im.addr 0x100 -estaterr \ + -wreg im.cntl [regbldkv ibd_ibmon::CNTL func "STO"] + +rlc log " A4: test data --------------------------------------" +rlc log " A4.1: when stopped ---------------------------------" +# stop, set addr, and four times data, check addr +# at 5th data read waddr goes 0 and laddr incs +$cpu cp \ + -wreg im.cntl [regbld ibd_ibmon::CNTL {func "STO"}] \ + -wreg im.addr [regbld ibd_ibmon::ADDR {laddr 010} {waddr 0}] \ + -rreg im.data \ + -rreg im.addr -edata [regbld ibd_ibmon::ADDR {laddr 010} {waddr 001}] \ + -rreg im.data \ + -rreg im.addr -edata [regbld ibd_ibmon::ADDR {laddr 010} {waddr 002}] \ + -rreg im.data \ + -rreg im.addr -edata [regbld ibd_ibmon::ADDR {laddr 010} {waddr 003}] \ + -rreg im.data \ + -rreg im.addr -edata [regbld ibd_ibmon::ADDR {laddr 011} {waddr 000}] + +rlc log " A4.2: test err when written ------------------------" +$cpu cp -wreg im.data 0x100 -estaterr + +rlc log " A5: test hilim/lolim -------------------------------" +# check also that upper 3 bits are stuck 1, lsb stuck 0 +$cpu cp \ + -wreg im.hilim 0162346 \ + -wreg im.lolim 0161234 \ + -rreg im.hilim -edata 0162346 \ + -rreg im.lolim -edata 0161234 \ + -wreg im.hilim 0017777 \ + -wreg im.lolim 0000001 \ + -rreg im.hilim -edata 0177776 \ + -rreg im.lolim -edata 0160000 + +rlc log " A6: test reset behavior ----------------------------" +# a reset will start ibtst with conena remena locena and hilim/lolim fully open + +rlc log " A6.1: no reset on BRESET ---------------------------" +# no reset on BRESET and CRESET (cp -creset), only on GRESET (rbus init) +$cpu cp \ + -wreg im.hilim 0172000 \ + -wreg im.lolim 0171000 \ + -wreg im.cntl [regbld ibd_ibmon::CNTL wstop locena {func "STA"}] \ + -wreg im.cntl [regbld ibd_ibmon::CNTL {func "SUS"}] \ + -rreg im.cntl -edata [regbld ibd_ibmon::CNTL wstop locena] \ + -rreg im.stat -edata [regbld ibd_ibmon::STAT susp run] $statmsk \ + -rreg im.hilim -edata 0172000 \ + -rreg im.lolim -edata 0171000 \ + -breset \ + -rreg im.cntl -edata [regbld ibd_ibmon::CNTL wstop locena] \ + -rreg im.stat -edata [regbld ibd_ibmon::STAT susp run] $statmsk \ + -rreg im.hilim -edata 0172000 \ + -rreg im.lolim -edata 0171000 + +rlc log " A6.2: no reset on CRESET ---------------------------" +$cpu cp \ + -creset \ + -rreg im.cntl -edata [regbld ibd_ibmon::CNTL wstop locena] \ + -rreg im.stat -edata [regbld ibd_ibmon::STAT susp run] $statmsk \ + -rreg im.hilim -edata 0172000 \ + -rreg im.lolim -edata 0171000 + +rlc log " A6.2: test reset on GRESET -------------------------" +# GRESET, triggered by rbus init against cpu conf register + +rlc exec -init [$cpu rmap conf] [regbld rw11::INIT greset] + +$cpu cp \ + -rreg im.cntl -edata [regbld ibd_ibmon::CNTL conena remena locena] \ + -rreg im.stat -edata [regbld ibd_ibmon::STAT run] $statmsk \ + -rreg im.hilim -edata 0177776 \ + -rreg im.lolim -edata 0160000 + +# harvest breset/creset triggered attn's +rlc exec -attn +rlc wtlam 0. diff --git a/tools/tbench/w11a_ibmon/w11a_ibmon_all.dat b/tools/tbench/w11a_ibmon/w11a_ibmon_all.dat new file mode 100644 index 00000000..7156238d --- /dev/null +++ b/tools/tbench/w11a_ibmon/w11a_ibmon_all.dat @@ -0,0 +1,7 @@ +# $Id: w11a_ibmon_all.dat 1117 2019-03-03 12:49:26Z mueller $ +# +## steering file for all w11a_ibmon tests +# +test_ibmon_regs.tcl +test_ibmon_cpu.tcl +test_ibmon_ibtst.tcl diff --git a/tools/tbench/w11a_ibtst/test_ibtst_data.tcl b/tools/tbench/w11a_ibtst/test_ibtst_data.tcl index 1c92b39b..e1e6094d 100644 --- a/tools/tbench/w11a_ibtst/test_ibtst_data.tcl +++ b/tools/tbench/w11a_ibtst/test_ibtst_data.tcl @@ -1,10 +1,11 @@ -# $Id: test_ibtst_data.tcl 1112 2019-02-17 11:10:04Z mueller $ +# $Id: test_ibtst_data.tcl 1120 2019-03-09 18:19:31Z mueller $ # # Copyright 2019- by Walter F.J. Mueller # License disclaimer see License.txt in $RETROBASE directory # # Revision History: # Date Rev Version Comment +# 2019-03-05 1118 1.0.1 use -wal # 2019-02-16 1112 1.0 Initial version # # Test data register response @@ -20,7 +21,7 @@ rlc log "test_ibtst_data: test data register response -------------------------" if {[$cpu get hasibtst] == 0} { - rlc log " test_ibtst_data-W: no ibtest unit found, test aborted" + rlc log " test_ibtst_data-W: no ibtst unit found, test aborted" return } package require ibd_ibtst @@ -29,7 +30,7 @@ rlc log " A1: data loc/rem access ----------------------------" # test loc/rem write: n/n; y/n; n/y; y/y # test loc/rem read: n/n; y/n; n/y; y/y $cpu cp \ - -wa [cpu0 imap it.data] \ + -wal [$cpu imap it.data] \ -wreg it.cntl [regbld ibd_ibtst::CNTL ] \ -wm 0xdead -estaterr \ -wibr it.data 0xdead -estaterr \ @@ -55,9 +56,15 @@ $cpu cp \ -rm -edata 0xdead \ -ribr it.data -edata 0xdead -rlc log " A2: data loc nak and timeout -----------------------" -# test datto; should look like nak +rlc log " A2: data loc nak and bsy,bsy+ack,timeout -----------" +# should all give rbus $cpu cp \ + -wreg it.cntl [regbld ibd_ibtst::CNTL bsyw bsyr ] \ + -wm 0xdead -estaterr \ + -rm -estaterr \ + -wreg it.cntl [regbld ibd_ibtst::CNTL bsyw bsyr datab ] \ + -wm 0xdead -estaterr \ + -rm -estaterr \ -wreg it.cntl [regbld ibd_ibtst::CNTL datto ] \ -wm 0xdead -estaterr \ -rm -estaterr @@ -92,3 +99,7 @@ $cpu cp \ -wibr it.data 0xdead \ -breset \ -ribr it.data -edata 0x0000 + +# harvest breset/creset triggered attn's +rlc exec -attn -edata 0 +rlc wtlam 0. diff --git a/tools/tbench/w11a_ibtst/test_ibtst_fifo.tcl b/tools/tbench/w11a_ibtst/test_ibtst_fifo.tcl index 71bfc6c1..adedf9a2 100644 --- a/tools/tbench/w11a_ibtst/test_ibtst_fifo.tcl +++ b/tools/tbench/w11a_ibtst/test_ibtst_fifo.tcl @@ -1,10 +1,11 @@ -# $Id: test_ibtst_fifo.tcl 1112 2019-02-17 11:10:04Z mueller $ +# $Id: test_ibtst_fifo.tcl 1120 2019-03-09 18:19:31Z mueller $ # # Copyright 2019- by Walter F.J. Mueller # License disclaimer see License.txt in $RETROBASE directory # # Revision History: # Date Rev Version Comment +# 2019-03-05 1118 1.0.1 use -wal # 2019-02-16 1112 1.0 Initial version # # Test fifo register response @@ -20,7 +21,7 @@ rlc log "test_ibtst_fifo: test fifo register response -------------------------" if {[$cpu get hasibtst] == 0} { - rlc log " test_ibtst_fifo-W: no ibtest unit found, test aborted" + rlc log " test_ibtst_fifo-W: no ibtst unit found, test aborted" return } package require ibd_ibtst @@ -28,7 +29,7 @@ package require ibd_ibtst rlc log " A1: fifo loc/rem access ----------------------------" # test off->off; loc->loc; loc->rem; rem->loc; rem->rem $cpu cp \ - -wa [cpu0 imap it.fifo] \ + -wal [cpu0 imap it.fifo] \ -wreg it.cntl [regbld ibd_ibtst::CNTL fclr ] \ -wm 0xdead -estaterr \ -wibr it.fifo 0xdead -estaterr \ @@ -132,3 +133,7 @@ $cpu cp \ -breset \ -ribr it.stat -edata [regbld ibd_ibtst::STAT] \ -ribr it.fifo -estaterr + +# harvest breset/creset triggered attn's +rlc exec -attn -edata 0 +rlc wtlam 0. diff --git a/tools/tbench/w11a_ibtst/test_ibtst_regs.tcl b/tools/tbench/w11a_ibtst/test_ibtst_regs.tcl index 82a0ef20..ed955847 100644 --- a/tools/tbench/w11a_ibtst/test_ibtst_regs.tcl +++ b/tools/tbench/w11a_ibtst/test_ibtst_regs.tcl @@ -1,10 +1,11 @@ -# $Id: test_ibtst_regs.tcl 1112 2019-02-17 11:10:04Z mueller $ +# $Id: test_ibtst_regs.tcl 1120 2019-03-09 18:19:31Z mueller $ # # Copyright 2019- by Walter F.J. Mueller # License disclaimer see License.txt in $RETROBASE directory # # Revision History: # Date Rev Version Comment +# 2019-03-05 1118 1.0.1 rename dly[rw] -> bsy[rw]; add datab; use -wal # 2019-02-16 1112 1.0 Initial version # # Test cntl register response @@ -20,7 +21,7 @@ rlc log "test_ibtst_regs: test cntl/stat register access ----------------------" if {[$cpu get hasibtst] == 0} { - rlc log " test_ibtst_regs-W: no ibtest unit found, test aborted" + rlc log " test_ibtst_regs-W: no ibtst unit found, test aborted" return } package require ibd_ibtst @@ -36,14 +37,16 @@ $cpu cp \ -rreg it.cntl -edata [regbld ibd_ibtst::CNTL remr] \ -wreg it.cntl [regbld ibd_ibtst::CNTL remw] \ -rreg it.cntl -edata [regbld ibd_ibtst::CNTL remw] \ - -wreg it.cntl [regbld ibd_ibtst::CNTL dlyr] \ - -rreg it.cntl -edata [regbld ibd_ibtst::CNTL dlyr] \ - -wreg it.cntl [regbld ibd_ibtst::CNTL dlyw] \ - -rreg it.cntl -edata [regbld ibd_ibtst::CNTL dlyw] \ + -wreg it.cntl [regbld ibd_ibtst::CNTL bsyr] \ + -rreg it.cntl -edata [regbld ibd_ibtst::CNTL bsyr] \ + -wreg it.cntl [regbld ibd_ibtst::CNTL bsyw] \ + -rreg it.cntl -edata [regbld ibd_ibtst::CNTL bsyw] \ -wreg it.cntl [regbld ibd_ibtst::CNTL nobyt] \ -rreg it.cntl -edata [regbld ibd_ibtst::CNTL nobyt] \ -wreg it.cntl [regbld ibd_ibtst::CNTL datto] \ -rreg it.cntl -edata [regbld ibd_ibtst::CNTL datto] \ + -wreg it.cntl [regbld ibd_ibtst::CNTL datab] \ + -rreg it.cntl -edata [regbld ibd_ibtst::CNTL datab] \ -wreg it.cntl 0x0000 \ -rreg it.cntl -edata -0x0000 @@ -58,9 +61,13 @@ $cpu cp \ rlc log " A3: cntl,stat only rem accessible ------------------" $cpu cp \ -rreg it.stat -edata 0x0000 \ - -wa [cpu0 imap it.cntl] \ - -wm 0xdead -estaterr \ - -rm -estaterr \ - -wa [cpu0 imap it.stat] \ - -wm 0xdead -estaterr \ - -rm -estaterr + -wal [cpu0 imap it.cntl] \ + -wm 0xdead -estaterr \ + -rm -estaterr \ + -wal [cpu0 imap it.stat] \ + -wm 0xdead -estaterr \ + -rm -estaterr + +# harvest breset/creset triggered attn's +rlc exec -attn -edata 0 +rlc wtlam 0. diff --git a/tools/tbench/w11a_ibtst/test_ibtst_stat.tcl b/tools/tbench/w11a_ibtst/test_ibtst_stat.tcl index 03677f54..489db31c 100644 --- a/tools/tbench/w11a_ibtst/test_ibtst_stat.tcl +++ b/tools/tbench/w11a_ibtst/test_ibtst_stat.tcl @@ -1,10 +1,11 @@ -# $Id: test_ibtst_stat.tcl 1112 2019-02-17 11:10:04Z mueller $ +# $Id: test_ibtst_stat.tcl 1118 2019-03-05 19:26:39Z mueller $ # # Copyright 2019- by Walter F.J. Mueller # License disclaimer see License.txt in $RETROBASE directory # # Revision History: # Date Rev Version Comment +# 2019-03-05 1118 1.0.1 rename dly[rw] -> bsy[rw]; use -wal # 2019-02-16 1112 1.0 Initial version # # Test stat register response @@ -20,14 +21,14 @@ rlc log "test_ibtst_stat: test stat register response -------------------------" if {[$cpu get hasibtst] == 0} { - rlc log " test_ibtst_data-W: no ibtest unit found, test aborted" + rlc log " test_ibtst_data-W: no ibtst unit found, test aborted" return } package require ibd_ibtst rlc log " A1: data rem access --------------------------------" $cpu cp \ - -wa [cpu0 imap it.data] \ + -wal [cpu0 imap it.data] \ -wreg it.cntl [regbld ibd_ibtst::CNTL fclr remw remr ] \ -wibr it.data 0x1234 \ -ribr it.stat -edata [regbld ibd_ibtst::STAT racc cacc be1 be0 we ] \ @@ -68,7 +69,7 @@ $cpu cp \ -wr1 [expr {[cpu0 imap it.data] + 1}] \ -wr2 0xdead \ -wpc 02000 \ - -wa [cpu0 imap it.data] \ + -wal [cpu0 imap it.data] \ -wreg it.cntl [regbld ibd_ibtst::CNTL fclr remr locw locr ] # step through code and check @@ -101,7 +102,7 @@ rlc log " A4: data cpu write -> rem read (busy=8) ------------" $cpu cp \ -wr2 0xdead \ -wpc 02000 \ - -wreg it.cntl [regbld ibd_ibtst::CNTL fclr dlyw dlyr remr locw locr ] + -wreg it.cntl [regbld ibd_ibtst::CNTL fclr bsyw bsyr remr locw locr ] # step through code and check (same sequence as above) $cpu cp \