1
0
mirror of https://github.com/wfjm/w11.git synced 2026-01-12 00:43:01 +00:00

tmu and tmuconv update; test_w11a_cdma tune-up

- rtl/w11a
  - pdp11.vhd: _tmu,_tmu_sb: add port DM_STAT_SE
  - pdp11_sys70.vhd: pass DM_STAT_SE to pdp11_tmu_sb
  - pdp11_tmu.vhd: add vm.vmcntl.[cm]acc, se.[iv]start fields
  - pdp11_tmu_sb.vhd: add port DM_STAT_SE
  - tb/tbd_pdp11core.vhd: pass DM_STAT_SE to pdp11_tmu_sb
- tools/bin/tmuconv: use vm.vmcntl.[cm]acc, se.[iv]start fields; add type
                     column to em line; remove VFETCH/VPUSH heuristics;
                     add -t_emm, -t_fle, -t_fli, -i_flei
- tools/tbench/w11a/test_w11a_cdma.tcl: stop A2 code via PIRQ
This commit is contained in:
wfjm 2023-01-08 14:38:30 +01:00
parent 7f2d7f97d0
commit 9c49c9ad58
9 changed files with 228 additions and 90 deletions

View File

@ -35,7 +35,10 @@ The full set of tests is only run for tagged releases.
- tools changes
- tools/asm-11/lib/push_pop.mac: add push2
- tools/bin
- tmuconv: add -t_ru06 and -t_flow
- tmuconv
- add -t_ru06, -t_emm, -t_flow, -t_fle, -t_fli, -t_flei
- em transactions show transaction type
- vfetch/vpush heuristics replaced to vstart based detection
- tools/tcode
- cpu_basics.mac: expanded
- cpu_details.mac: significantly expanded
@ -54,6 +57,7 @@ The full set of tests is only run for tagged releases.
RESET wait, see [ECO-035](ECO-035-stklim-tbit-fixes.md)
- implement MMR0,MMR2 instruction complete,
see [ECO-037](ECO-037-mmu-instruction_complete.md)
- pdp11_tmu.vhd: add vm.vmcntl.[cm]acc, se.[iv]start fields
- pdp11_vmbox.vhd: rename some rsv->ser; remove obsolete trap_done
- rtl/sys_gen/w11a/s3board/sys_conf.vhd: disable monitors for timing closure
- rtl/sys_gen/w11a/\*/\*.vmfset: drop removed signals

View File

