diff --git a/doc/CHANGELOG.md b/doc/CHANGELOG.md
index b328d462..37c6c5fc 100644
--- a/doc/CHANGELOG.md
+++ b/doc/CHANGELOG.md
@@ -20,15 +20,40 @@ software or firmware builds or that the documentation is consistent.
The full set of tests is only run for tagged releases.
### Summary
-- add Travis CI integration (phase 1), see [Travis CI project wfjm/w11](https://travis-ci.org/wfjm/w11)
-- add Coverity Scan (manual scan upload, not via Travis) see [Coverity project wfjm/w11](https://scan.coverity.com/projects/wfjm-w11).
-- fixes for coverity detected defects, most uncritical, but some real bugs
-- use for C++ compiles -Wpedantic
-- add KW11-P (programmable clock) to all w11 systems
-- sys_w11_n4: reduce cache from 64 to 32 kB to keep timing closure
+- add continuous integration support via [Travis CI](https://travis-ci.org),
+ add [project wfjm/w11](https://travis-ci.org/wfjm/w11), and setup
+ a `.travis.yml`.
+- use static source code analysis [Coverity Scan](https://scan.coverity.com),
+ add [project wfjm/w11](https://scan.coverity.com/projects/wfjm-w11).
+ The scans are manually uploaded, not automated via Travis (w11 is a `vhdl`
+ project after all, so C++ backend code doesn't change so often). Coverity
+ found a modest number of defects, most uncritical, but some real bugs.
+- the Coverity results triggered a general backend code review
+ - fix coverity detected defects
+ - get backend code `-Wall -Wextra -Wpedantic` clean
+- add KW11-P (programmable clock) to all w11 systems. It is usefull in test
+ benches (fast interrupt source) and enables on the long run to port the
+ 2.10BSD kernel profiling code to 2.11BSD.
- stay with vivado 2017.2 as default tool, 2017.2 to 2018.2 exhibit much
- longer build times for w11 designs (see Xilinx Forum post [884858](https://forums.xilinx.com/t5/Synthesis/vivado-2018-2-much-slower-than-2017-2-at-least-for-small-designs/m-p/884858))
+ longer build times for w11 designs (see Xilinx Forum post
+ [884858](https://forums.xilinx.com/t5/Synthesis/vivado-2018-2-much-slower-than-2017-2-at-least-for-small-designs/m-p/884858))
+
+### New features
+- travis support via `.travis.yml`
+ - compiles the C++ backend
+ - download the `ghdl` based test benches (can't be build under Travis)
+ - execute the test benches with `tbrun`
+- add KW11-P support, enable it in all w11a systems
+- add pdp11_dmpcnt: performance counters
+
+### Changes
+- use for C++ compiles also `-Wpedantic`
+- sys_w11_n4: reduce cache from 64 to 32 kB to keep timing closure
- RtclRw11Unit: fix for clang: M_virt() now public
+- backend code review:
+ - fixes for uninitialized variables (coverity, all uncritical)
+ - now -Wunused-parameter clean (comment unused params)
+ - now -Wunused-variable clean (comment so far unused code)
### Bug Fixes
- RtclArgs.hpp: BUGFIX: get *_min limits correct (gcc -Wpedantic)
@@ -39,6 +64,8 @@ The full set of tests is only run for tagged releases.
- BUGFIX: Open(): resource leak (coverity)
- BUGFIX: Rewind(): bad constant expression (coverity)
+### Known issues
+
---
## 2018-08-26: [w11a_V0.752](https://github.com/wfjm/w11/releases/tag/w11a_V0.752) - rev 1041(wfjm)
diff --git a/rtl/sys_gen/w11a/arty_bram/sys_conf.vhd b/rtl/sys_gen/w11a/arty_bram/sys_conf.vhd
index 7e2d160f..cec3c4df 100644
--- a/rtl/sys_gen/w11a/arty_bram/sys_conf.vhd
+++ b/rtl/sys_gen/w11a/arty_bram/sys_conf.vhd
@@ -1,4 +1,4 @@
--- $Id: sys_conf.vhd 1043 2018-09-09 10:20:12Z mueller $
+-- $Id: sys_conf.vhd 1050 2018-09-23 15:46:42Z mueller $
--
-- Copyright 2016-2018 by Walter F.J. Mueller
--
@@ -19,6 +19,7 @@
-- Tool versions: viv 2015.4-2018.2; ghdl 0.33-0.34
-- Revision History:
-- Date Rev Version Comment
+-- 2018-09-22 1050 1.3.7 add sys_conf_dmpcnt
-- 2018-09-08 1043 1.3.6 add sys_conf_ibd_kw11p
-- 2017-03-04 858 1.3.5 enable deuna
-- 2017-01-29 847 1.3.4 add sys_conf_ibd_deuna
@@ -61,6 +62,7 @@ package sys_conf is
constant sys_conf_rbmon_awidth : integer := 0; -- no rbmon to save BRAMs
constant sys_conf_ibmon_awidth : integer := 0; -- no ibmon to save BRAMs
constant sys_conf_dmscnt : boolean := false;
+ constant sys_conf_dmpcnt : boolean := true;
constant sys_conf_dmhbpt_nunit : integer := 2; -- use 0 to disable
constant sys_conf_dmcmon_awidth : integer := 0; -- no dmcmon to save BRAMs
constant sys_conf_rbd_sysmon : boolean := true; -- SYSMON(XADC)
diff --git a/rtl/sys_gen/w11a/arty_bram/tb/sys_conf_sim.vhd b/rtl/sys_gen/w11a/arty_bram/tb/sys_conf_sim.vhd
index 95a8e2a5..e370b4ed 100644
--- a/rtl/sys_gen/w11a/arty_bram/tb/sys_conf_sim.vhd
+++ b/rtl/sys_gen/w11a/arty_bram/tb/sys_conf_sim.vhd
@@ -1,4 +1,4 @@
--- $Id: sys_conf_sim.vhd 1043 2018-09-09 10:20:12Z mueller $
+-- $Id: sys_conf_sim.vhd 1050 2018-09-23 15:46:42Z mueller $
--
-- Copyright 2016-2018 by Walter F.J. Mueller
--
@@ -19,6 +19,7 @@
-- Tool versions: viv 2015.4-2018.2; ghdl 0.33-0.34
-- Revision History:
-- Date Rev Version Comment
+-- 2018-09-22 1050 1.3.6 add sys_conf_dmpcnt
-- 2018-09-08 1043 1.3.5 add sys_conf_ibd_kw11p
-- 2017-01-29 847 1.3.4 add sys_conf_ibd_deuna
-- 2016-06-18 775 1.3.3 use PLL for clkser_gentype
@@ -60,6 +61,7 @@ package sys_conf is
constant sys_conf_rbmon_awidth : integer := 0; -- no rbmon to save BRAMs
constant sys_conf_ibmon_awidth : integer := 0; -- no ibmon to save BRAMs
constant sys_conf_dmscnt : boolean := false;
+ constant sys_conf_dmpcnt : boolean := true;
constant sys_conf_dmhbpt_nunit : integer := 2; -- use 0 to disable
constant sys_conf_dmcmon_awidth : integer := 0; -- no dmcmon to save BRAMs
constant sys_conf_rbd_sysmon : boolean := true; -- SYSMON(XADC)
diff --git a/rtl/sys_gen/w11a/artys7_bram/sys_conf.vhd b/rtl/sys_gen/w11a/artys7_bram/sys_conf.vhd
index cac01ad4..a2c30d73 100644
--- a/rtl/sys_gen/w11a/artys7_bram/sys_conf.vhd
+++ b/rtl/sys_gen/w11a/artys7_bram/sys_conf.vhd
@@ -1,4 +1,4 @@
--- $Id: sys_conf.vhd 1043 2018-09-09 10:20:12Z mueller $
+-- $Id: sys_conf.vhd 1050 2018-09-23 15:46:42Z mueller $
--
-- Copyright 2018- by Walter F.J. Mueller
--
@@ -19,6 +19,7 @@
-- Tool versions: viv 2017.2-2018.2; ghdl 0.34
-- Revision History:
-- Date Rev Version Comment
+-- 2018-09-22 1050 1.0.2 add sys_conf_dmpcnt
-- 2018-09-08 1043 1.0.1 add sys_conf_ibd_kw11p
-- 2018-08-11 1038 1.0 Initial version (derived from _aa7 version)
------------------------------------------------------------------------------
@@ -53,6 +54,7 @@ package sys_conf is
constant sys_conf_rbmon_awidth : integer := 0; -- no rbmon to save BRAMs
constant sys_conf_ibmon_awidth : integer := 0; -- no ibmon to save BRAMs
constant sys_conf_dmscnt : boolean := false;
+ constant sys_conf_dmpcnt : boolean := true;
constant sys_conf_dmhbpt_nunit : integer := 2; -- use 0 to disable
constant sys_conf_dmcmon_awidth : integer := 0; -- no dmcmon to save BRAMs
constant sys_conf_rbd_sysmon : boolean := true; -- SYSMON(XADC)
diff --git a/rtl/sys_gen/w11a/artys7_bram/tb/sys_conf_sim.vhd b/rtl/sys_gen/w11a/artys7_bram/tb/sys_conf_sim.vhd
index 7cbe2086..c4493f8b 100644
--- a/rtl/sys_gen/w11a/artys7_bram/tb/sys_conf_sim.vhd
+++ b/rtl/sys_gen/w11a/artys7_bram/tb/sys_conf_sim.vhd
@@ -1,4 +1,4 @@
--- $Id: sys_conf_sim.vhd 1043 2018-09-09 10:20:12Z mueller $
+-- $Id: sys_conf_sim.vhd 1050 2018-09-23 15:46:42Z mueller $
--
-- Copyright 2018- by Walter F.J. Mueller
--
@@ -19,6 +19,7 @@
-- Tool versions: viv 2017.2-2018.2; ghdl 0.34
-- Revision History:
-- Date Rev Version Comment
+-- 2018-09-22 1050 1.0.2 add sys_conf_dmpcnt
-- 2018-09-08 1043 1.0.1 add sys_conf_ibd_kw11p
-- 2018-08-11 1038 1.0 Initial version
------------------------------------------------------------------------------
@@ -53,6 +54,7 @@ package sys_conf is
constant sys_conf_rbmon_awidth : integer := 0; -- no rbmon to save BRAMs
constant sys_conf_ibmon_awidth : integer := 0; -- no ibmon to save BRAMs
constant sys_conf_dmscnt : boolean := false;
+ constant sys_conf_dmpcnt : boolean := true;
constant sys_conf_dmhbpt_nunit : integer := 2; -- use 0 to disable
constant sys_conf_dmcmon_awidth : integer := 0; -- no dmcmon to save BRAMs
constant sys_conf_rbd_sysmon : boolean := true; -- SYSMON(XADC)
diff --git a/rtl/sys_gen/w11a/basys3/sys_conf.vhd b/rtl/sys_gen/w11a/basys3/sys_conf.vhd
index f0e4c56d..c2785070 100644
--- a/rtl/sys_gen/w11a/basys3/sys_conf.vhd
+++ b/rtl/sys_gen/w11a/basys3/sys_conf.vhd
@@ -1,4 +1,4 @@
--- $Id: sys_conf.vhd 1043 2018-09-09 10:20:12Z mueller $
+-- $Id: sys_conf.vhd 1050 2018-09-23 15:46:42Z mueller $
--
-- Copyright 2015-2018 by Walter F.J. Mueller
--
@@ -19,6 +19,7 @@
-- Tool versions: viv 2014.4-2018.2; ghdl 0.31-0.34
-- Revision History:
-- Date Rev Version Comment
+-- 2018-09-22 1050 1.3.7 add sys_conf_dmpcnt
-- 2018-09-08 1043 1.3.6 add sys_conf_ibd_kw11p
-- 2017-03-04 858 1.3.5 enable deuna
-- 2017-01-29 847 1.3.4 add sys_conf_ibd_deuna
@@ -63,6 +64,7 @@ package sys_conf is
constant sys_conf_rbmon_awidth : integer := 0; -- no rbmon to save BRAMs
constant sys_conf_ibmon_awidth : integer := 0; -- no ibmon to save BRAMs
constant sys_conf_dmscnt : boolean := false;
+ constant sys_conf_dmpcnt : boolean := true;
constant sys_conf_dmhbpt_nunit : integer := 2; -- use 0 to disable
constant sys_conf_dmcmon_awidth : integer := 0; -- no dmcmon to save BRAMs
constant sys_conf_rbd_sysmon : boolean := true; -- SYSMON(XADC)
diff --git a/rtl/sys_gen/w11a/basys3/tb/sys_conf_sim.vhd b/rtl/sys_gen/w11a/basys3/tb/sys_conf_sim.vhd
index 1e5a955c..0d65571a 100644
--- a/rtl/sys_gen/w11a/basys3/tb/sys_conf_sim.vhd
+++ b/rtl/sys_gen/w11a/basys3/tb/sys_conf_sim.vhd
@@ -1,4 +1,4 @@
--- $Id: sys_conf_sim.vhd 1043 2018-09-09 10:20:12Z mueller $
+-- $Id: sys_conf_sim.vhd 1050 2018-09-23 15:46:42Z mueller $
--
-- Copyright 2015-2018 by Walter F.J. Mueller
--
@@ -19,6 +19,7 @@
-- Tool versions: viv 2014.4-2018.2; ghdl 0.31-0.34
-- Revision History:
-- Date Rev Version Comment
+-- 2018-09-22 1050 1.3.6 add sys_conf_dmpcnt
-- 2018-09-08 1043 1.3.5 add sys_conf_ibd_kw11p
-- 2017-01-29 847 1.3.4 add sys_conf_ibd_deuna
-- 2016-06-18 775 1.3.3 use PLL for clkser_gentype
@@ -62,6 +63,7 @@ package sys_conf is
constant sys_conf_rbmon_awidth : integer := 0; -- no rbmon to save BRAMs
constant sys_conf_ibmon_awidth : integer := 0; -- no ibmon to save BRAMs
constant sys_conf_dmscnt : boolean := false;
+ constant sys_conf_dmpcnt : boolean := true;
constant sys_conf_dmhbpt_nunit : integer := 2; -- use 0 to disable
constant sys_conf_dmcmon_awidth : integer := 0; -- no dmcmon to save BRAMs
constant sys_conf_rbd_sysmon : boolean := false; -- SYSMON(XADC)
diff --git a/rtl/sys_gen/w11a/cmoda7/sys_conf.vhd b/rtl/sys_gen/w11a/cmoda7/sys_conf.vhd
index 90346ca1..1238baff 100644
--- a/rtl/sys_gen/w11a/cmoda7/sys_conf.vhd
+++ b/rtl/sys_gen/w11a/cmoda7/sys_conf.vhd
@@ -1,4 +1,4 @@
--- $Id: sys_conf.vhd 1043 2018-09-09 10:20:12Z mueller $
+-- $Id: sys_conf.vhd 1050 2018-09-23 15:46:42Z mueller $
--
-- Copyright 2017-2018 by Walter F.J. Mueller
--
@@ -19,6 +19,7 @@
-- Tool versions: viv 2017.1-2018.2; ghdl 0.34
-- Revision History:
-- Date Rev Version Comment
+-- 2018-09-22 1050 1.0.2 add sys_conf_dmpcnt
-- 2018-09-08 1043 1.0.1 add sys_conf_ibd_kw11p
-- 2017-06-24 914 1.0 Initial version (derived from _n4 version)
------------------------------------------------------------------------------
@@ -53,6 +54,7 @@ package sys_conf is
constant sys_conf_rbmon_awidth : integer := 9; -- use 0 to disable
constant sys_conf_ibmon_awidth : integer := 9; -- use 0 to disable
constant sys_conf_dmscnt : boolean := false;
+ constant sys_conf_dmpcnt : boolean := true;
constant sys_conf_dmhbpt_nunit : integer := 2; -- use 0 to disable
constant sys_conf_dmcmon_awidth : integer := 8; -- use 0 to disable, 8 to use
constant sys_conf_rbd_sysmon : boolean := true; -- SYSMON(XADC)
diff --git a/rtl/sys_gen/w11a/cmoda7/tb/sys_conf_sim.vhd b/rtl/sys_gen/w11a/cmoda7/tb/sys_conf_sim.vhd
index 9ab96b2a..67db796e 100644
--- a/rtl/sys_gen/w11a/cmoda7/tb/sys_conf_sim.vhd
+++ b/rtl/sys_gen/w11a/cmoda7/tb/sys_conf_sim.vhd
@@ -1,4 +1,4 @@
--- $Id: sys_conf_sim.vhd 1043 2018-09-09 10:20:12Z mueller $
+-- $Id: sys_conf_sim.vhd 1050 2018-09-23 15:46:42Z mueller $
--
-- Copyright 2017-2018 by Walter F.J. Mueller
--
@@ -19,6 +19,7 @@
-- Tool versions: viv 2017.1-2018.2; ghdl 0.34
-- Revision History:
-- Date Rev Version Comment
+-- 2018-09-22 1050 1.0.2 add sys_conf_dmpcnt
-- 2018-09-08 1043 1.0.1 add sys_conf_ibd_kw11p
-- 2017-06-24 914 1.0 Initial version (cloned from _n4)
------------------------------------------------------------------------------
@@ -53,6 +54,7 @@ package sys_conf is
constant sys_conf_rbmon_awidth : integer := 9; -- use 0 to disable
constant sys_conf_ibmon_awidth : integer := 9; -- use 0 to disable
constant sys_conf_dmscnt : boolean := false;
+ constant sys_conf_dmpcnt : boolean := true;
constant sys_conf_dmhbpt_nunit : integer := 2; -- use 0 to disable
constant sys_conf_dmcmon_awidth : integer := 8; -- use 0 to disable, 8 to use
constant sys_conf_rbd_sysmon : boolean := true; -- SYSMON(XADC)
diff --git a/rtl/sys_gen/w11a/nexys2/sys_conf.vhd b/rtl/sys_gen/w11a/nexys2/sys_conf.vhd
index 47fe2074..daba0800 100644
--- a/rtl/sys_gen/w11a/nexys2/sys_conf.vhd
+++ b/rtl/sys_gen/w11a/nexys2/sys_conf.vhd
@@ -1,4 +1,4 @@
--- $Id: sys_conf.vhd 1043 2018-09-09 10:20:12Z mueller $
+-- $Id: sys_conf.vhd 1050 2018-09-23 15:46:42Z mueller $
--
-- Copyright 2010-2018 by Walter F.J. Mueller
--
@@ -19,6 +19,7 @@
-- Tool versions: xst 11.4-14.7; ghdl 0.26-0.34
-- Revision History:
-- Date Rev Version Comment
+-- 2018-09-22 1050 1.6.5 add sys_conf_dmpcnt
-- 2018-09-08 1043 1.6.4 add sys_conf_ibd_kw11p
-- 2017-04-22 884 1.6.3 use sys_conf_dmcmon_awidth=8 (proper value)
-- 2017-03-04 858 1.6.2 enable deuna
@@ -62,6 +63,7 @@ package sys_conf is
constant sys_conf_rbmon_awidth : integer := 9; -- use 0 to disable
constant sys_conf_ibmon_awidth : integer := 9; -- use 0 to disable
constant sys_conf_dmscnt : boolean := true;
+ constant sys_conf_dmpcnt : boolean := true;
constant sys_conf_dmhbpt_nunit : integer := 2; -- use 0 to disable
constant sys_conf_dmcmon_awidth : integer := 8; -- use 0 to disable
diff --git a/rtl/sys_gen/w11a/nexys2/tb/sys_conf_sim.vhd b/rtl/sys_gen/w11a/nexys2/tb/sys_conf_sim.vhd
index 390ac386..d27cec0a 100644
--- a/rtl/sys_gen/w11a/nexys2/tb/sys_conf_sim.vhd
+++ b/rtl/sys_gen/w11a/nexys2/tb/sys_conf_sim.vhd
@@ -1,4 +1,4 @@
--- $Id: sys_conf_sim.vhd 1043 2018-09-09 10:20:12Z mueller $
+-- $Id: sys_conf_sim.vhd 1050 2018-09-23 15:46:42Z mueller $
--
-- Copyright 2010-2018 by Walter F.J. Mueller
--
@@ -19,6 +19,7 @@
-- Tool versions: xst 11.4-14.7; ghdl 0.26-0.34
-- Revision History:
-- Date Rev Version Comment
+-- 2018-09-22 1050 1.6.4 add sys_conf_dmpcnt
-- 2018-09-08 1043 1.6.3 add sys_conf_ibd_kw11p
-- 2017-04-22 884 1.6.2 use sys_conf_dmcmon_awidth=8 (proper value)
-- 2017-01-29 847 1.6.1 add sys_conf_ibd_deuna
@@ -64,6 +65,7 @@ package sys_conf is
constant sys_conf_rbmon_awidth : integer := 9; -- use 0 to disable
constant sys_conf_ibmon_awidth : integer := 9; -- use 0 to disable
constant sys_conf_dmscnt : boolean := true;
+ constant sys_conf_dmpcnt : boolean := true;
constant sys_conf_dmhbpt_nunit : integer := 2; -- use 0 to disable
constant sys_conf_dmcmon_awidth : integer := 8; -- use 0 to disable
diff --git a/rtl/sys_gen/w11a/nexys3/sys_conf.vhd b/rtl/sys_gen/w11a/nexys3/sys_conf.vhd
index 63aef4f4..d5219797 100644
--- a/rtl/sys_gen/w11a/nexys3/sys_conf.vhd
+++ b/rtl/sys_gen/w11a/nexys3/sys_conf.vhd
@@ -1,4 +1,4 @@
--- $Id: sys_conf.vhd 1043 2018-09-09 10:20:12Z mueller $
+-- $Id: sys_conf.vhd 1050 2018-09-23 15:46:42Z mueller $
--
-- Copyright 2011-2018 by Walter F.J. Mueller
--
@@ -19,6 +19,7 @@
-- Tool versions: xst 13.1-14.7; ghdl 0.29-0.34
-- Revision History:
-- Date Rev Version Comment
+-- 2018-09-22 1050 1.7.5 add sys_conf_dmpcnt
-- 2018-09-08 1043 1.7.4 add sys_conf_ibd_kw11p
-- 2017-04-22 884 1.7.3 use sys_conf_dmcmon_awidth=8 (proper value)
-- 2017-03-04 858 1.7.2 enable deuna
@@ -69,6 +70,7 @@ package sys_conf is
constant sys_conf_rbmon_awidth : integer := 9; -- use 0 to disable
constant sys_conf_ibmon_awidth : integer := 9; -- use 0 to disable
constant sys_conf_dmscnt : boolean := true;
+ constant sys_conf_dmpcnt : boolean := true;
constant sys_conf_dmhbpt_nunit : integer := 2; -- use 0 to disable
constant sys_conf_dmcmon_awidth : integer := 8; -- use 0 to disable
diff --git a/rtl/sys_gen/w11a/nexys3/tb/sys_conf_sim.vhd b/rtl/sys_gen/w11a/nexys3/tb/sys_conf_sim.vhd
index b7b19ca8..d569cf91 100644
--- a/rtl/sys_gen/w11a/nexys3/tb/sys_conf_sim.vhd
+++ b/rtl/sys_gen/w11a/nexys3/tb/sys_conf_sim.vhd
@@ -1,4 +1,4 @@
--- $Id: sys_conf_sim.vhd 1043 2018-09-09 10:20:12Z mueller $
+-- $Id: sys_conf_sim.vhd 1050 2018-09-23 15:46:42Z mueller $
--
-- Copyright 2011-2018 by Walter F.J. Mueller
--
@@ -19,6 +19,7 @@
-- Tool versions: xst 13.1-14.7; ghdl 0.29-0.34
-- Revision History:
-- Date Rev Version Comment
+-- 2018-09-22 1050 1.7.4 add sys_conf_dmpcnt
-- 2018-09-08 1043 1.7.3 add sys_conf_ibd_kw11p
-- 2017-04-22 884 1.7.2 use sys_conf_dmcmon_awidth=8 (proper value)
-- 2017-01-29 847 1.7.1 add sys_conf_ibd_deuna
@@ -64,6 +65,7 @@ package sys_conf is
constant sys_conf_rbmon_awidth : integer := 9; -- use 0 to disable
constant sys_conf_ibmon_awidth : integer := 9; -- use 0 to disable
constant sys_conf_dmscnt : boolean := true;
+ constant sys_conf_dmpcnt : boolean := true;
constant sys_conf_dmhbpt_nunit : integer := 2; -- use 0 to disable
constant sys_conf_dmcmon_awidth : integer := 8; -- use 0 to disable
diff --git a/rtl/sys_gen/w11a/nexys4/sys_conf.vhd b/rtl/sys_gen/w11a/nexys4/sys_conf.vhd
index ccee6028..94f2cde8 100644
--- a/rtl/sys_gen/w11a/nexys4/sys_conf.vhd
+++ b/rtl/sys_gen/w11a/nexys4/sys_conf.vhd
@@ -1,4 +1,4 @@
--- $Id: sys_conf.vhd 1044 2018-09-15 11:12:07Z mueller $
+-- $Id: sys_conf.vhd 1050 2018-09-23 15:46:42Z mueller $
--
-- Copyright 2013-2018 by Walter F.J. Mueller
--
@@ -19,6 +19,7 @@
-- Tool versions: ise 14.5-14.7; viv 2014.4-2018.2; ghdl 0.29-0.34
-- Revision History:
-- Date Rev Version Comment
+-- 2018-09-22 1050 1.5.6 add sys_conf_dmpcnt
-- 2018-09-09 1044 1.5.5 use _cache_twidth TW=7 (32 kByte), timing issues
-- 2018-09-08 1043 1.5.4 add sys_conf_ibd_kw11p
-- 2017-04-22 884 1.5.3 re-enable dmcmon
@@ -69,6 +70,7 @@ package sys_conf is
constant sys_conf_rbmon_awidth : integer := 9; -- use 0 to disable
constant sys_conf_ibmon_awidth : integer := 9; -- use 0 to disable
constant sys_conf_dmscnt : boolean := false;
+ constant sys_conf_dmpcnt : boolean := true;
constant sys_conf_dmhbpt_nunit : integer := 2; -- use 0 to disable
constant sys_conf_dmcmon_awidth : integer := 8; -- use 0 to disable, 8 to use
constant sys_conf_rbd_sysmon : boolean := true; -- SYSMON(XADC)
diff --git a/rtl/sys_gen/w11a/nexys4/tb/sys_conf_sim.vhd b/rtl/sys_gen/w11a/nexys4/tb/sys_conf_sim.vhd
index da82dcb0..a6bdf6ab 100644
--- a/rtl/sys_gen/w11a/nexys4/tb/sys_conf_sim.vhd
+++ b/rtl/sys_gen/w11a/nexys4/tb/sys_conf_sim.vhd
@@ -1,4 +1,4 @@
--- $Id: sys_conf_sim.vhd 1044 2018-09-15 11:12:07Z mueller $
+-- $Id: sys_conf_sim.vhd 1050 2018-09-23 15:46:42Z mueller $
--
-- Copyright 2013-2018 by Walter F.J. Mueller
--
@@ -19,6 +19,7 @@
-- Tool versions: xst 14.5-14.7; viv 2016.1-2018.2; ghdl 0.29-0.34
-- Revision History:
-- Date Rev Version Comment
+-- 2018-09-22 1050 1.5.6 add sys_conf_dmpcnt
-- 2018-09-09 1044 1.5.5 use _cache_twidth TW=7 (32 kByte), timing issues
-- 2018-09-08 1043 1.5.3 add sys_conf_ibd_kw11p
-- 2017-04-22 884 1.5.2 re-enable dmcmon
@@ -68,6 +69,7 @@ package sys_conf is
constant sys_conf_rbmon_awidth : integer := 9; -- use 0 to disable
constant sys_conf_ibmon_awidth : integer := 9; -- use 0 to disable
constant sys_conf_dmscnt : boolean := false;
+ constant sys_conf_dmpcnt : boolean := true;
constant sys_conf_dmhbpt_nunit : integer := 2; -- use 0 to disable
constant sys_conf_dmcmon_awidth : integer := 8; -- use 0 to disable, 8 to use
constant sys_conf_rbd_sysmon : boolean := true; -- SYSMON(XADC)
diff --git a/rtl/sys_gen/w11a/nexys4d_bram/sys_conf.vhd b/rtl/sys_gen/w11a/nexys4d_bram/sys_conf.vhd
index c5d08fa8..96fa9718 100644
--- a/rtl/sys_gen/w11a/nexys4d_bram/sys_conf.vhd
+++ b/rtl/sys_gen/w11a/nexys4d_bram/sys_conf.vhd
@@ -1,4 +1,4 @@
--- $Id: sys_conf.vhd 1043 2018-09-09 10:20:12Z mueller $
+-- $Id: sys_conf.vhd 1050 2018-09-23 15:46:42Z mueller $
--
-- Copyright 2017-2018 by Walter F.J. Mueller
--
@@ -19,6 +19,7 @@
-- Tool versions: viv 2016.2-2018.2; ghdl 0.33-0.34
-- Revision History:
-- Date Rev Version Comment
+-- 2018-09-22 1050 1.0.4 add sys_conf_dmpcnt
-- 2018-09-08 1043 1.0.3 add sys_conf_ibd_kw11p
-- 2017-03-04 858 1.0.2 enable deuna
-- 2017-01-29 847 1.0.1 add sys_conf_ibd_deuna
@@ -55,6 +56,7 @@ package sys_conf is
constant sys_conf_rbmon_awidth : integer := 0; -- no rbmon to save BRAMs
constant sys_conf_ibmon_awidth : integer := 0; -- no ibmon to save BRAMs
constant sys_conf_dmscnt : boolean := false;
+ constant sys_conf_dmpcnt : boolean := true;
constant sys_conf_dmhbpt_nunit : integer := 2; -- use 0 to disable
constant sys_conf_dmcmon_awidth : integer := 0; -- no dmcmon to save BRAMs
constant sys_conf_rbd_sysmon : boolean := true; -- SYSMON(XADC)
diff --git a/rtl/sys_gen/w11a/nexys4d_bram/tb/sys_conf_sim.vhd b/rtl/sys_gen/w11a/nexys4d_bram/tb/sys_conf_sim.vhd
index e7837917..2a177def 100644
--- a/rtl/sys_gen/w11a/nexys4d_bram/tb/sys_conf_sim.vhd
+++ b/rtl/sys_gen/w11a/nexys4d_bram/tb/sys_conf_sim.vhd
@@ -1,4 +1,4 @@
--- $Id: sys_conf_sim.vhd 1043 2018-09-09 10:20:12Z mueller $
+-- $Id: sys_conf_sim.vhd 1050 2018-09-23 15:46:42Z mueller $
--
-- Copyright 2017-2018 by Walter F.J. Mueller
--
@@ -19,6 +19,7 @@
-- Tool versions: viv 2016.2-2018.2; ghdl 0.33-0.34
-- Revision History:
-- Date Rev Version Comment
+-- 2018-09-22 1050 1.0.3 add sys_conf_dmpcnt
-- 2018-09-08 1043 1.0.2 add sys_conf_ibd_kw11p
-- 2017-01-29 847 1.0.1 add sys_conf_ibd_deuna
-- 2017-01-04 644 1.0 Initial version (cloned from _br_n4)
@@ -54,6 +55,7 @@ package sys_conf is
constant sys_conf_rbmon_awidth : integer := 0; -- no rbmon to save BRAMs
constant sys_conf_ibmon_awidth : integer := 0; -- no ibmon to save BRAMs
constant sys_conf_dmscnt : boolean := false;
+ constant sys_conf_dmpcnt : boolean := true;
constant sys_conf_dmhbpt_nunit : integer := 2; -- use 0 to disable
constant sys_conf_dmcmon_awidth : integer := 0; -- no dmcmon to save BRAMs
constant sys_conf_rbd_sysmon : boolean := true; -- SYSMON(XADC)
diff --git a/rtl/sys_gen/w11a/s3board/sys_conf.vhd b/rtl/sys_gen/w11a/s3board/sys_conf.vhd
index 001727f4..ed5d39e8 100644
--- a/rtl/sys_gen/w11a/s3board/sys_conf.vhd
+++ b/rtl/sys_gen/w11a/s3board/sys_conf.vhd
@@ -1,4 +1,4 @@
--- $Id: sys_conf.vhd 1043 2018-09-09 10:20:12Z mueller $
+-- $Id: sys_conf.vhd 1050 2018-09-23 15:46:42Z mueller $
--
-- Copyright 2007-2018 by Walter F.J. Mueller
--
@@ -19,7 +19,8 @@
-- Tool versions: xst 8.1-14.7; ghdl 0.18-0.34
-- Revision History:
-- Date Rev Version Comment
--- 2018-09-08 1043 1.3.4 add sys_conf_ibd_kw11p
+-- 2018-09-22 1050 1.3.6 add sys_conf_dmpcnt
+-- 2018-09-08 1043 1.3.5 add sys_conf_ibd_kw11p
-- 2017-04-22 884 1.3.4 use sys_conf_dmcmon_awidth=8 (proper value)
-- 2017-03-04 858 1.3.3 enable deuna
-- 2017-01-29 847 1.3.2 add sys_conf_ibd_deuna
@@ -48,6 +49,7 @@ package sys_conf is
constant sys_conf_rbmon_awidth : integer := 9; -- use 0 to disable
constant sys_conf_ibmon_awidth : integer := 9; -- use 0 to disable
constant sys_conf_dmscnt : boolean := true;
+ constant sys_conf_dmpcnt : boolean := true;
constant sys_conf_dmhbpt_nunit : integer := 2; -- use 0 to disable
constant sys_conf_dmcmon_awidth : integer := 8; -- use 0 to disable
diff --git a/rtl/sys_gen/w11a/s3board/tb/sys_conf_sim.vhd b/rtl/sys_gen/w11a/s3board/tb/sys_conf_sim.vhd
index 99013060..a5504334 100644
--- a/rtl/sys_gen/w11a/s3board/tb/sys_conf_sim.vhd
+++ b/rtl/sys_gen/w11a/s3board/tb/sys_conf_sim.vhd
@@ -1,4 +1,4 @@
--- $Id: sys_conf_sim.vhd 1043 2018-09-09 10:20:12Z mueller $
+-- $Id: sys_conf_sim.vhd 1050 2018-09-23 15:46:42Z mueller $
--
-- Copyright 2007-2018 by Walter F.J. Mueller
--
@@ -19,6 +19,7 @@
-- Tool versions: xst 8.1-14.7; ghdl 0.18-0.34
-- Revision History:
-- Date Rev Version Comment
+-- 2018-09-22 1050 1.3.5 add sys_conf_dmpcnt
-- 2018-09-08 1043 1.3.4 add sys_conf_ibd_kw11p
-- 2017-04-22 884 1.3.3 use sys_conf_dmcmon_awidth=8 (proper value)
-- 2017-01-29 847 1.3.2 add sys_conf_ibd_deuna
@@ -47,6 +48,7 @@ package sys_conf is
constant sys_conf_rbmon_awidth : integer := 9; -- use 0 to disable
constant sys_conf_ibmon_awidth : integer := 9; -- use 0 to disable
constant sys_conf_dmscnt : boolean := true;
+ constant sys_conf_dmpcnt : boolean := true;
constant sys_conf_dmhbpt_nunit : integer := 2; -- use 0 to disable
constant sys_conf_dmcmon_awidth : integer := 8; -- use 0 to disable
diff --git a/rtl/w11a/pdp11.vhd b/rtl/w11a/pdp11.vhd
index f6d2d0e2..b1aa87e4 100644
--- a/rtl/w11a/pdp11.vhd
+++ b/rtl/w11a/pdp11.vhd
@@ -1,6 +1,6 @@
--- $Id: pdp11.vhd 984 2018-01-02 20:56:27Z mueller $
+-- $Id: pdp11.vhd 1051 2018-09-29 15:29:11Z mueller $
--
--- Copyright 2006-2017 by Walter F.J. Mueller
+-- Copyright 2006-2018 by Walter F.J. Mueller
--
-- 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,11 @@
-- Description: Definitions for pdp11 components
--
-- Dependencies: -
--- Tool versions: ise 8.2-14.7; viv 2016.2-2017.1; ghdl 0.18-0.34
+-- Tool versions: ise 8.2-14.7; viv 2016.2-2018.2; ghdl 0.18-0.34
--
-- Revision History:
-- Date Rev Version Comment
+-- 2018-09-29 1051 1.6.8 add pdp11_dmpcnt; add DM_STAT_SE.(cpbusy,idec)
-- 2017-04-22 884 1.6.7 dm_stat_se: add idle; pdp11_dmcmon: add SNUM generic
-- 2016-12-26 829 1.6.6 BUGFIX: psw init with pri=0, as on real 11/70
-- 2015-11-01 712 1.6.5 define sbcntl_sbf_tmu := 12; use for pdp11_tmu_sb
@@ -605,14 +606,16 @@ package pdp11 is
type dm_stat_se_type is record -- debug and monitor status - sequencer
idle : slbit; -- sequencer ideling
+ cpbusy : slbit; -- in cp states
istart : slbit; -- instruction start
+ idec : slbit; -- instruction decode
idone : slbit; -- instruction done
vfetch : slbit; -- vector fetch
snum : slv8; -- current state number
end record dm_stat_se_type;
constant dm_stat_se_init : dm_stat_se_type := (
- '0','0','0','0', -- idle,istart,idone,vfetch
+ '0','0','0','0','0','0', -- idle,cpbusy,istart,idec,idone,vfetch
(others=>'0') -- snum
);
@@ -1358,6 +1361,21 @@ component pdp11_dmhbpt_unit is -- dmhbpt - indivitial unit
);
end component;
+component pdp11_dmpcnt is -- debug&moni: performance counters
+ generic (
+ RB_ADDR : slv16 := slv(to_unsigned(16#0060#,16)); -- rbus address
+ VERS : slv8 := slv(to_unsigned(0, 8)); -- counter layout version
+ CENA : slv32 := (others=>'1')); -- counter enables
+ port (
+ CLK : in slbit; -- clock
+ RESET : in slbit; -- reset
+ RB_MREQ : in rb_mreq_type; -- rbus: request
+ RB_SRES : out rb_sres_type; -- rbus: response
+ PERFSIG : in slv32 -- signals to count
+ );
+end component;
+
+
-- ----- move later to pdp11_conf --------------------------------------------
constant conf_vect_pirq : integer := 8#240#;
diff --git a/rtl/w11a/pdp11_dmscnt.vhd b/rtl/w11a/pdp11_dmscnt.vhd
index b5614ec6..d1d28421 100644
--- a/rtl/w11a/pdp11_dmscnt.vhd
+++ b/rtl/w11a/pdp11_dmscnt.vhd
@@ -1,4 +1,4 @@
--- $Id: pdp11_dmscnt.vhd 984 2018-01-02 20:56:27Z mueller $
+-- $Id: pdp11_dmscnt.vhd 1050 2018-09-23 15:46:42Z mueller $
--
-- Copyright 2015-2016 by Walter F.J. Mueller
--
@@ -30,7 +30,7 @@
-- 2016-05-22 767 1.1.1 don't init N_REGS (vivado fix for fsm inference)
-- 2015-12-28 721 1.1 use laddr/waddr; use ena instead of cnt;
-- 2015-07-19 702 1.0 Initial version
--- 2015-06-26 695 1.0 First draft
+-- 2015-06-26 695 0.1 First draft
------------------------------------------------------------------------------
--
-- rbus registers:
diff --git a/rtl/w11a/pdp11_sequencer.vhd b/rtl/w11a/pdp11_sequencer.vhd
index 8fca7516..1b9978b0 100644
--- a/rtl/w11a/pdp11_sequencer.vhd
+++ b/rtl/w11a/pdp11_sequencer.vhd
@@ -1,6 +1,6 @@
--- $Id: pdp11_sequencer.vhd 984 2018-01-02 20:56:27Z mueller $
+-- $Id: pdp11_sequencer.vhd 1051 2018-09-29 15:29:11Z mueller $
--
--- Copyright 2006-2017 by Walter F.J. Mueller
+-- Copyright 2006-2018 by Walter F.J. Mueller
--
-- 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,10 +18,11 @@
-- Dependencies: ib_sel
-- Test bench: tb/tb_pdp11_core (implicit)
-- Target Devices: generic
--- Tool versions: ise 8.2-14.7; viv 2014.4-2017.1; ghdl 0.18-0.34
+-- Tool versions: ise 8.2-14.7; viv 2014.4-2018.2; ghdl 0.18-0.34
--
-- Revision History:
-- Date Rev Version Comment
+-- 2018-09-29 1051 1.6.10 add DM_STAT_SE.(cpbusy,idec)
-- 2017-04-23 885 1.6.9 not sys_conf_dmscnt: set SNUM from state category;
-- change waitsusp logic; add WAIT to idm_idone
-- 2016-12-27 831 1.6.8 CPUERR now cleared with creset
@@ -370,6 +371,8 @@ begin
variable int_pending : slbit := '0'; -- an interrupt is pending
variable idm_idle : slbit := '0'; -- idle for dm_stat_se
+ variable idm_cpbusy : slbit := '0'; -- cpbusy for dm_stat_se
+ variable idm_idec : slbit := '0'; -- idec for dm_stat_se
variable idm_idone : slbit := '0'; -- idone for dm_stat_se
variable idm_vfetch : slbit := '0'; -- vfetch for dm_stat_se
@@ -620,6 +623,8 @@ begin
end if;
idm_idle := '0';
+ idm_cpbusy := '0';
+ idm_idec := '0';
idm_idone := '0';
idm_vfetch := '0';
@@ -722,6 +727,7 @@ begin
idm_idle := '1'; -- signal sequencer idle
if R_STATUS.cmdbusy = '1' then
+ idm_cpbusy := '1'; -- signal cp busy
case R_STATUS.cpfunc is
when c_cpfunc_noop => -- noop : no operation -------
@@ -856,6 +862,7 @@ begin
end if;
when s_cp_regread => -- -----------------------------------
+ idm_cpbusy := '1'; -- signal cp busy
ndpcntl.ounit_asel := c_ounit_asel_ddst; -- OUNIT A = DDST
ndpcntl.ounit_bsel := c_ounit_bsel_const; -- OUNIT B = const(0)
ndpcntl.dres_sel := c_dpath_res_ounit; -- DRES = OUNIT
@@ -863,6 +870,7 @@ begin
nstate := s_idle;
when s_cp_rps => -- -----------------------------------
+ idm_cpbusy := '1'; -- signal cp busy
ndpcntl.ounit_asel := c_ounit_asel_dtmp; -- OUNIT A = DTMP
ndpcntl.ounit_bsel := c_ounit_bsel_const; -- OUNIT B = const(0)
ndpcntl.dres_sel := c_dpath_res_ounit; -- DRES = OUNIT
@@ -870,6 +878,7 @@ begin
nstate := s_idle;
when s_cp_memr_w => -- -----------------------------------
+ idm_cpbusy := '1'; -- signal cp busy
nstate := s_cp_memr_w;
ndpcntl.dres_sel := c_dpath_res_vmdout; -- DRES = VMDOUT
if (VM_STAT.ack or VM_STAT.err or VM_STAT.fail)='1' then
@@ -881,6 +890,7 @@ begin
end if;
when s_cp_memw_w => -- -----------------------------------
+ idm_cpbusy := '1'; -- signal cp busy
nstate := s_cp_memw_w;
if (VM_STAT.ack or VM_STAT.err or VM_STAT.fail)='1' then
nstatus.cmdack := '1';
@@ -905,7 +915,8 @@ begin
end if;
when s_idecode => -- -----------------------------------
- nstatus.itimer := '1'; -- signal instruction started
+ idm_idec := '1'; -- signal instruction started
+ nstatus.itimer := '1'; -- itimer counts each decode
nidstat := ID_STAT; -- register decode status
if ID_STAT.force_srcsp = '1' then
ndpcntl.gpr_asrc := c_gpr_sp;
@@ -2410,7 +2421,9 @@ begin
MMU_MONI <= nmmumoni;
DM_STAT_SE.idle <= idm_idle;
+ DM_STAT_SE.cpbusy <= idm_cpbusy;
DM_STAT_SE.istart <= nmmumoni.istart;
+ DM_STAT_SE.idec <= idm_idec;
DM_STAT_SE.idone <= idm_idone;
DM_STAT_SE.vfetch <= idm_vfetch;
diff --git a/rtl/w11a/pdp11_sys70.vbom b/rtl/w11a/pdp11_sys70.vbom
index 996d63e9..e9283f07 100644
--- a/rtl/w11a/pdp11_sys70.vbom
+++ b/rtl/w11a/pdp11_sys70.vbom
@@ -14,7 +14,9 @@ pdp11_mem70.vbom
pdp11_dmscnt.vbom
pdp11_dmcmon.vbom
pdp11_dmhbpt.vbom
+pdp11_dmpcnt.vbom
../vlib/rbus/rb_sres_or_4.vbom
+../vlib/rbus/rb_sres_or_2.vbom
[sim]pdp11_tmu_sb.vbom
# design
pdp11_sys70.vhd
diff --git a/rtl/w11a/pdp11_sys70.vhd b/rtl/w11a/pdp11_sys70.vhd
index 63b18612..8b7b95c7 100644
--- a/rtl/w11a/pdp11_sys70.vhd
+++ b/rtl/w11a/pdp11_sys70.vhd
@@ -1,6 +1,6 @@
--- $Id: pdp11_sys70.vhd 984 2018-01-02 20:56:27Z mueller $
+-- $Id: pdp11_sys70.vhd 1051 2018-09-29 15:29:11Z mueller $
--
--- Copyright 2015-2017 by Walter F.J. Mueller
+-- Copyright 2015-2018 by Walter F.J. Mueller
--
-- 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,15 +22,20 @@
-- ibus/ibd_ibmon
-- ibus/ib_sres_or_3
-- w11a/pdp11_dmscnt
+-- w11a/pdp11_dmcmon
+-- w11a/pdp11_dmhpbt
+-- w11a/pdp11_dmpcnt
-- rbus/rb_sres_or_4
+-- rbus/rb_sres_or_2
-- w11a/pdp11_tmu_sb [sim only]
--
-- Test bench: tb/tb_pdp11_core (implicit)
-- Target Devices: generic
--- Tool versions: ise 14.7; viv 2014.4-2015.5; ghdl 0.33
+-- Tool versions: ise 14.7; viv 2014.4-2018.2; ghdl 0.33-0.34
--
-- Revision History:
-- Date Rev Version Comment
+-- 2018-09-29 1051 1.2.2 add pdp11_dmpcnt
-- 2017-04-22 884 1.2.1 pdp11_dmcmon: use SNUM and AWIDTH generics
-- 2016-03-22 750 1.2 pdp11_cache now configurable size
-- 2015-11-01 712 1.1.4 use sbcntl_sbf_tmu
@@ -87,14 +92,19 @@ architecture syn of pdp11_sys70 is
signal RB_SRES_CORE : rb_sres_type := rb_sres_init;
signal RB_SRES_DMSCNT : rb_sres_type := rb_sres_init;
+ signal RB_SRES_DMPCNT : rb_sres_type := rb_sres_init;
signal RB_SRES_DMHBPT : rb_sres_type := rb_sres_init;
signal RB_SRES_DMCMON : rb_sres_type := rb_sres_init;
+ signal RB_SRES_DM : rb_sres_type := rb_sres_init;
+ signal RB_SRES_L : rb_sres_type := rb_sres_init;
signal CP_CNTL : cp_cntl_type := cp_cntl_init;
signal CP_ADDR : cp_addr_type := cp_addr_init;
signal CP_DIN : slv16 := (others=>'0');
signal CP_STAT_L : cp_stat_type := cp_stat_init;
signal CP_DOUT : slv16 := (others=>'0');
+
+ signal EI_ACKM_L : slbit := '0';
signal EM_MREQ : em_mreq_type := em_mreq_init;
signal EM_SRES : em_sres_type := em_sres_init;
@@ -160,7 +170,7 @@ begin
HBPT => HBPT,
EI_PRI => EI_PRI,
EI_VECT => EI_VECT,
- EI_ACKM => EI_ACKM,
+ EI_ACKM => EI_ACKM_L,
EM_MREQ => EM_MREQ,
EM_SRES => EM_SRES,
CRESET => CRESET_L,
@@ -284,20 +294,126 @@ begin
);
end generate DMHBPT;
- RB_SRES_OR : rb_sres_or_4
+ DMPCNT : if sys_conf_dmpcnt generate
+ signal PERFSIG : slv32 := (others=>'0');
+ begin
+ proc_sig: process (CP_STAT_L, DM_STAT_SE, DM_STAT_DP_L, DM_STAT_DP_L.psw,
+ DM_STAT_VM.vmcntl, DM_STAT_VM.vmstat, RB_MREQ, RB_SRES_L,
+ DM_STAT_VM.ibmreq, DM_STAT_VM.ibsres)
+ variable isig : slv32 := (others=>'0');
+ begin
+
+ isig := (others=>'0');
+
+ if DM_STAT_SE.cpbusy = '1' then
+ isig(0) := '1'; -- cpu_cpbusy
+ elsif CP_STAT_L.cpugo = '1' then
+ case DM_STAT_DP_L.psw.cmode is
+ when c_psw_kmode =>
+ if CP_STAT_L.cpuwait = '1' then
+ isig(3) := '1'; -- cpu_km_wait
+ elsif unsigned(DM_STAT_DP_L.psw.pri) = 0 then
+ isig(2) := '1'; -- cpu_km_pri0
+ else
+ isig(1) := '1'; -- cpu_km_prix
+ end if;
+ when c_psw_smode =>
+ isig(4) := '1'; -- cpu_sm
+ when c_psw_umode =>
+ isig(5) := '1'; -- cpu_um
+ when others => null;
+ end case;
+ end if;
+
+ isig(6) := DM_STAT_SE.idec; -- cpu_idec
+ isig(7) := DM_STAT_SE.vfetch; -- cpu_vfetch
+ isig(8) := EI_ACKM_L; -- cpu_irupt (not counting PIRQ!)
+ if DM_STAT_DP_L.gpr_adst = c_gpr_pc and DM_STAT_DP_L.gpr_we = '1' then
+ isig(9) := '1'; -- cpu_pcload
+ end if;
+
+ -- hack to roughly emulate cache request data
+ isig(10) := DM_STAT_VM.vmcntl.req and not DM_STAT_VM.vmcntl.wacc;-- ca_rd
+ isig(11) := DM_STAT_VM.vmcntl.req and DM_STAT_VM.vmcntl.wacc;-- ca_wr
+ isig(12) := CACHE_CHIT; -- ca_rdhit
+ isig(13) := '0'; -- ca_wrhit
+ isig(14) := '0'; -- ca_rdmem
+ isig(15) := '0'; -- ca_wrmem
+ isig(16) := '0'; -- ca_rdwait
+ isig(17) := '0'; -- ca_wrwait
+
+ if DM_STAT_VM.ibmreq.aval='1' then
+ if DM_STAT_VM. ibsres.busy='0' then
+ isig(18) := DM_STAT_VM.ibmreq.re; -- ib_rd
+ isig(19) := DM_STAT_VM.ibmreq.we; -- ib_wr
+ else
+ isig(20) := DM_STAT_VM.ibmreq.re or DM_STAT_VM.ibmreq.we; -- ib_busy
+ end if;
+ end if;
+
+ -- a hack too, for 1 core systems is addr(15)='0' when CPU addressed
+ if RB_MREQ.aval='1' and RB_MREQ.addr(15)='0' then
+ if RB_SRES_L.busy='0' then
+ isig(21) := RB_MREQ.re; -- rb_rd
+ isig(22) := RB_MREQ.we; -- rb_wr
+ else
+ isig(23) := RB_MREQ.re or RB_MREQ.we; -- rb_busy
+ end if;
+
+ end if;
+
+ isig(24) := '0'; -- ext_rdrhit
+ isig(25) := '0'; -- ext_wrrhit
+ isig(26) := '0'; -- ext_wrflush
+ isig(27) := '0'; -- ext_rlrdbusy
+ isig(28) := '0'; -- ext_rlrdback
+ isig(29) := '0'; -- ext_rlwrbusy
+ isig(30) := '0'; -- ext_rlwrback
+ isig(31) := '1'; -- usec
+
+ PERFSIG <= isig;
+ end process proc_sig;
+
+
+ I0: pdp11_dmpcnt
+ generic map (
+ RB_ADDR => slv(to_unsigned(16#0060#,16)), -- rbus address
+ VERS => slv(to_unsigned(1, 8)), -- counter layout version
+ -- 33222222222211111111110000000000
+ -- 10987654321098765432109876543210
+ CENA => "10000000111111000001111111111111") -- counter enables
+ port map (
+ CLK => CLK,
+ RESET => RESET,
+ RB_MREQ => RB_MREQ,
+ RB_SRES => RB_SRES_DMPCNT,
+ PERFSIG => PERFSIG
+ );
+ end generate DMPCNT;
+
+ RB_SRES_DMOR : rb_sres_or_4
port map (
- RB_SRES_1 => RB_SRES_CORE,
- RB_SRES_2 => RB_SRES_DMSCNT,
+ RB_SRES_1 => RB_SRES_DMSCNT,
+ RB_SRES_2 => RB_SRES_DMPCNT,
RB_SRES_3 => RB_SRES_DMHBPT,
RB_SRES_4 => RB_SRES_DMCMON,
- RB_SRES_OR => RB_SRES
+ RB_SRES_OR => RB_SRES_DM
+ );
+
+ RB_SRES_OR : rb_sres_or_2
+ port map (
+ RB_SRES_1 => RB_SRES_CORE,
+ RB_SRES_2 => RB_SRES_DM,
+ RB_SRES_OR => RB_SRES_L
);
- IB_MREQ <= IB_MREQ_M; -- setup output signals
+ RB_SRES <= RB_SRES_L; -- setup output signals
+ IB_MREQ <= IB_MREQ_M;
GRESET <= GRESET_L;
CRESET <= CRESET_L;
BRESET <= BRESET_L;
CP_STAT <= CP_STAT_L;
+ EI_ACKM <= EI_ACKM_L;
DM_STAT_DP <= DM_STAT_DP_L;
DM_STAT_SY.chit <= CACHE_CHIT;
diff --git a/rtl/w11a/sys_conf.vhd b/rtl/w11a/sys_conf.vhd
index 0e0950b0..b43f8668 100644
--- a/rtl/w11a/sys_conf.vhd
+++ b/rtl/w11a/sys_conf.vhd
@@ -1,6 +1,6 @@
--- $Id: sys_conf.vhd 984 2018-01-02 20:56:27Z mueller $
+-- $Id: sys_conf.vhd 1051 2018-09-29 15:29:11Z mueller $
--
--- Copyright 2007-2016 by Walter F.J. Mueller
+-- Copyright 2007-2018 by Walter F.J. Mueller
--
-- 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,9 +16,10 @@
-- Description: Default definitions
--
-- Dependencies: -
--- Tool versions: xst 8.1-14.7; viv 2014.4-2016.1; ghdl 0.18-0.33
+-- Tool versions: xst 8.1-14.7; viv 2014.4-2018.2; ghdl 0.18-0.34
-- Revision History:
-- Date Rev Version Comment
+-- 2018-09-22 1051 1.1.3 add missing config's
-- 2016-05-28 770 1.1.2 sys_conf_mem_losize now type natural
-- 2015-06-26 695 1.1.1 add sys_conf_dmscnt
-- 2015-05-01 672 1.1 adopt to pdp11_sys70
@@ -33,12 +34,16 @@ use work.slvtypes.all;
package sys_conf is
constant sys_conf_cache_fmiss : slbit := '0'; -- cache enabled
-
+ constant sys_conf_cache_twidth : integer := 9; -- 8kB cache
+
constant sys_conf_bram_awidth : integer := 15; -- 32 kB BRAM
constant sys_conf_mem_losize : natural := 8#000777#;-- 32 kByte
- constant sys_conf_ibmon_awidth : integer := 9; -- use 0 to disable ibmon
- constant sys_conf_dmscnt : boolean := true;
+ constant sys_conf_ibmon_awidth : integer := 9; -- use 0 to disable ibmon
+ constant sys_conf_dmscnt : boolean := true;
+ constant sys_conf_dmpcnt : boolean := true;
+ constant sys_conf_dmhbpt_nunit : integer := 2; -- use 0 to disable
+ constant sys_conf_dmcmon_awidth : integer := 8; -- use 0 to disable, 8 to use
end package sys_conf;
diff --git a/tools/src/librw11/Rw11Cpu.cpp b/tools/src/librw11/Rw11Cpu.cpp
index 973d4d87..3ffdee6f 100644
--- a/tools/src/librw11/Rw11Cpu.cpp
+++ b/tools/src/librw11/Rw11Cpu.cpp
@@ -1,4 +1,4 @@
-// $Id: Rw11Cpu.cpp 1048 2018-09-22 07:41:46Z mueller $
+// $Id: Rw11Cpu.cpp 1050 2018-09-23 15:46:42Z mueller $
//
// Copyright 2013-2018 by Walter F.J. Mueller
//
@@ -13,6 +13,7 @@
//
// Revision History:
// Date Rev Version Comment
+// 2019-09-23 1050 1.2.14 add HasPcnt()
// 2018-09-22 1048 1.2.13 coverity fixup (drop unreachable code)
// 2017-04-07 868 1.2.12 Dump(): add detail arg
// 2017-02-26 857 1.2.11 add kCPAH_M_UBM22
@@ -153,6 +154,11 @@ const uint16_t Rw11Cpu::kHBSTAT;
const uint16_t Rw11Cpu::kHBHILIM;
const uint16_t Rw11Cpu::kHBLOLIM;
+const uint16_t Rw11Cpu::kPCBASE;
+const uint16_t Rw11Cpu::kPCCNTL;
+const uint16_t Rw11Cpu::kPCSTAT;
+const uint16_t Rw11Cpu::kPCDATA;
+
const uint16_t Rw11Cpu::kIMBASE;
const uint16_t Rw11Cpu::kIMCNTL;
const uint16_t Rw11Cpu::kIMSTAT;
@@ -180,6 +186,7 @@ Rw11Cpu::Rw11Cpu(const std::string& type)
fBase(0),
fIBase(0x4000),
fHasScnt(false),
+ fHasPcnt(false),
fHasCmon(false),
fHasHbpt(0),
fHasIbmon(false),
@@ -870,6 +877,7 @@ void Rw11Cpu::Dump(std::ostream& os, int ind, const char* text,
os << bl << " fBase: " << RosPrintf(fBase,"$x0",4) << endl;
os << bl << " fIBase: " << RosPrintf(fIBase,"$x0",4) << endl;
os << bl << " fHasScnt: " << fHasScnt << endl;
+ os << bl << " fHasPcnt: " << fHasPcnt << endl;
os << bl << " fHasCmon: " << fHasCmon << endl;
os << bl << " fHasHbpt: " << fHasHbpt << endl;
os << bl << " fHasIbmon: " << fHasIbmon << endl;
@@ -977,7 +985,10 @@ void Rw11Cpu::SetupOpt()
clist.SetLastExpectStatus(0,0);
}
int iim = AddRibr(clist, kIMBASE+kIMCNTL); // ibmon probe rem (no loc resp)
- clist.SetLastExpectStatus(0,0);
+ clist.SetLastExpectStatus(0,0);
+
+ int ipc = clist.AddRreg(Base()+kPCBASE+kPCCNTL);
+ clist.SetLastExpectStatus(0,0); // disable stat check
// probe auxilliary cpu components: kw11-l, kw11-p, iist
int ikwl= AddRibr(clist, kKWLBASE); // kw11-l probe rem
@@ -1028,6 +1039,14 @@ void Rw11Cpu::SetupOpt()
AllRAddrMapInsert(pref+".hilim" , base + kHBHILIM);
AllRAddrMapInsert(pref+".lolim" , base + kHBLOLIM);
}
+
+ fHasPcnt = (clist[ipc].Status() & statmsk) == 0;
+ if (fHasPcnt) {
+ uint16_t base = Base() + kPCBASE;
+ AllRAddrMapInsert("pc.cntl" , base + kPCCNTL);
+ AllRAddrMapInsert("pc.stat" , base + kPCSTAT);
+ AllRAddrMapInsert("pc.data" , base + kPCDATA);
+ }
fHasIbmon = (clist[iim].Status() & statmsk) == 0;
if (fHasIbmon) {
diff --git a/tools/src/librw11/Rw11Cpu.hpp b/tools/src/librw11/Rw11Cpu.hpp
index c669a2fb..8278f11f 100644
--- a/tools/src/librw11/Rw11Cpu.hpp
+++ b/tools/src/librw11/Rw11Cpu.hpp
@@ -1,6 +1,6 @@
-// $Id: Rw11Cpu.hpp 1044 2018-09-15 11:12:07Z mueller $
+// $Id: Rw11Cpu.hpp 1050 2018-09-23 15:46:42Z mueller $
//
-// Copyright 2013-2017 by Walter F.J. Mueller
+// Copyright 2013-2018 by Walter F.J. Mueller
//
// 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,6 +13,7 @@
//
// Revision History:
// Date Rev Version Comment
+// 2019-09-23 1050 1.2.11 add HasPcnt()
// 2017-04-07 868 1.2.10 Dump(): add detail arg
// 2017-02-26 857 1.2.9 add kCPAH_M_UBM22
// 2017-02-19 853 1.2.8 use Rtime
@@ -86,6 +87,7 @@ namespace Retro {
uint16_t IBase() const;
bool HasScnt() const;
+ bool HasPcnt() const;
bool HasCmon() const;
uint16_t HasHbpt() const;
bool HasIbmon() const;
@@ -249,7 +251,12 @@ namespace Retro {
static const uint16_t kHBHILIM = 0x0002; //!< HB.HILIM reg offset
static const uint16_t kHBLOLIM = 0x0003; //!< HB.LOLIM reg offset
- static const uint16_t kIMBASE = 0160000; //!< Ibmon ibus address
+ static const uint16_t kPCBASE = 0x0060; //!< DMPCNT reg base offset
+ static const uint16_t kPCCNTL = 0x0000; //!< PC.CNTL reg offset
+ static const uint16_t kPCSTAT = 0x0001; //!< PC.STAT reg offset
+ static const uint16_t kPCDATA = 0x0002; //!< PC.DATA reg offset
+
+ static const uint16_t kIMBASE = 0160000; //!< Ibmon ibus address
static const uint16_t kIMCNTL = 0x0000; //!< IM.CNTL reg offset
static const uint16_t kIMSTAT = 0x0002; //!< IM.STAT reg offset
static const uint16_t kIMHILIM = 0x0004; //!< IM.HILIM reg offset
@@ -281,6 +288,7 @@ namespace Retro {
uint16_t fBase;
uint16_t fIBase;
bool fHasScnt; //!< has dmscnt (state counter)
+ bool fHasPcnt; //!< has dmpcnt (perf counters)
bool fHasCmon; //!< has dmcmon (cpu monitor)
uint16_t fHasHbpt; //!< has dmhbpt (hardware breakpoint)
bool fHasIbmon; //!< has ibmon (ibus monitor)
diff --git a/tools/src/librw11/Rw11Cpu.ipp b/tools/src/librw11/Rw11Cpu.ipp
index 17a8a942..8d442bda 100644
--- a/tools/src/librw11/Rw11Cpu.ipp
+++ b/tools/src/librw11/Rw11Cpu.ipp
@@ -1,6 +1,6 @@
-// $Id: Rw11Cpu.ipp 983 2018-01-02 20:35:59Z mueller $
+// $Id: Rw11Cpu.ipp 1050 2018-09-23 15:46:42Z mueller $
//
-// Copyright 2013-2017 by Walter F.J. Mueller
+// Copyright 2013-2018 by Walter F.J. Mueller
//
// 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,6 +13,7 @@
//
// Revision History:
// Date Rev Version Comment
+// 2019-09-23 1050 1.2.3 add HasPcnt()
// 2017-02-17 851 1.2.2 probe/setup auxilliary devices: kw11l,kw11p,iist
// 2015-07-12 700 1.2.1 use ..CpuAct instead ..CpuGo (new active based lam)
// 2015-03-21 659 1.2 add RAddrMap
@@ -104,6 +105,14 @@ inline bool Rw11Cpu::HasScnt() const
//------------------------------------------+-----------------------------------
//! FIXME_docs
+inline bool Rw11Cpu::HasPcnt() const
+{
+ return fHasPcnt;
+}
+
+//------------------------------------------+-----------------------------------
+//! FIXME_docs
+
inline bool Rw11Cpu::HasCmon() const
{
return fHasCmon;
diff --git a/tools/src/librwxxtpp/RtclRw11Cpu.cpp b/tools/src/librwxxtpp/RtclRw11Cpu.cpp
index 5612f0aa..13c83844 100644
--- a/tools/src/librwxxtpp/RtclRw11Cpu.cpp
+++ b/tools/src/librwxxtpp/RtclRw11Cpu.cpp
@@ -1,4 +1,4 @@
-// $Id: RtclRw11Cpu.cpp 1048 2018-09-22 07:41:46Z mueller $
+// $Id: RtclRw11Cpu.cpp 1050 2018-09-23 15:46:42Z mueller $
//
// Copyright 2013-2018 by Walter F.J. Mueller
//
@@ -13,6 +13,7 @@
//
// Revision History:
// Date Rev Version Comment
+// 2019-09-23 1050 1.2.18 add HasPcnt()
// 2018-09-21 1048 1.2.18 coverity fixup (uninitialized scalar)
// 2017-04-22 883 1.2.17 M_(imap|rmap): -testname optional addr check
// 2017-04-15 876 1.2.16 add ControllerCommands()
@@ -1486,6 +1487,7 @@ void RtclRw11Cpu::SetupGetSet()
fGets.Add ("base", boost::bind(&Rw11Cpu::Base, pobj));
fGets.Add ("ibase", boost::bind(&Rw11Cpu::IBase, pobj));
fGets.Add ("hasscnt", boost::bind(&Rw11Cpu::HasScnt, pobj));
+ fGets.Add ("haspcnt", boost::bind(&Rw11Cpu::HasPcnt, pobj));
fGets.Add ("hascmon", boost::bind(&Rw11Cpu::HasCmon, pobj));
fGets.Add ("hashbpt", boost::bind(&Rw11Cpu::HasHbpt, pobj));
fGets.Add ("hasibmon", boost::bind(&Rw11Cpu::HasIbmon, pobj));
diff --git a/tools/tcl/rw11/dmpcnt.tcl b/tools/tcl/rw11/dmpcnt.tcl
new file mode 100644
index 00000000..d66f1ed1
--- /dev/null
+++ b/tools/tcl/rw11/dmpcnt.tcl
@@ -0,0 +1,122 @@
+# $Id: dmpcnt.tcl 1051 2018-09-29 15:29:11Z mueller $
+#
+# Copyright 2018- by Walter F.J. Mueller
+#
+# 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
+# Software Foundation, either version 3, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY, without even the implied warranty of MERCHANTABILITY
+# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+# for complete details.
+#
+# Revision History:
+# Date Rev Version Comment
+# 2018-09-29 1051 1.0 Initial version
+# 2018-09-23 1050 0.1 First draft
+#
+
+package provide rw11 1.0
+
+package require rlink
+package require rwxxtpp
+
+namespace eval rw11 {
+ #
+ # setup dmpcnt unit register descriptions for w11a -------------------------
+ #
+ regdsc PC_CNTL {ainc 15} {caddr 13 5} \
+ {func 2 3 "s:NOOP:NOOP1:NOOP2:NOOP3:STO:STA:CLR:LOA"}
+ regdsc PC_STAT {ainc 15} {caddr 13 5} {waddr 8} {run 0}
+
+ # preliminary handling of counter names, hack in first version
+ variable pcnt_cnames {cpu_cpbusy cpu_km_prix cpu_km_pri0 cpu_km_wait \
+ cpu_sm cpu_um cpu_idec cpu_vfetch \
+ cpu_irupt cpu_pcload ca_rd ca_wr \
+ ca_rdhit -ca_wrhit -ca_rdmem -ca_wrmem \
+ -ca_rdwait -ca_wrwait ib_rd ib_wr \
+ ib_busy rb_rd rb_wr rb_busy \
+ -ext_rdrhit -ext_wrrhit -ext_wrflush -ext_rlrdbusy \
+ -ext_rlrdback -ext_rlwrbusy -ext_rlwrback clock}
+ #
+ # pc_setup: rmap definitions for dmpcnt
+ #
+ proc pc_setup {{cpu "cpu0"}} {
+ set base [$cpu get base]
+ if {[$cpu rmap -testname pc.cntl [expr {$base + 0x60}]]} {return}
+ $cpu rmap -insert pc.cntl [expr {$base + 0x60}]
+ $cpu rmap -insert pc.stat [expr {$base + 0x61}]
+ $cpu rmap -insert pc.data [expr {$base + 0x62}]
+ }
+
+ #
+ # pc_start: start the dmpcnt
+ #
+ proc pc_start {{cpu "cpu0"} args} {
+ $cpu cp -wreg pc.cntl [regbldkv rw11::PC_CNTL func "STA" ]
+ }
+
+ #
+ # pc_stop: stop the dmpcnt
+ #
+ proc pc_stop {{cpu "cpu0"}} {
+ $cpu cp -wreg pc.cntl [regbld rw11::PC_CNTL {func "STO"}]
+ }
+
+ #
+ # pc_clear: clear the dmpcnt
+ #
+ proc pc_clear {{cpu "cpu0"}} {
+ $cpu cp -wreg pc.cntl [regbld rw11::PC_CNTL {func "CLR"}]
+ }
+
+ #
+ # pc_read: read dmpcnt data
+ # returns a list of 32 float values in range 0...2^32-1
+ #
+ proc pc_read {{cpu "cpu0"}} {
+ $cpu cp -wreg pc.cntl [regbldkv rw11::PC_CNTL func "LOA" caddr 0 ainc 1 ] \
+ -rblk pc.data [expr {2*32}] blk
+ set rval {}
+ foreach {d0 d1} $blk {
+ lappend rval [expr {$d0 + 65536.*$d1}]
+ }
+ return $rval
+ }
+
+ #
+ # pc_print: print dmpcnt data
+ #
+ proc pc_print {pclist} {
+ set sn 0
+ set rval ""
+ append rval "#cn count"
+ foreach {pc} $pclist {
+ set cname [lindex $rw11::pcnt_cnames $sn]
+ append rval [format "\n%3d %10.0f %s" $sn $pc $cname]
+ incr sn
+ }
+ return $rval
+ }
+
+ #
+ # pc_printraw: read and print dmpcnt raw data
+ #
+ proc pc_printraw {{cpu "cpu0"}} {
+ $cpu cp -wreg pc.cntl [regbldkv rw11::PC_CNTL func "LOA" caddr 0 ainc 1 ] \
+ -rblk pc.data [expr {2*32}] blk
+ set sn 0
+ set rval {}
+ append rval "#cn msb lsb count"
+ foreach {d0 d1} $blk {
+ set cnt [expr {$d0 + 65536.*$d1}]
+ set cname [lindex $rw11::pcnt_cnames $sn]
+ append rval [format "\n%3d %4.4x %4.4x %10.0f %s" \
+ $sn $d1 $d0 $cnt $cname]
+ incr sn
+ }
+ return $rval
+ }
+
+}