mirror of
https://github.com/wfjm/w11.git
synced 2026-04-03 21:33:08 +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:
@@ -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;
|
||||
|
||||
|
||||
@@ -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 ------
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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)) {
|
||||
|
||||
@@ -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 \
|
||||
|
||||
@@ -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}
|
||||
|
||||
@@ -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}
|
||||
|
||||
Reference in New Issue
Block a user