1
0
mirror of https://github.com/wfjm/w11.git synced 2026-04-03 13:23:50 +00:00

add intreq monitors; asm-11 prints erroneous lines

- ibd_kw11l:
  - add csr.ir (rem; as intreq monitor)
  - csr only loc writable
  - csr.moni can be cleared, but not set by loc write
- ibdr_{dl11,lp11,lp11_buf}: add rcsr.ir and xcsr.ir (intreq monitors)
- asm-11: print lines with errors to stderr unless -lst seen
This commit is contained in:
wfjm
2019-04-26 10:52:57 +02:00
parent b08d8162dc
commit 4c5bcf5521
8 changed files with 84 additions and 36 deletions

View File

@@ -1,6 +1,6 @@
-- $Id: ibd_kw11l.vhd 984 2018-01-02 20:56:27Z mueller $
-- $Id: ibd_kw11l.vhd 1138 2019-04-26 08:14:56Z mueller $
--
-- Copyright 2008-2015 by Walter F.J. Mueller <W.F.J.Mueller@gsi.de>
-- Copyright 2008-2019 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
@@ -18,7 +18,7 @@
-- Dependencies: -
-- Test bench: -
-- Target Devices: generic
-- Tool versions: ise 8.2-14.7; viv 2014.4; ghdl 0.18-0.31
-- Tool versions: ise 8.2-14.7; viv 2017.2; ghdl 0.18-0.35
--
-- Synthesized (xst):
-- Date Rev ise Target flop lutl lutm slic t peri
@@ -27,6 +27,8 @@
--
-- Revision History:
-- Date Rev Version Comment
-- 2019-04-24 1138 1.2.1 add csr.ir; csr only loc writable;
-- csr.moni can be cleared, but not set by loc write
-- 2015-05-09 676 1.2 add CPUSUSP, freeze timer when cpu suspended
-- 2011-11-18 427 1.1.1 now numeric_std clean
-- 2010-10-17 333 1.1 use ibus V2 interface
@@ -65,8 +67,9 @@ architecture syn of ibd_kw11l is
constant ibaddr_kw11l : slv16 := slv(to_unsigned(8#177546#,16));
constant lks_ibf_ie : integer := 6;
constant lks_ibf_moni : integer := 7;
constant lks_ibf_ie : integer := 6;
constant lks_ibf_ir : integer := 5;
constant twidth : natural := 5;
constant tdivide : natural := 20;
@@ -130,16 +133,23 @@ begin
-- ibus output driver
if r.ibsel = '1' then
idout(lks_ibf_ie) := R_REGS.ie;
idout(lks_ibf_moni) := R_REGS.moni;
idout(lks_ibf_moni) := r.moni;
idout(lks_ibf_ie) := r.ie;
if IB_MREQ.racc = '1' then -- rri ---------------------
idout(lks_ibf_ir) := r.intreq;
end if;
end if;
-- ibus write transactions
if r.ibsel='1' and ibw0='1' then
n.ie := IB_MREQ.din(lks_ibf_ie);
n.moni := IB_MREQ.din(lks_ibf_moni);
if IB_MREQ.din(lks_ibf_ie)='0' or IB_MREQ.din(lks_ibf_moni)='0' then
n.intreq := '0';
if IB_MREQ.racc = '0' then -- cpu ---------------------
n.ie := IB_MREQ.din(lks_ibf_ie);
if IB_MREQ.din(lks_ibf_moni) = '0' then -- write 0 to moni
n.moni := '0'; -- clears moni
end if;
if IB_MREQ.din(lks_ibf_ie) = '0' then -- ie set 0
n.intreq := '0'; -- cancel interrupt
end if;
end if;
end if;

View File

@@ -1,4 +1,4 @@
-- $Id: ibdr_dl11.vhd 1131 2019-04-14 13:24:25Z mueller $
-- $Id: ibdr_dl11.vhd 1138 2019-04-26 08:14:56Z mueller $
--
-- Copyright 2008-2019 by Walter F.J. Mueller <W.F.J.Mueller@gsi.de>
--
@@ -28,6 +28,7 @@
--
-- Revision History:
-- Date Rev Version Comment
-- 2019-04-24 1138 1.3.2 add rcsr.ir and xcsr.ir (intreq monitors)
-- 2019-04-14 1131 1.3.1 RLIM_CEV now slv8
-- 2019-04-07 1127 1.3 for dl11_buf compat: xbuf.val in bit 15 and 8;
-- use rbuf instead xbuf for rdry reporting; remove
@@ -83,11 +84,13 @@ architecture syn of ibdr_dl11 is
subtype rcsr_ibf_rrlim is integer range 14 downto 12;
constant rcsr_ibf_rdone : integer := 7;
constant rcsr_ibf_rie : integer := 6;
constant rcsr_ibf_rir : integer := 5;
constant rbuf_ibf_rrdy : integer := 15;
constant xcsr_ibf_xrdy : integer := 7;
constant xcsr_ibf_xie : integer := 6;
constant xcsr_ibf_xir : integer := 5;
constant xbuf_ibf_xval : integer := 15;
constant xbuf_ibf_xval8 : integer := 8;
@@ -204,6 +207,7 @@ begin
else -- rri ---------------------
idout(rcsr_ibf_rrlim) := r.rrlim;
idout(rcsr_ibf_rir) := r.rintreq;
if ibw1 = '1' then
n.rrlim := IB_MREQ.din(rcsr_ibf_rrlim);
end if;
@@ -244,6 +248,9 @@ begin
n.xintreq := '0';
end if;
end if;
else -- rri ---------------------
idout(xcsr_ibf_xir) := r.xintreq;
end if;
when ibaddr_xbuf => -- XBUF -- transmit data buffer ------

View File

@@ -1,4 +1,4 @@
-- $Id: ibdr_lp11.vhd 1126 2019-04-06 17:37:40Z mueller $
-- $Id: ibdr_lp11.vhd 1138 2019-04-26 08:14:56Z mueller $
--
-- Copyright 2009-2019 by Walter F.J. Mueller <W.F.J.Mueller@gsi.de>
--
@@ -27,6 +27,7 @@
--
-- Revision History:
-- Date Rev Version Comment
-- 2019-04-24 1138 1.3.3 add csr.ir (intreq monitor)
-- 2019-03-10 1121 1.3.2 ignore buf write if csr.err=1 for lp11_buf compat
-- 2019-03-03 1118 1.3.1 VAL in bit 15 and 8 for lp11_buf compat
-- 2013-05-04 515 1.3 BUGFIX: r.err was cleared in racc read !
@@ -76,6 +77,7 @@ architecture syn of ibdr_lp11 is
constant csr_ibf_err : integer := 15;
constant csr_ibf_done : integer := 7;
constant csr_ibf_ie : integer := 6;
constant csr_ibf_ir : integer := 5;
constant buf_ibf_val : integer := 15;
constant buf_ibf_val8: integer := 8;
@@ -152,6 +154,7 @@ begin
idout(csr_ibf_err) := r.err;
idout(csr_ibf_done) := r.done;
idout(csr_ibf_ie) := r.ie;
if IB_MREQ.racc = '0' then -- cpu ---------------------
if ibw0 = '1' then
n.ie := IB_MREQ.din(csr_ibf_ie);
@@ -163,7 +166,9 @@ begin
n.intreq := '0';
end if;
end if;
else -- rri ---------------------
idout(csr_ibf_ir) := r.intreq;
if ibw1 = '1' then
n.err := IB_MREQ.din(csr_ibf_err);
if IB_MREQ.din(csr_ibf_err) = '1' then
@@ -174,6 +179,7 @@ begin
end if;
when ibaddr_buf => -- BUF -- data buffer ----------------
if IB_MREQ.racc = '0' then -- cpu ---------------------
if ibw0 = '1' then
if r.done = '1' then -- ignore buf write when done=0
@@ -190,6 +196,7 @@ begin
end if; -- r.err = '0'
end if; -- r.done = '1'
end if; -- ibw0 = '1'
else -- rri ---------------------
idout(r.buf'range) := r.buf;
idout(buf_ibf_val) := not r.done;

View File

@@ -1,4 +1,4 @@
-- $Id: ibdr_lp11_buf.vhd 1134 2019-04-21 17:18:03Z mueller $
-- $Id: ibdr_lp11_buf.vhd 1138 2019-04-26 08:14:56Z mueller $
--
-- Copyright 2019- by Walter F.J. Mueller <W.F.J.Mueller@gsi.de>
--
@@ -23,6 +23,7 @@
--
-- Revision History:
-- Date Rev Version Comment
-- 2019-04-24 1138 1.0.3 add csr.ir (intreq monitor)
-- 2019-04-20 1134 1.0.2 remove fifo clear on BRESET
-- 2019-04-14 1131 1.0.1 RLIM_CEV now slv8
-- 2019-03-17 1123 1.0 Initial version
@@ -73,6 +74,7 @@ architecture syn of ibdr_lp11_buf is
subtype csr_ibf_type is integer range 10 downto 8;
constant csr_ibf_done : integer := 7;
constant csr_ibf_ie : integer := 6;
constant csr_ibf_ir : integer := 5;
constant buf_ibf_val : integer := 15;
subtype buf_ibf_size is integer range AWIDTH-1+8 downto 8;
subtype buf_ibf_data is integer range 6 downto 0;
@@ -203,6 +205,7 @@ begin
idout(csr_ibf_err) := r.err;
idout(csr_ibf_done) := r.done;
idout(csr_ibf_ie) := r.ie;
if IB_MREQ.racc = '0' then -- cpu
if ibw0 = '1' then
n.ie := IB_MREQ.din(csr_ibf_ie);
@@ -214,9 +217,11 @@ begin
n.intreq := '0';
end if;
end if;
else -- rri
idout(csr_ibf_rlim) := r.rlim;
idout(csr_ibf_type) := slv(to_unsigned(AWIDTH,3));
idout(csr_ibf_ir) := r.intreq;
if ibw1 = '1' then
n.err := IB_MREQ.din(csr_ibf_err);
n.rlim := IB_MREQ.din(csr_ibf_rlim);
@@ -228,6 +233,7 @@ begin
end if;
when ibaddr_buf => -- BUF -- data buffer ----------------
if IB_MREQ.racc = '0' then -- cpu
if ibw0 = '1' then
irlimsta := '1'; -- in all cases start timer
@@ -245,6 +251,7 @@ begin
end if; -- r.err = '0'
end if; -- r.done = '1'
end if; -- ibw0 = '1'
else -- rri
idout(buf_ibf_val) := not PBUF_EMPTY;
idout(buf_ibf_size) := PBUF_SIZE;

View File

@@ -1,5 +1,5 @@
#!/usr/bin/perl -w
# $Id: asm-11 1133 2019-04-19 18:43:00Z mueller $
# $Id: asm-11 1138 2019-04-26 08:14:56Z mueller $
#
# Copyright 2013-2019 by Walter F.J. Mueller <W.F.J.Mueller@gsi.de>
#
@@ -14,6 +14,7 @@
#
# Revision History:
# Date Rev Version Comment
# 2019-04-25 1138 1.0.7 print lines with errors to stderr unless -lst seen
# 2019-04-19 1133 1.0.6 .end directive autocreates '...end' label
# 2018-11-03 1065 1.0.5 add and use bailout
# 2015-11-01 712 1.0.4 BUGFIX: fix '.' handling in instructions
@@ -340,11 +341,11 @@ write_lsm($lsm_fname) if $lsm_do;
# and exit
if ($errcnt_tot > 0) {
print "asm-11-E: compilation errors:";
print STDERR "asm-11-E: compilation errors:";
foreach my $err (sort keys %errcnt) {
printf " %s: %d", $err, $errcnt{$err};
printf STDERR " %s: %d", $err, $errcnt{$err};
}
print "\n";
print STDERR "\n";
exit 1;
}
exit 0;
@@ -1619,7 +1620,7 @@ sub to_rad50 {
sub pass2 {
my $fh;
my $fh = *STDERR; # for error line only print
if ($lst_do) {
if ($lst_fname eq "-") {
$fh = *STDOUT;
@@ -1650,8 +1651,12 @@ sub pass2 {
# generate output data
pass2_out($rl);
# listing requested
pass2_lst_line($rl, $fh) if $lst_do;
# listing if requested or error detected in this line
if ($lst_do) {
pass2_lst_line($rl, $fh);
} else {
pass2_lst_line($rl, $fh) if $$rl{err} ne '';
}
# pass 2 dump requested
dump_rl($rl) if $opts{tpass2};
@@ -1879,7 +1884,19 @@ sub pass2_lst_line {
$str .= ' ' x 21;
}
$str .= ' ' . $$rl{line} . "\n";
my $line = $$rl{line};
# if only error reporting is done strip the comments. Use that the last
# token is always type EOL and holds the comment in {val}. Therefore
# @{$$rl{tl}}[-1]->{val} is either undefined, or the comment string
if (not $lst_do) { # only error reporting ?
my $comm = @{$$rl{tl}}[-1]->{val}; # get comment (see above)
if (defined $comm) { # if comment seem
$line = substr($line,0,length($line)-length($comm)); # drop comment
$line =~ s/\s*$//; # drop traing blanks
}
}
$str .= ' ' . $line;
$str .= "\n";
print $fh $str;
if (1) {
while (scalar(@ow)) {

View File

@@ -1,4 +1,4 @@
# $Id: test_lp11_all.tcl 1134 2019-04-21 17:18:03Z mueller $
# $Id: test_lp11_all.tcl 1138 2019-04-26 08:14:56Z mueller $
#
# Copyright 2019- by Walter F.J. Mueller <W.F.J.Mueller@gsi.de>
# License disclaimer see License.txt in $RETROBASE directory
@@ -35,7 +35,7 @@ rlc log " A1.1: csr err, done --------------------------------"
# loc ERR=0 --> test ERR=1,DONE=1,IE=0 (ERR not loc writable)
# rem ERR=0 --> test ERR=0,DONE=1,IE=0
# breset --> test ERR=0 (not set by breset)
set rcsrmask [regbld ibd_lp11::RCSR err done ie]
set rcsrmask [regbld ibd_lp11::RCSR err done ie ir]
$cpu cp \
-breset \
@@ -56,17 +56,17 @@ $cpu cp \
# remember 'type' retrieved from csr for later tests
set type [regget ibd_lp11::RCSR(type) $lprcsr]
rlc log " A1.2: csr ie ---------------------------------------"
# loc IE=1 --> seen on loc and rem
rlc log " A1.2: csr ie,ir ------------------------------------"
# loc IE=1 --> seen on loc and rem (check also ir=1)
# rem IE=0 --> stays, IE not rem writable
# loc IE=0 --> seen on loc and rem
$cpu cp \
-wma lpa.csr [regbld ibd_lp11::CSR ie] \
-rma lpa.csr -edata [regbld ibd_lp11::CSR ie done] \
-ribr lpa.csr -edata [regbld ibd_lp11::RCSR ie done] $rcsrmask\
-rma lpa.csr -edata [regbld ibd_lp11::CSR done ie] \
-ribr lpa.csr -edata [regbld ibd_lp11::RCSR done ie ir] $rcsrmask\
-wibr lpa.csr 0x0 \
-rma lpa.csr -edata [regbld ibd_lp11::CSR ie done] \
-ribr lpa.csr -edata [regbld ibd_lp11::RCSR ie done] $rcsrmask\
-rma lpa.csr -edata [regbld ibd_lp11::CSR done ie] \
-ribr lpa.csr -edata [regbld ibd_lp11::RCSR done ie ir] $rcsrmask\
-wma lpa.csr 0x0 \
-rma lpa.csr -edata [regbld ibd_lp11::CSR done] \
-ribr lpa.csr -edata [regbld ibd_lp11::RCSR done] $rcsrmask
@@ -76,7 +76,7 @@ if {$type > 0} { # if buffered test rlim
# rem write rlim --> seen rem, not loc
# loc write rlim --> stays, rlim not loc writable
# breset --> rlim not cleared
set rcsrmaskbuf [regbld ibd_lp11::RCSR err {rlim -1} done ie]
set rcsrmaskbuf [regbld ibd_lp11::RCSR err {rlim -1} done ie ir]
$cpu cp \
-wibr lpa.csr [regbld ibd_lp11::RCSR {rlim 1}] \
-ribr lpa.csr -edata [regbld ibd_lp11::RCSR {rlim 1} done] $rcsrmaskbuf \

View File

@@ -1,4 +1,4 @@
# $Id: util.tcl 1134 2019-04-21 17:18:03Z mueller $
# $Id: util.tcl 1138 2019-04-26 08:14:56Z mueller $
#
# Copyright 2015-2019 by Walter F.J. Mueller <W.F.J.Mueller@gsi.de>
#
@@ -13,7 +13,7 @@
#
# Revision History:
# Date Rev Version Comment
# 2019-04-21 1134 1.1 updates for buffered dl11
# 2019-04-24 1138 1.1 updates for buffered dl11
# 2015-12-26 719 1.0 Initial version
#
@@ -29,11 +29,11 @@ namespace eval ibd_dl11 {
#
regdsc RCSR {done 7} {ie 6}
regdsc RRCSR {rlim 14 3} {type 10 3} {done 7} {ie 6} {fclr 5}
regdsc RRCSR {rlim 14 3} {type 10 3} {done 7} {ie 6} {ir 5} {rlb 4} {fclr 1}
regdsc RRBUF {rrdy 15} {rsize 14 7 "d"} {tsize 6 7 "d"}
regdsc XCSR {done 7} {ie 6}
regdsc RXCSR {rlim 14 3} {done 7} {ie 6}
regdsc RXCSR {rlim 14 3} {done 7} {ie 6} {ir 5} {rlb 4}
regdsc RXBUF {val 15} {size 14 7 "d"} {data 7 8 "o"}
rw11util::regmap_add ibd_dl11 tt?.rcsr {l? RCSR r? RRCSR}

View File

@@ -1,4 +1,4 @@
# $Id: util.tcl 1123 2019-03-17 17:55:12Z mueller $
# $Id: util.tcl 1138 2019-04-26 08:14:56Z mueller $
#
# Copyright 2015-2019 by Walter F.J. Mueller <W.F.J.Mueller@gsi.de>
#
@@ -30,7 +30,7 @@ namespace eval ibd_lp11 {
#
regdsc CSR {err 15} {done 7} {ie 6}
regdsc RCSR {err 15} {rlim 14 3} {type 10 3} {done 7} {ie 6}
regdsc RCSR {err 15} {rlim 14 3} {type 10 3} {done 7} {ie 6} {ir 5}
regdsc RBUF {val 15} {size 14 7 "d"} {data 6 7 "o"}
rw11util::regmap_add ibd_lp11 lp?.csr {l? CSR r? RCSR}