@ -1,6 +1,6 @@
-- $Id: pdp11.vhd 1339 2022-12-27 12:11:34Z mueller $
-- $Id: pdp11.vhd 1348 2023-01-08 13:33:01Z mueller $
-- SPDX-License-Identifier: GPL-3.0-or-later
-- Copyright 2006-2022 by Walter F.J. Mueller <W.F.J.Mueller@gsi.de>
-- Copyright 2006-2023 by Walter F.J. Mueller <W.F.J.Mueller@gsi.de>
--
------------------------------------------------------------------------------
-- Package Name: pdp11
@ -11,6 +11,7 @@
--
-- Revision History:
-- Date Rev Version Comment
-- 2023-01-08 1348 1.5.23 _tmu,_tmu_sb: add port DM_STAT_SE
-- 2022-12-27 1339 1.5.22 _sequencer: rm PC port; _dpath: rm PCOUT port
-- 2022-12-12 1330 1.5.21 dm_stat_se_type: rename vfetch -> vstart;
-- mmu_moni_type: drop pc,idone, add vstart,vflow
@ -1169,6 +1170,7 @@ component pdp11_tmu is -- trace and monitor unit
CLK : in slbit; -- clock
ENA : in slbit := '0'; -- enable trace output
DM_STAT_DP : in dm_stat_dp_type; -- debug and monitor status - dpath
DM_STAT_SE : in dm_stat_se_type; -- debug and monitor status - sequencer
DM_STAT_VM : in dm_stat_vm_type; -- debug and monitor status - vmbox
DM_STAT_CO : in dm_stat_co_type; -- debug and monitor status - core
DM_STAT_CA : in dm_stat_ca_type -- debug and monitor status - cache
@ -1185,6 +1187,7 @@ component pdp11_tmu_sb is -- trace and mon. unit; simbus wrapper
port (
CLK : in slbit; -- clock
DM_STAT_DP : in dm_stat_dp_type; -- debug and monitor status - dpath
DM_STAT_SE : in dm_stat_se_type; -- debug and monitor status - sequencer
DM_STAT_VM : in dm_stat_vm_type; -- debug and monitor status - vmbox
DM_STAT_CO : in dm_stat_co_type; -- debug and monitor status - core
DM_STAT_CA : in dm_stat_ca_type -- debug and monitor status - cache

View File

@ -1,6 +1,6 @@
-- $Id: pdp11_sys70.vhd 1330 2022-12-16 17:52:40Z mueller $
-- $Id: pdp11_sys70.vhd 1348 2023-01-08 13:33:01Z mueller $
-- SPDX-License-Identifier: GPL-3.0-or-later
-- Copyright 2015-2022 by Walter F.J. Mueller <W.F.J.Mueller@gsi.de>
-- Copyright 2015-2023 by Walter F.J. Mueller <W.F.J.Mueller@gsi.de>
--
------------------------------------------------------------------------------
-- Module Name: pdp11_sys70 - syn
@ -27,6 +27,7 @@
--
-- Revision History:
-- Date Rev Version Comment
-- 2023-01-08 1348 1.3.5 pass DM_STAT_SE to pdp11_tmu_sb
-- 2022-12-12 1330 1.3.4 dm_stat_se_type: rename vfetch -> vstart
-- 2019-06-02 1159 1.3.3 use rbaddr_ constants
-- 2019-03-02 1116 1.3.2 add RESET_SYS; fix pdp11_mem70 reset
@ -443,6 +444,7 @@ begin
port map (
CLK => CLK,
DM_STAT_DP => DM_STAT_DP,
DM_STAT_SE => DM_STAT_SE,
DM_STAT_VM => DM_STAT_VM,
DM_STAT_CO => DM_STAT_CO,
DM_STAT_CA => DM_STAT_CA

View File

@ -1,6 +1,6 @@
-- $Id: pdp11_tmu.vhd 1310 2022-10-27 16:15:50Z mueller $
-- $Id: pdp11_tmu.vhd 1348 2023-01-08 13:33:01Z mueller $
-- SPDX-License-Identifier: GPL-3.0-or-later
-- Copyright 2008-2022 by Walter F.J. Mueller <W.F.J.Mueller@gsi.de>
-- Copyright 2008-2023 by Walter F.J. Mueller <W.F.J.Mueller@gsi.de>
--
------------------------------------------------------------------------------
-- Module Name: pdp11_tmu - sim
@ -14,6 +14,7 @@
--
-- Revision History:
-- Date Rev Version Comment
-- 2023-01-08 1348 1.3.3 add vm.vmcntl.[cm]acc, se.[iv]start fields
-- 2022-10-25 1309 1.3.2 rename _gpr -> _gr
-- 2018-10-05 1053 1.3.1 use DM_STAT_CA instead of DM_STAT_SY
-- 2016-12-28 833 1.3 open tmu_ofile only when used
@ -48,6 +49,7 @@ entity pdp11_tmu is -- trace and monitor unit
CLK : in slbit; -- clock
ENA : in slbit := '0'; -- enable trace output
DM_STAT_DP : in dm_stat_dp_type; -- debug and monitor status - dpath
DM_STAT_SE : in dm_stat_se_type; -- debug and monitor status - sequencer
DM_STAT_VM : in dm_stat_vm_type; -- debug and monitor status - vmbox
DM_STAT_CO : in dm_stat_co_type; -- debug and monitor status - core
DM_STAT_CA : in dm_stat_ca_type -- debug and monitor status - cache
@ -87,6 +89,7 @@ begin
write(oline, string'("#"));
write(oline, string'(" clkcycle:d"));
write(oline, string'(" cpu:o"));
write(oline, string'(" dp.pc:o"));
write(oline, string'(" dp.psw:o"));
write(oline, string'(" dp.ireg:o"));
@ -101,6 +104,11 @@ begin
write(oline, string'(" dp.gr_bytop:b"));
write(oline, string'(" dp.gr_we:b"));
write(oline, string'(" se.istart:b"));
write(oline, string'(" se.vstart:b"));
write(oline, string'(" vm.vmcntl.cacc:b"));
write(oline, string'(" vm.vmcntl.macc:b"));
write(oline, string'(" vm.ibmreq.aval:b"));
write(oline, string'(" vm.ibmreq.re:b"));
write(oline, string'(" vm.ibmreq.we:b"));
@ -183,6 +191,7 @@ begin
-- sequence of writes must equal the sequence of field desciptors above
write(oline, clkcycle, right, 9);
write(oline, string'(" 0"));
writeoct(oline, DM_STAT_DP.pc, right, 7);
writeoct(oline, ipsw, right, 7);
writeoct(oline, DM_STAT_DP.ireg, right, 7);
@ -194,9 +203,14 @@ begin
writeoct(oline, DM_STAT_DP.dres, right, 7);
writeoct(oline, DM_STAT_DP.gr_adst, right, 2);
writeoct(oline, DM_STAT_DP.gr_mode, right, 2);
write(oline, DM_STAT_DP.gr_bytop, right, 2);
write(oline, DM_STAT_DP.gr_we, right, 2);
write(oline, DM_STAT_DP.gr_bytop, right, 2);
write(oline, DM_STAT_DP.gr_we, right, 2);
write(oline, DM_STAT_SE.istart, right, 2);
write(oline, DM_STAT_SE.vstart, right, 2);
write(oline, DM_STAT_VM.vmcntl.cacc, right, 2);
write(oline, DM_STAT_VM.vmcntl.macc, right, 2);
write(oline, DM_STAT_VM.ibmreq.aval, right, 2);
write(oline, DM_STAT_VM.ibmreq.re, right, 2);
write(oline, DM_STAT_VM.ibmreq.we, right, 2);

View File

@ -1,6 +1,6 @@
-- $Id: pdp11_tmu_sb.vhd 1181 2019-07-08 17:00:50Z mueller $
-- $Id: pdp11_tmu_sb.vhd 1348 2023-01-08 13:33:01Z mueller $
-- SPDX-License-Identifier: GPL-3.0-or-later
-- Copyright 2009-2018 by Walter F.J. Mueller <W.F.J.Mueller@gsi.de>
-- Copyright 2009-2023 by Walter F.J. Mueller <W.F.J.Mueller@gsi.de>
--
------------------------------------------------------------------------------
-- Module Name: pdp11_tmu - sim
@ -8,9 +8,10 @@
--
-- Dependencies: simbus
-- Test bench: -
-- Tool versions: xst 8.1-14.7; viv 2016.2-2018.2; ghdl 0.18-0.34
-- Tool versions: xst 8.1-14.7; viv 2016.2-2022.1; ghdl 0.18-2.0.0
-- Revision History:
-- Date Rev Version Comment
-- 2023-01-08 1348 1.0.3 add port DM_STAT_SE
-- 2018-10-05 1053 1.0.2 use DM_STAT_CA instead of DM_STAT_SY
-- 2015-11-01 712 1.0.1 use sbcntl_sbf_tmu
-- 2009-05-10 214 1.0 Initial version
@ -30,6 +31,7 @@ entity pdp11_tmu_sb is -- trace and mon. unit; simbus wrapper
port (
CLK : in slbit; -- clock
DM_STAT_DP : in dm_stat_dp_type; -- debug and monitor status - dpath
DM_STAT_SE : in dm_stat_se_type; -- debug and monitor status - sequencer
DM_STAT_VM : in dm_stat_vm_type; -- debug and monitor status - vmbox
DM_STAT_CO : in dm_stat_co_type; -- debug and monitor status - core
DM_STAT_CA : in dm_stat_ca_type -- debug and monitor status - cache
@ -53,6 +55,7 @@ begin
CLK => CLK,
ENA => ENA,
DM_STAT_DP => DM_STAT_DP,
DM_STAT_SE => DM_STAT_SE,
DM_STAT_VM => DM_STAT_VM,
DM_STAT_CO => DM_STAT_CO,
DM_STAT_CA => DM_STAT_CA

View File

@ -1,6 +1,6 @@
-- $Id: tbd_pdp11core.vhd 1181 2019-07-08 17:00:50Z mueller $
-- $Id: tbd_pdp11core.vhd 1348 2023-01-08 13:33:01Z mueller $
-- SPDX-License-Identifier: GPL-3.0-or-later
-- Copyright 2007-2018 by Walter F.J. Mueller <W.F.J.Mueller@gsi.de>
-- Copyright 2007-2023 by Walter F.J. Mueller <W.F.J.Mueller@gsi.de>
--
------------------------------------------------------------------------------
-- Module Name: tbd_pdp11core - syn
@ -17,7 +17,7 @@
-- To test: pdp11_core
--
-- Target Devices: generic
-- Tool versions: xst 8.2-14.7; viv 2016.2-2018.2; ghdl 0.18-0.34
-- Tool versions: xst 8.2-14.7; viv 2016.2-2022.1; ghdl 0.18-2.0.0
--
-- Synthesized (xst):
-- Date Rev ise Target flop lutl lutm slic t peri
@ -32,6 +32,7 @@
--
-- Revision History:
-- Date Rev Version Comment
-- 2023-01-08 1348 1.6.5 pass DM_STAT_SE to pdp11_tmu_sb
-- 2018-10-07 1054 1.6.4 drop ITIMER from core
-- 2018-10-05 1053 1.6.3 use DM_STAT_CA instead of DM_STAT_SY
-- 2015-11-01 712 1.6.2 use sbcntl_sbf_tmu
@ -118,6 +119,7 @@ architecture syn of tbd_pdp11core is
signal IB_SRES_M : ib_sres_type := ib_sres_init;
signal DM_STAT_DP : dm_stat_dp_type := dm_stat_dp_init;
signal DM_STAT_SE : dm_stat_se_type := dm_stat_se_init;
signal DM_STAT_VM : dm_stat_vm_type := dm_stat_vm_init;
signal DM_STAT_CO : dm_stat_co_type := dm_stat_co_init;
signal DM_STAT_CA : dm_stat_ca_type := dm_stat_ca_init;
@ -177,7 +179,7 @@ begin
BRESET => BRESET,
IB_MREQ_M => IB_MREQ_M,
IB_SRES_M => IB_SRES_M,
DM_STAT_SE => open,
DM_STAT_SE => DM_STAT_SE,
DM_STAT_DP => DM_STAT_DP,
DM_STAT_VM => DM_STAT_VM,
DM_STAT_CO => DM_STAT_CO
@ -218,6 +220,7 @@ begin
port map (
CLK => CLK,
DM_STAT_DP => DM_STAT_DP,
DM_STAT_SE => DM_STAT_SE,
DM_STAT_VM => DM_STAT_VM,
DM_STAT_CO => DM_STAT_CO,
DM_STAT_CA => DM_STAT_CA

View File

@ -1,10 +1,13 @@
#!/usr/bin/perl -w
# $Id: tmuconv 1346 2023-01-06 12:56:08Z mueller $
# $Id: tmuconv 1348 2023-01-08 13:33:01Z mueller $
# SPDX-License-Identifier: GPL-3.0-or-later
# Copyright 2008-2023 by Walter F.J. Mueller <W.F.J.Mueller@gsi.de>
#
# Revision History:
# Date Rev Version Comment
# 2023-01-08 1348 1.1.14 use vm.vmcntl.[cm]acc, se.[iv]start fields; add type
# column to em line; remove VFETCH/VPUSH heuristics;
# add -t_emm, -t_fle, -t_fli, -i_flei
# 2023-01-05 1346 1.1.13 add memory system register names
# 2022-12-29 1340 1.1.12 fix ru header
# 2022-12-01 1324 1.1.11 change VFETCH text for MMU(250) and FPP(244)
@ -49,6 +52,10 @@
# dp.gr_mode:o
# dp.gr_bytop:b
# dp.gr_we:b
# se.istart:b
# se.vstart:b
# vm.vmcntl.cacc:b
# vm.vmcntl.macc:b
# vm.ibmreq.aval:b
# vm.ibmreq.re:b
# vm.ibmreq.we:b
@ -94,7 +101,9 @@ use Getopt::Long;
my %opts = ();
GetOptions(\%opts, "help", "dump", "cdump", "emcancel",
"t_id", "t_ru", "t_ru06", "t_em","t_vf", "t_ib", "t_flow", "t_all")
"t_id", "t_ru", "t_ru06", "t_em", "t_emm", "t_vf", "t_ib",
"t_flow", "t_fle", "t_fli", "t_flei",
"t_all")
or bailout("bad command options");
my @var_name;
@ -122,6 +131,11 @@ my $ind_dp_gr_mode;
my $ind_dp_gr_bytop;
my $ind_dp_gr_we;
my $ind_se_istart;
my $ind_se_vstart;
my $ind_vm_vmcntl_cacc;
my $ind_vm_vmcntl_macc;
my $ind_vm_ibmreq_aval;
my $ind_vm_ibmreq_re;
my $ind_vm_ibmreq_we;
@ -468,12 +482,29 @@ if ($opts{help}) {
my $nopts = 0; # count options
$nopts += 1 if $opts{dump};
$nopts += 1 if $opts{cdump};
if ($opts{t_flow}) { # t_flow implies t_id,t_ru06,t_vf
if ($opts{t_flow}) { # t_flow -> t_id,t_ru06,t_vf
$opts{t_id} = 1;
$opts{t_ru06} = 1;
$opts{t_vf} = 1;
}
if ($opts{t_all}) { # t_all implies all t_*
if ($opts{t_fle}) { # t_fle -> t_id,t_ru06,t_emm
$opts{t_id} = 1;
$opts{t_ru06} = 1;
$opts{t_emm} = 1;
}
if ($opts{t_fli}) { # t_fli -> t_id,t_ru06,t_vf,t_ib
$opts{t_id} = 1;
$opts{t_ru06} = 1;
$opts{t_vf} = 1;
$opts{t_ib} = 1;
}
if ($opts{t_flei}) { # t_flei -> t_id,t_ru06,t_emm,t_ib
$opts{t_id} = 1;
$opts{t_ru06} = 1;
$opts{t_emm} = 1;
$opts{t_ib} = 1;
}
if ($opts{t_all}) { # t_all -> all t_*
$opts{t_id} = 1;
$opts{t_ru} = 1;
$opts{t_em} = 1;
@ -483,6 +514,7 @@ $nopts += 1 if $opts{t_id};
$nopts += 1 if $opts{t_ru};
$nopts += 1 if $opts{t_ru06};
$nopts += 1 if $opts{t_em};
$nopts += 1 if $opts{t_emm};
$nopts += 1 if $opts{t_vf};
$nopts += 1 if $opts{t_ib};
@ -496,8 +528,8 @@ print "# cycle id pc psw ireg code nc\n"
if $opts{t_id};
print "# cycle ru b sr data grstat\n"
if $opts{t_ru} or $opts{t_ru06};
print "# cycle em d be addr wdat rdat crwh nc\n"
if $opts{t_em} or $opts{t_vf};
print "# cycle em td be addr wdat rdat crwh nc\n"
if $opts{t_em} or $opts{t_emm} or $opts{t_vf};
print "# cycle ib cr rmbe addr wdat rdat a nc name\n"
if $opts{t_ib};
@ -505,7 +537,6 @@ foreach my $file (@ARGV) {
do_file($file);
}
#-------------------------------------------------------------------------------
sub do_file {
@ -517,15 +548,15 @@ sub do_file {
my $change_cyc = 0;
my $emreq_cyc = 0;
my $emreq_str = "";
my $emreq_typ = ' ';
my $ibreq_cyc = 0;
my $ibreq_typ = "";
my $ibreq_str = "";
my $ibreq_nam = "";
my $in_vflow = 0; # vector flow flag
my $emcurr_we = 0; # curr em write enable (or undef)
my $emcurr_addr = undef; # curr em address
my $emlast_we = 0; # prev em write enable (or undef)
my $emlast_addr = undef; # prev em address
while (<IFILE>) {
chomp;
@ -559,6 +590,11 @@ sub do_file {
$ind_dp_gr_bytop = $name{'dp.gr_bytop'}->{ind};
$ind_dp_gr_we = $name{'dp.gr_we'}->{ind};
$ind_se_istart = $name{'se.istart'}->{ind};
$ind_se_vstart = $name{'se.vstart'}->{ind};
$ind_vm_vmcntl_cacc = $name{'vm.vmcntl.cacc'}->{ind};
$ind_vm_vmcntl_macc = $name{'vm.vmcntl.macc'}->{ind};
$ind_vm_ibmreq_aval = $name{'vm.ibmreq.aval'}->{ind};
$ind_vm_ibmreq_re = $name{'vm.ibmreq.re'}->{ind};
$ind_vm_ibmreq_we = $name{'vm.ibmreq.we'}->{ind};
@ -628,6 +664,9 @@ sub do_file {
my $ibreq_we = 0;
my $ibreq_act = 0;
$in_vflow = 1 if ($val_curr[$ind_se_vstart]); # vflow start
$in_vflow = 0 if ($val_curr[$ind_se_istart]); # vflow end
if ($opts{dump} || $opts{cdump}) {
my @val_change;
my $any_change;
@ -725,10 +764,15 @@ sub do_file {
# vm_emsres_ack_w = '1'
# vm_emsreq_cancel = '1'
#
if ($opts{t_em} or $opts{t_vf}) {
if ($opts{t_em} or $opts{t_emm} or $opts{t_vf}) {
if ($val_curr[$ind_vm_emmreq_req]) {
$emreq_cyc = $cyc_curr;
$emreq_str = sprintf "%s %s %8.8o",
$emreq_typ = $in_vflow ? 'v' : ' ';
$emreq_typ = 'i' if $val_curr[$ind_se_istart];
$emreq_typ = 'c' if $val_curr[$ind_vm_vmcntl_cacc];
$emreq_typ = 'm' if $val_curr[$ind_vm_vmcntl_macc];
$emreq_str = sprintf "%s%s %s %8.8o",
$emreq_typ,
($val_curr[$ind_vm_emmreq_we] ? "w" : "r"),
$val_curr[$ind_vm_emmreq_be],
$val_curr[$ind_vm_emmreq_addr];
@ -758,44 +802,51 @@ sub do_file {
} else {
$emreq_str .= " " x 7;
}
if (defined $emlast_we && $emcurr_we == $emlast_we) {
if ($emcurr_we && $emcurr_addr == $emlast_addr-2) {
$emtyp_str = "SPUSH";
} elsif ((not $emcurr_we) && $emcurr_addr == $emlast_addr+2 &&
$emcurr_addr < 0400 && ($emcurr_addr % 04) == 02) {
if ($in_vflow) {
if (not $emcurr_we) { # vflow reads
$emtyp_str = "VFETCH";
$emtyp_str .= " 004 ill.inst" if ($emlast_addr == 0004);
$emtyp_str .= " 010 res.inst" if ($emlast_addr == 0010);
$emtyp_str .= " 014 BPT" if ($emlast_addr == 0014);
$emtyp_str .= " 020 IOT" if ($emlast_addr == 0020);
$emtyp_str .= " 030 EMT" if ($emlast_addr == 0030);
$emtyp_str .= " 034 TRAP" if ($emlast_addr == 0034);
$emtyp_str .= " 060 DL11-TTI" if ($emlast_addr == 0060);
$emtyp_str .= " 064 DL11-TTO" if ($emlast_addr == 0064);
$emtyp_str .= " 070 PC11-PTR" if ($emlast_addr == 0070);
$emtyp_str .= " 074 PC11-PTP" if ($emlast_addr == 0074);
$emtyp_str .= " 100 KW11-L" if ($emlast_addr == 0100);
$emtyp_str .= " 104 KW11-P" if ($emlast_addr == 0104);
$emtyp_str .= " 120 DEUNA" if ($emlast_addr == 0120);
$emtyp_str .= " 160 RL11" if ($emlast_addr == 0160);
$emtyp_str .= " 200 LP11" if ($emlast_addr == 0200);
$emtyp_str .= " 220 RK11" if ($emlast_addr == 0220);
$emtyp_str .= " 224 TM11" if ($emlast_addr == 0224);
$emtyp_str .= " 240 PIRQ" if ($emlast_addr == 0240);
$emtyp_str .= " 244 FPE" if ($emlast_addr == 0244);
$emtyp_str .= " 250 MMU" if ($emlast_addr == 0250);
$emtyp_str .= " 254 RHRP" if ($emlast_addr == 0254);
$emtyp_str .= " 260 IIST" if ($emlast_addr == 0260);
$emtyp_str .= " 300 DL11-2-TTI" if ($emlast_addr == 0300);
$emtyp_str .= " 304 DL11-2-TTO" if ($emlast_addr == 0304);
}
}
}
if ($opts{t_vf} and not $opts{t_em}) { # only -t_vf
$emtyp_str .= $in_vflow==1 ? ' PC' : ' PS';
if ($in_vflow == 1) {
$emtyp_str .= " 004 ill.inst" if ($emcurr_addr == 0004);
$emtyp_str .= " 010 res.inst" if ($emcurr_addr == 0010);
$emtyp_str .= " 014 BPT" if ($emcurr_addr == 0014);
$emtyp_str .= " 020 IOT" if ($emcurr_addr == 0020);
$emtyp_str .= " 030 EMT" if ($emcurr_addr == 0030);
$emtyp_str .= " 034 TRAP" if ($emcurr_addr == 0034);
$emtyp_str .= " 060 DL11-TTI" if ($emcurr_addr == 0060);
$emtyp_str .= " 064 DL11-TTO" if ($emcurr_addr == 0064);
$emtyp_str .= " 070 PC11-PTR" if ($emcurr_addr == 0070);
$emtyp_str .= " 074 PC11-PTP" if ($emcurr_addr == 0074);
$emtyp_str .= " 100 KW11-L" if ($emcurr_addr == 0100);
$emtyp_str .= " 104 KW11-P" if ($emcurr_addr == 0104);
$emtyp_str .= " 120 DEUNA" if ($emcurr_addr == 0120);
$emtyp_str .= " 160 RL11" if ($emcurr_addr == 0160);
$emtyp_str .= " 200 LP11" if ($emcurr_addr == 0200);
$emtyp_str .= " 220 RK11" if ($emcurr_addr == 0220);
$emtyp_str .= " 224 TM11" if ($emcurr_addr == 0224);
$emtyp_str .= " 240 PIRQ" if ($emcurr_addr == 0240);
$emtyp_str .= " 244 FPE" if ($emcurr_addr == 0244);
$emtyp_str .= " 250 MMU" if ($emcurr_addr == 0250);
$emtyp_str .= " 254 RHRP" if ($emcurr_addr == 0254);
$emtyp_str .= " 260 IIST" if ($emcurr_addr == 0260);
$emtyp_str .= " 300 DL11-2-TTI" if ($emcurr_addr == 0300);
$emtyp_str .= " 304 DL11-2-TTO" if ($emcurr_addr == 0304);
}
} else { # vflow writes
$emtyp_str = "VPUSH";
$emtyp_str .= $in_vflow==3 ? ' PS' : ' PC';
}
$in_vflow += 1;
} # if $in_vflow
} # if not vm_emmreq_cancel
if ($opts{t_vf} and not ($opts{t_em} or $opts{t_emm})) { # only -t_vf
$emres_str = "" unless $emtyp_str =~ m/^VFETCH/;
}
$emlast_we = $emcurr_we;
$emlast_addr = $emcurr_addr;
if ($opts{t_emm} and not $opts{t_em}) {
$emres_str = "" if $val_curr[$ind_vm_emmreq_cancel];
$emres_str = "" if $emreq_typ eq 'i'; # suppress instruction fetch
$emres_str = "" if $emreq_typ eq 'c'; # suppress control port access
}
}
} # if t_em or t_vf
#
@ -846,7 +897,7 @@ sub do_file {
print "$cyc_str id $id_str\n" if $id_str;
if ($emres_str) {
printf "$cyc_str em $emreq_str $emres_str (%d) $emtyp_str\n",
printf "$cyc_str em $emreq_str $emres_str (%d) $emtyp_str\n",
$cyc_curr-$emreq_cyc;
}
if ($ibres_str) {
@ -1022,8 +1073,12 @@ sub print_help {
print " --t_ru trace register updates\n";
print " --t_ru06 trace register updates for r0-r5 and sp\n";
print " --t_em trace em transactions\n";
print " --t_emm trace em transactions except type i and c\n";
print " --t_vf trace only vector fetch em transactions\n";
print " --t_ib trace ib transactions\n";
print " --t_flow trace id,ru06, and vf transactions\n";
print " --t_all trace id,ru,em, and ib transactions\n";
print " --t_flow trace id, ru06 and vf transactions\n";
print " --t_fle trace id, ru06 and emm transactions\n";
print " --t_fli trace id, ru06, vf and ib transactions\n";
print " --t_flei trace id, ru06, emm and ib transactions\n";
print " --t_all trace id, ru, em and ib transactions\n";
}

View File

@ -1,11 +1,11 @@
.\" -*- nroff -*-
.\" $Id: tmuconv.1 1316 2022-11-18 15:26:40Z mueller $
.\" $Id: tmuconv.1 1348 2023-01-08 13:33:01Z mueller $
.\" SPDX-License-Identifier: GPL-3.0-or-later
.\" Copyright 2013-2022 by Walter F.J. Mueller <W.F.J.Mueller@gsi.de>
.\" Copyright 2013-2023 by Walter F.J. Mueller <W.F.J.Mueller@gsi.de>
.\"
.\" ------------------------------------------------------------------
.
.TH TMUCONV 1 2022-11-18 "Retro Project" "Retro Project Manual"
.TH TMUCONV 1 2023-01-08 "Retro Project" "Retro Project Manual"
.\" ------------------------------------------------------------------
.SH NAME
tmuconv \- convert w11a tmu output into human readable format
@ -30,7 +30,7 @@ output is \fB\-t_id\fR \fB\-t_vf\fR.
.SH OPTIONS
.
.\" ----------------------------------------------
.IP "\fB\-dump\fR"
.IP "\fB\-dump\fR" 8
dump all information.
.
.\" ----------------------------------------------
@ -51,7 +51,7 @@ trace register updates.
.
.\" ----------------------------------------------
.IP "\fB\-t_ru06\fR"
trace register updates for r0-r5 and sp (subset of \fB\-t_ru\fR)
trace register updates for r0-r5 and sp (subset of \fB\-t_ru\fR).
.
.\" ----------------------------------------------
.IP "\fB\-t_em\fR"
@ -60,13 +60,36 @@ em transactions that converted to an ib transaction are labeled 'cancel'.
They are not shown when \fB\-t_ib\fR is active and no \fB\-emcancel\fR option
is given. This gives the most readable output for \fB\-t_all\fR.
Reads from well known vector addresses are labeled 'VFETCH'.
This is very helpful for the detection of interrupts.
See also \fB\-t_vf\fR.
Note: every read from location 200 will therefore be labeled 'VFETCH 200 LP11',
also when it is an instruction fetch for a 'JMP' instruction in old maindecs
with start address 200.
Each transaction is associated with type
.RS
.RS 3
.PD 0
.IP " i" 5
instruction fetch
.IP " v"
vector fetch or push
.IP " m"
read modify write
.IP " c"
control port access (often cdma)
.PD
.RE
A blank type field means 'none of the above' and is used for all em
transactions issued by instructions including index word and immediate
value reads.
The vector fetch transactions are further annotated for well known vector
addresses. This is very helpful for the detection of interrupts.
.RE
.
.\" ----------------------------------------------
.IP "\fB\-t_emm\fR"
trace only em transaction that are not type i or c and are not canceled
(subset of \fB\-t_em\fR).
Useful in conjunction with \fB\-t_id\fR because the information of the
instruction fetch read is included in the \fB\-t_id\fR output.
.\" ----------------------------------------------
.IP "\fB\-t_vf\fR"
trace only vector fetch em transactions (subset of \fB\-t_em\fR)
@ -78,7 +101,23 @@ unless the \fB\-emcancel\fR option is given.
.
.\" ----------------------------------------------
.IP "\fB\-t_flow\fR"
trace flow, equivalent to \fB\-t_id\fR \fB\-t_ru06\fR \fB\-t_vf\fR
trace instruction flow,
is equivalent to \fB\-t_id\fR \fB\-t_ru06\fR \fB\-t_vf\fR
.
.\" ----------------------------------------------
.IP "\fB\-t_fle\fR"
trace instruction flow and show instruction related em transactions,
is equivalent to \fB\-t_id\fR \fB\-t_ru06\fR \fB\-t_emm\fR
.
.\" ----------------------------------------------
.IP "\fB\-t_fli\fR"
trace instruction flow and show ibus transactions,
equivalent to \fB\-t_id\fR \fB\-t_ru06\fR \fB\-t_vf\fR \fB\-t_ib\fR
.
.\" ----------------------------------------------
.IP "\fB\-t_flei\fR"
combination of "\fB\-t_fle\fR" and "\fB\-t_fli\fR",
is equivalent to \fB\-t_id\fR \fB\-t_ru06\fR \fB\-t_emm\fR \fB\-t_ib\fR
.
.\" ----------------------------------------------
.IP "\fB\-t_all\fR"
@ -149,6 +188,8 @@ the symbolic name of the register
.RS 2
.PD 0
.IP "-" 2
the access type flag (values see \fB\-t_em\fP descriprion)
.IP "-"
the r/w flag
.IP "-"
the byte enables
@ -171,12 +212,15 @@ in case of vector fetches and associated stack pushes some descriptive text
.EX
cycle be addr wdat rdat crwh nc
11374 em w 11 00000004 000006 0010 (1)
52574 em r 11 00002164 177624 0101 (1)
52574 em r 11 00002164 177624 0101 (1)
52530 em r 11 00000020 002142 0101 (1)
52532 em r 11 00000022 000340 0101 (1) VFETCH 020 IOT
52536 em w 11 00001776 000017 0010 (1)
52538 em w 11 00001774 004316 0010 (1) SPUSH
86703 em mr 11 00003320 000000 0101 (1)
86705 em mw 11 00003320 000001 0010 (1)
87102 em vr 11 00000020 002222 0101 (1) VFETCH PC 020 IOT
87104 em vr 11 00000022 000340 0101 (1) VFETCH PS
87108 em vw 11 00001776 000004 0010 (1) VPUSH PS
87114 em vw 11 00001774 003324 0010 (5) VPUSH PC
.EE
\fB\-t_ib\fP: the ibus transaction trace gives

View File

@ -1,10 +1,10 @@
# $Id: test_w11a_cdma.tcl 1347 2023-01-07 12:48:58Z mueller $
# $Id: test_w11a_cdma.tcl 1348 2023-01-08 13:33:01Z mueller $
# SPDX-License-Identifier: GPL-3.0-or-later
# Copyright 2023- by Walter F.J. Mueller <W.F.J.Mueller@gsi.de>
#
# Revision History:
# Date Rev Version Comment
# 2023-01-07 1347 1.0 Initial version
# 2023-01-07 1348 1.0 Initial version
#
# Test bwm/brm while CPU active
#
@ -61,18 +61,29 @@ $cpu cp -wal $sym(data) \
rlc log " A2: bwm/brm while CPU in WAIT -----------------------------"
$cpu ldasm -lst lst -sym sym {
.include |lib/defs_cpu.mac|
;
; setup pirq vector
. = 000240
.word vh.pir
.word cp.pr7
;
. = 1000
;
stack:
start: wait ; wait for interrupt
100$: halt
stop:
;
; PIRQ handler
vh.pir: clr cp.pir ; cancel PIRQ requests
rti
;
buf: .blkw 128. ; buffer for dma
}
# start code
$cpu cp -creset \
-stapc $sym(start)
rw11::asmrun $cpu sym
# check that wait does wait
rw11::asmtreg $cpu pc $sym(start:100$)
# write to buffer
@ -83,7 +94,6 @@ rw11::asmtreg $cpu pc $sym(start:100$)
$cpu cp -wal $sym(buf) \
-brm [llength $buf] -edata $buf
rw11::asmtreg $cpu pc $sym(start:100$)
# stop code and harvest attention
$cpu cp -stop \
-attn
# end code via PIRQ interrupt with console write to cp.pir
$cpu cp -wibr [$cpu imap pirq] [regbld rw11::PIRQ {pir 2}]
rw11::asmwait $cpu sym; # checks pc