diff --git a/doc/CHANGELOG.md b/doc/CHANGELOG.md index 6070364b..d6231e7c 100644 --- a/doc/CHANGELOG.md +++ b/doc/CHANGELOG.md @@ -43,7 +43,7 @@ The full set of tests is only run for tagged releases. - tools/sys/mcode: added memclr.mac (writes zero into memory) - tools/tcode: fast cpu verification codes - tools/tests: test programs - - tools/bin: added dasm-11, a PDP-11 disassembler +- tools/bin: added dasm-11, a PDP-11 disassembler ### Changes - tools changes - ci.yml: define TBW_GHDL_OPTS and suppress IEEE package warnings at t=0ms diff --git a/doc/README_known_issues.md b/doc/README_known_issues.md index efe530b0..f5fe5bdf 100644 --- a/doc/README_known_issues.md +++ b/doc/README_known_issues.md @@ -1,6 +1,7 @@ # Known issues - -The case id indicates the release when the issue was first recognized. +Notes +- resolved issues are summarized in [resolved issues](README_resolved_issues.md) +- the case id indicates the release when the issue was first recognized. ### V0.791-3 {[issue #35](https://github.com/wfjm/w11/issues/35)} -- MMU: D space used instead of I space for PC deferred specifiers @@ -25,62 +26,6 @@ Clearly a bug. Wasn't detected so far because this access mode has no practical value and this therefore not used in normal software. -### V0.791-2 {[issue #34](https://github.com/wfjm/w11/issues/34)} -- MMU: ACF=1 traps on any access - -Test 055 of `ekbee1` fails with -``` - MEMORY MANAGEMENT TRAP OR ABORT HAD INCORRECT CONDITION - EXPECTD ERROR AUTOI/D VIRTUAL - CONDITN REGISTR REGISTR ADDRESS TESTNO PC AT ABORT - 020011 030011 013427 054032 000055 054040 -``` -This is caused by a bug in pdp11_mmu. For ACF=1 a trap is taken for any access, -it should be taken only for read accesses. - -### V0.791-1 {[issue #33](https://github.com/wfjm/w11/issues/33)} -- MMU: PDR A bit is set for every access - -The `PDR` `A` bit is described in the Technical Manual as -> A bit (bit 7) - This bit is used by software to determine whether or not -> any accesses to this page met the trap condition specified by the Access -> Control Field (ACF). (A = I is affirmative). The A bit is used in the -> process of gathering Memory Management statistics. - -It is set when the page `ACF` enables an MMU trap, thus for -- ACF=1 and read access -- ACF=4 and any access -- ACF=5 and write access - -The w11 currently sets the 'A' bit on any non-aborted access regardless of the ACF value. - -No practical impact, the 'A' bit in `PDR` is a 11/45 11/70 only feature and not used in OS software. - -### V0.79-2 {[issue #30](https://github.com/wfjm/w11/issues/30)} -- SimH scmd files fail on current 4.* version; only 3.* supported - -The SimH scmd scripts were originally developed for SimH 3.8, and worked for -SimH 3.9 and later releases. The SimH 4.* development team decided not to -provide releases anymore, and over time this version became incompatible with -the scmd scripts used for w11. That is most pronounced for the RT11 V4.3 oskit. -A simple -``` - cd $RETROBASE/tools/oskit/rt11-53_rl - console_starter -s -d DL0 & - pdp11 rt11-53_rl_boot.scmd -``` -works fine for SimH V3.9, V3.10 and V3.11-1, but fails -- for pdp11-4.0-beta1 with core dump -- for pdp11-2016-12-26-5ced037b with signal SIGSEGV in pdp11_xu -- for pdp11-2019-07-28-2f707ffc with signal SIGSEGV in pdp11_xu -- for pdp11-2020-03-26-261abfc3 with signal SIGSEGV in pdp11_xu -- for pdp11-2021-08-22-64b12234 with signal SIGSEGV in pdp11_xu -- for pdp11-2022-04-17-d3f1ee09 with with errors like - - Device auto configuration is now disabled - - Command not allowed (for set rha enabled) - - container incompatible with the RL device - -Bottom line: -- the provided scmd scripts work only with SimH V3.9, V3.10 or V3.11-1 -- an update to the SimH V4.* has low priority - ### V0.50-2 {[issue #28](https://github.com/wfjm/w11/issues/28)} -- RK11: write protect action too slow Some simple RK11 drivers, especially in test codes, don't poll for completion @@ -124,43 +69,6 @@ not in the J11, it is not used by common operating systems. Therefore this is considered a to be a minor deficit. Will be fixed in an upcoming release. -### V0.50-6 {[issue #26](https://github.com/wfjm/w11/issues/26)} -- CPU: MMR0 trap bit set when access aborted - -The MMU should set the 'trap bit' in `MMR0` only when the access is not -aborted. The current pdp11_mmu implementation sets the bit even when the -access is aborted. - -This is the reason why test 064 of the `ekbee1` diagnostics currently fails. - -Since the MMU trap mechanism is is only available on 11/45 and 11/70, but -not in the J11, it is not used by common operating systems. - -Therefore this is considered a to be a minor deficit. Will be fixed in an -upcoming release. - -### V0.50-5 {[issue #25](https://github.com/wfjm/w11/issues/25)} -- CPU: The AIB bit in MMU PDR register set independant of ACF field - -The MMU should set the AIB A bit in the the PDR only when _"trap condition is -met by the Access Control Field (ACF)"_. Thus for -``` - ACF=001 read-only trap on read - ACF=100 read/write trap on read or write - ACF=101 read/write trap on write -``` -The current pdp11_mmu implementation always sets the bit, the logic is simply -``` - if doabort = '0' then - AIB_SETA <= '1'; - AIB_SETW <= CNTL.wacc or CNTL.macc; - end if; -``` - -Since the MMU trap mechanism is is only available on 11/45 and 11/70, but not -in the J11, it is not used by common operating systems. - -Therefore this is considered a to be a minor deficit. Will be fixed in an -upcoming release. - ### V0.50-1 {[issue #23](https://github.com/wfjm/w11/issues/23)} -- CPU: several deficits in trap logic The current w11a implementation has several deficits in the handling of @@ -250,212 +158,3 @@ _{the last two issues are not relevant for w11 backend over USB usage because the backend produces proper command lists and the USB channel is usually error free}_ -## Resolved Issues - -### V0.50-4 {[issue #24](https://github.com/wfjm/w11/issues/24)} -- CPU: src+dst deltas summed in mmr1 if register identical - -Test 12 of maindec `ekbee1` fails because it expects after a -``` - mov #100000,@#mmr0 -``` -which sets an error bit in `mmr0` and thus freezes `mmr0`, that `mmr1` contains -``` - 013427 (00010 111 00010 111) (+2,r7;+2,r7) -``` -while w11a gives -``` - 000047 (00000 000 00100 111) (--,--;+4,r7) -``` -The `mmr1` content is _different_ compared to the original 11/70 behavior, -but is _logically correct_, fault recovery in OS (like in 211bsd) will work -correctly. Therefore this is considered a to be a _minor deficit_. - -The 11/70 documentation clearly states that there is an additional state bit -that counts the write accesses to `mmr1`. This ensures that each of the two -logged accesses end in separate bytes (byte 0 filled first). - -The w11a only uses byte 1 when the register number differs. - -Fixed with commit [3bd23c9](https://github.com/wfjm/w11/commit/3bd23c9), -see [ECO-032](ECO-032-MMR1_fix.md). - -### V0.79-1 {[issue #29](https://github.com/wfjm/w11/issues/29)} -- migrate from Travis to GitHub actions - -#### Original Issue -Travis is now defunct and has been removed in -[6b8c063](https://github.com/wfjm/w11/commit/6b8c063). -So it's time to migrate CI/CD to GitHub actions. - -#### Fix -GitHub Actions fully implemented with commit -[db7556a4](https://github.com/wfjm/w11/commit/db7556a4), fine tuned with commit -[66f3f5d0](https://github.com/wfjm/w11/commit/66f3f5d0). - -### V0.76-1 {[issue #16](https://github.com/wfjm/w11/issues/16)} -- Help wanted: Testing with Nexys4 DDR appreciated -#### Original Issue -The w11a design for Nexys4 DDR, see -[rtl/sys_gen/w11a/nexys4d](https://github.com/wfjm/w11/tree/master/rtl/sys_gen/w11a/nexys4d), -was provided to support also an up-to-date Nexys4 board. It is so far only -simulation tested. - -Testing done with a real Nexyx4 DDR, or a newer Nexys A7-100T, would be highly -appreciated. Please double check the pin assignments -(see _mig_a.prj and nexys4d*.xdc_) with the documentation of your board -to avoid potential damage. - -Looking forward to receive test reports. - -#### Fix -The Nexys4 _(classic, with 16 MByte PSRAM)_ board, on which most of the recent -w11 was done, broke in late July 2019 -(see [blog](https://wfjm.github.io/blogs/w11/2019-07-27-nexys4-obituary.html)) -and a Nexys A7 was ordered as replacement. - -Basic tests with the test designs -[sys_tst_serloop2](https://github.com/wfjm/w11/blob/master/rtl/sys_gen/tst_serloop/nexys4d/sys_tst_serloop2_n4d.vhd) and -[sys_tst_rlink_n4d](https://github.com/wfjm/w11/blob/master/rtl/sys_gen/tst_rlink/nexys4d/sys_tst_rlink_n4d.vhd) -and the BRAM-only w11 design -[sys_w11a_br_n4d](https://github.com/wfjm/w11/blob/master/rtl/sys_gen/w11a/nexys4d_bram/sys_w11a_br_n4d.vhd) worked fine. - -But all tests involving the DDR2 memory interface failed. The culprit was -quickly found, it was a mistake in the MIG configuration -[mig_a.prj](https://github.com/wfjm/w11/blob/master/rtl/bplib/nexys4d/mig_a.prj), -the polarity of the `SYS_RST` signal was `ACTIVE LOW` instead of `ACTIVE HIGH`. -After fixing this, the test designs -[sys_tst_mig_n4d](https://github.com/wfjm/w11/blob/master/rtl/sys_gen/tst_mig/nexys4d/sys_tst_mig_n4d.vhd) and -[sys_tst_sram_n4d](https://github.com/wfjm/w11/blob/master/rtl/sys_gen/tst_sram/nexys4d/sys_tst_sram_n4d.vhd) -as well as the w11 implementation -[sys_w11a_n4d](https://github.com/wfjm/w11/blob/master/rtl/sys_gen/w11a/nexys4d/sys_w11a_n4d.vhd) worked right away. - -The [tst_sram](https://github.com/wfjm/w11/tree/master/rtl/sys_gen/tst_sram) -designs show nicely that the DDR2 on the Nexys A7 board is slightly slower -than the DDR3 on the Arty A7 board -``` - Board test time clock period UI_CLK - Nexys A7 37.36 s 3333 ps 75.0 MHz - Arty A7 35.77 s 3000 ps 83.3 MHz -``` - -Closed with commit -[563e230](https://github.com/wfjm/w11/commit/563e230). - -### V0.66-1 {[issue #8](https://github.com/wfjm/w11/issues/8)} -- TM11 controller doesn't support odd transfer size -#### Original Issue -The TM11 controller transfers data byte wise (all disk do it 16bit -word wise) and allows for odd byte length transfers. Odd length transfers -are currently not supported and rejected as invalid command. Odd byte -length records aren't used by OS, so in practice this limitation -isn't relevant. -#### Fix -Odd record length support added with commit -[5b52e54](https://github.com/wfjm/w11/commit/5b52e54). - -### V0.742-1 {[issue #14](https://github.com/wfjm/w11/issues/14)} -- SEGFAULT core dump after detach -#### Original Issue -The detach of a `tcp` type virtual terminal or a `tap` type virtual -ethernet device can lead to a SEGFAULT core dump, e.g. after a -`cpu0ttb0 det` command. -This is caused by a race condition between the detach run-down and the -implementation of `ReventLoop::RemovePollHandler()`. -#### Fix -The culprit was a design error in the `RemovePollHandler` flow, which -allowed that `DoPoll` returned while poll list updates were still pending -and the subsequent execution of `DoCall` called removed handlers. -`DoPoll` now loops until there are no pending poll list updates and -`DoCall` quits processing poll change notifications when it detects -pending poll list updates. - -Fixed with commit [6f56f29](https://github.com/wfjm/w11/commit/6f56f29). - -### V0.64-1 {[issue #3](https://github.com/wfjm/w11/issues/3)} -- Bad throughput for DL11 emulation for low speed links -#### Original Issue -The large default transfer size for disk accesses leads to bad -throughput in the DL11 emulation for low speed links, like the -460kBaud the S3board is limited to. Will be overcome by a DL11 -controller with more buffering. -#### Fix -Fixed Resolved with buffered DL11 in commit -[1c9dbeb](https://github.com/wfjm/w11/commit/1c9dbeb). - -### V0.50-10 {[issue #20](https://github.com/wfjm/w11/issues/20)} -- DL11: output chars lost when device polling used -#### Original Issue -Part of the console output can be lost when `xxdp` test `eqkce1` is -run on FPGA, also some kernel messages during the 2.11bsd boot sequence. -In both cases very simple polling output routines are used. Most likely -cause is that device ready polls timeout before the rlink interface can -serve the output request. -#### Fix -Is overcome with buffered DL11 controller with much higher throughput and -improved interrupt rate control. - -Fixed with commit [1c9dbeb](https://github.com/wfjm/w11/commit/1c9dbeb). - -### V0.77-1 {[issue #19](https://github.com/wfjm/w11/issues/19)} -- tcl getters accessing a const reference crash with a SIGSEGV -#### Original Issue -tcl commands like -``` - cpu0 get type - cpu0rka get class - rlc get timeout -``` -crash with a `SIGSEGV`. Apparently all getters which internally return a -const reference are affected. Observed with gcc 5.4.0. Unclear whether this -is a coding bug introduced when `boost::bind` was replaced by lambdas -(in commit [1620ee3](https://github.com/wfjm/w11/commit/1620ee3)) or a -compiler issue. -#### Fix -The culprit was that automatic return type determination for the getter -lambdas was used. This fails when the called method returns a reference of -an object. The deduced lambda return type will the object, not a reference. -Unfortunately this doesn't lead to a compile time error but to a run time error. - -Bottom lime is -- automatic return type detection for lambda's can be error prone -- it is safer and also more compact to use `std:bind` as method forwarder - -Fixed with commit [6024dce](https://github.com/wfjm/w11/commit/6024dce). - -### V0.73-3 {[issue #11](https://github.com/wfjm/w11/issues/11)} -- dmscnt and dmcmon disabled in Vivado based flows -#### Original Issue -The 'state number generator' code in `pdp11_sequencer` causes in Vivado -2016.1 (and .2) that the main FSM isn't re-coded anymore, which has high -impact on achievable clock rate. The two optional debug units depending on -the state number, `dmscnt` and `dmcmon`, are therefore currently deactivated in -all Artix based systems (but are available on all Spartan based systems). -#### Fix -At least mitigated with [d14626c](https://github.com/wfjm/w11/commit/d14626c) -which allows to use `dmcmon` without the full state number generation logic -in `pdp11_sequencer`. Reintroduced `dmcmon` in `sys_w11a_n4` again. `dmscnt` is -still deconfigured for Vivado designs, but this has much less practical impact. - -## Closed issues - -### V0.73-1 {[issue #9](https://github.com/wfjm/w11/issues/9)} -- Vivado xelab sometimes extremely slow -#### Original Issue -as of Vivado 2016.2 `xelab` shows sometimes extremely long build times, -especially for generated post-synthesis VHDL models. But also building a -behavioral simulation for a w11a design can take 25 min. Even though -post-synthesis or post-routing models are now generated in Verilog working -with `xsim` is cumbersome and time consuming. - -#### Reason for closure on 2022-07-05 -Re-checked with Vivado 2022.1. -Building models with `xelab` is now quite fast. -The issue disappeared somewhere between Vivado 2016.3 and 2022.1. - -### V0.76-2 {[issue #17](https://github.com/wfjm/w11/issues/17)} -- Help wanted: Testing with Arty S7 appreciated -#### Original Issue -The w11a design for Arty S7 (50 die size), see rtl/sys_gen/w11a/artys7, -was provided to support also an up-to-date Spartan-7 based board. Turned -out that speed is equivalent to Artix-7. It is so far only simulation tested. - -Testing done with a real Arty S7, would be highly appreciated. Please double -check the pin assignments (see _mig_a.prj and artys7*.xdc_) with the -documentation of your board to avoid potential damage. - -Looking forward to receive test reports. - -#### Reason for closure on 2020-04-20 -Apparently nobody invested into an Arty S7. -The sys_w11a_as7 will be marked untested, removed from the default build -and test flows, but kept in the repository. diff --git a/doc/README_resolved_issues.md b/doc/README_resolved_issues.md new file mode 100644 index 00000000..5bbd4852 --- /dev/null +++ b/doc/README_resolved_issues.md @@ -0,0 +1,316 @@ +# Resolved issues + +### V0.791-2 {[issue #34](https://github.com/wfjm/w11/issues/34)} -- MMU: ACF=1 traps on any access + +Test 055 of `ekbee1` fails with +``` + MEMORY MANAGEMENT TRAP OR ABORT HAD INCORRECT CONDITION + EXPECTD ERROR AUTOI/D VIRTUAL + CONDITN REGISTR REGISTR ADDRESS TESTNO PC AT ABORT + 020011 030011 013427 054032 000055 054040 +``` +This is caused by a bug in pdp11_mmu. For ACF=1 a trap is taken for any access, +it should be taken only for read accesses. + +Fixed with commit [1644863](https://github.com/wfjm/w11/commit/1644863), +see [ECO-033](ECO-033-MMU_AFC-1_PDR-A.md). + +### V0.791-1 {[issue #33](https://github.com/wfjm/w11/issues/33)} -- MMU: PDR A bit is set for every access + +The `PDR` `A` bit is described in the Technical Manual as +> A bit (bit 7) - This bit is used by software to determine whether or not +> any accesses to this page met the trap condition specified by the Access +> Control Field (ACF). (A = I is affirmative). The A bit is used in the +> process of gathering Memory Management statistics. + +It is set when the page `ACF` enables an MMU trap, thus for +- ACF=1 and read access +- ACF=4 and any access +- ACF=5 and write access + +The w11 currently sets the 'A' bit on any non-aborted access regardless of the ACF value. + +No practical impact, the 'A' bit in `PDR` is a 11/45 11/70 only feature and not used in OS software. + +Fixed with commit [1644863](https://github.com/wfjm/w11/commit/1644863), +see [ECO-033](ECO-033-MMU_AFC-1_PDR-A.md). + +### V0.50-6 {[issue #26](https://github.com/wfjm/w11/issues/26)} -- CPU: MMR0 trap bit set when access aborted + +The MMU should set the 'trap bit' in `MMR0` only when the access is not +aborted. The current pdp11_mmu implementation sets the bit even when the +access is aborted. + +This is the reason why test 064 of the `ekbee1` diagnostics currently fails. + +Since the MMU trap mechanism is is only available on 11/45 and 11/70, but +not in the J11, it is not used by common operating systems. + +Therefore this is considered a to be a minor deficit. Will be fixed in an +upcoming release. + +Fixed with commit [1644863](https://github.com/wfjm/w11/commit/1644863), +see [ECO-033](ECO-033-MMU_AFC-1_PDR-A.md). + +### V0.50-5 {[issue #25](https://github.com/wfjm/w11/issues/25)} -- CPU: The AIB bit in MMU PDR register set independant of ACF field + +The MMU should set the AIB A bit in the the PDR only when _"trap condition is +met by the Access Control Field (ACF)"_. Thus for +``` + ACF=001 read-only trap on read + ACF=100 read/write trap on read or write + ACF=101 read/write trap on write +``` +The current pdp11_mmu implementation always sets the bit, the logic is simply +``` + if doabort = '0' then + AIB_SETA <= '1'; + AIB_SETW <= CNTL.wacc or CNTL.macc; + end if; +``` + +Since the MMU trap mechanism is is only available on 11/45 and 11/70, but not +in the J11, it is not used by common operating systems. + +Therefore this is considered a to be a minor deficit. Will be fixed in an +upcoming release. + +Fixed with commit [1644863](https://github.com/wfjm/w11/commit/1644863), +see [ECO-033](ECO-033-MMU_AFC-1_PDR-A.md). + +### V0.79-2 {[issue #30](https://github.com/wfjm/w11/issues/30)} -- SimH scmd files fail on current 4.* version; only 3.* supported + +The SimH scmd scripts were originally developed for SimH 3.8, and worked for +SimH 3.9 and later releases. The SimH 4.* development team decided not to +provide releases anymore, and over time this version became incompatible with +the scmd scripts used for w11. That is most pronounced for the RT11 V4.3 oskit. +A simple +``` + cd $RETROBASE/tools/oskit/rt11-53_rl + console_starter -s -d DL0 & + pdp11 rt11-53_rl_boot.scmd +``` +works fine for SimH V3.9, V3.10 and V3.11-1, but fails +- for pdp11-4.0-beta1 with core dump +- for pdp11-2016-12-26-5ced037b with signal SIGSEGV in pdp11_xu +- for pdp11-2019-07-28-2f707ffc with signal SIGSEGV in pdp11_xu +- for pdp11-2020-03-26-261abfc3 with signal SIGSEGV in pdp11_xu +- for pdp11-2021-08-22-64b12234 with signal SIGSEGV in pdp11_xu +- for pdp11-2022-04-17-d3f1ee09 with with errors like + - Device auto configuration is now disabled + - Command not allowed (for set rha enabled) + - container incompatible with the RL device + +Bottom line: +- the provided scmd scripts work only with SimH V3.9, V3.10 or V3.11-1 +- an update to the SimH V4.* has low priority + +Fixed with commit [35453c4](https://github.com/wfjm/w11/commit/35453c4) + +### V0.50-4 {[issue #24](https://github.com/wfjm/w11/issues/24)} -- CPU: src+dst deltas summed in mmr1 if register identical + +Test 12 of maindec `ekbee1` fails because it expects after a +``` + mov #100000,@#mmr0 +``` +which sets an error bit in `mmr0` and thus freezes `mmr0`, that `mmr1` contains +``` + 013427 (00010 111 00010 111) (+2,r7;+2,r7) +``` +while w11a gives +``` + 000047 (00000 000 00100 111) (--,--;+4,r7) +``` +The `mmr1` content is _different_ compared to the original 11/70 behavior, +but is _logically correct_, fault recovery in OS (like in 211bsd) will work +correctly. Therefore this is considered a to be a _minor deficit_. + +The 11/70 documentation clearly states that there is an additional state bit +that counts the write accesses to `mmr1`. This ensures that each of the two +logged accesses end in separate bytes (byte 0 filled first). + +The w11a only uses byte 1 when the register number differs. + +Fixed with commit [3bd23c9](https://github.com/wfjm/w11/commit/3bd23c9), +see [ECO-032](ECO-032-MMR1_fix.md). + +### V0.79-1 {[issue #29](https://github.com/wfjm/w11/issues/29)} -- migrate from Travis to GitHub actions + +#### Original Issue +Travis is now defunct and has been removed in +[6b8c063](https://github.com/wfjm/w11/commit/6b8c063). +So it's time to migrate CI/CD to GitHub actions. + +#### Fix +GitHub Actions fully implemented with commit +[db7556a4](https://github.com/wfjm/w11/commit/db7556a4), fine tuned with commit +[66f3f5d0](https://github.com/wfjm/w11/commit/66f3f5d0). + +### V0.76-1 {[issue #16](https://github.com/wfjm/w11/issues/16)} -- Help wanted: Testing with Nexys4 DDR appreciated +#### Original Issue +The w11a design for Nexys4 DDR, see +[rtl/sys_gen/w11a/nexys4d](https://github.com/wfjm/w11/tree/master/rtl/sys_gen/w11a/nexys4d), +was provided to support also an up-to-date Nexys4 board. It is so far only +simulation tested. + +Testing done with a real Nexyx4 DDR, or a newer Nexys A7-100T, would be highly +appreciated. Please double check the pin assignments +(see _mig_a.prj and nexys4d*.xdc_) with the documentation of your board +to avoid potential damage. + +Looking forward to receive test reports. + +#### Fix +The Nexys4 _(classic, with 16 MByte PSRAM)_ board, on which most of the recent +w11 was done, broke in late July 2019 +(see [blog](https://wfjm.github.io/blogs/w11/2019-07-27-nexys4-obituary.html)) +and a Nexys A7 was ordered as replacement. + +Basic tests with the test designs +[sys_tst_serloop2](https://github.com/wfjm/w11/blob/master/rtl/sys_gen/tst_serloop/nexys4d/sys_tst_serloop2_n4d.vhd) and +[sys_tst_rlink_n4d](https://github.com/wfjm/w11/blob/master/rtl/sys_gen/tst_rlink/nexys4d/sys_tst_rlink_n4d.vhd) +and the BRAM-only w11 design +[sys_w11a_br_n4d](https://github.com/wfjm/w11/blob/master/rtl/sys_gen/w11a/nexys4d_bram/sys_w11a_br_n4d.vhd) worked fine. + +But all tests involving the DDR2 memory interface failed. The culprit was +quickly found, it was a mistake in the MIG configuration +[mig_a.prj](https://github.com/wfjm/w11/blob/master/rtl/bplib/nexys4d/mig_a.prj), +the polarity of the `SYS_RST` signal was `ACTIVE LOW` instead of `ACTIVE HIGH`. +After fixing this, the test designs +[sys_tst_mig_n4d](https://github.com/wfjm/w11/blob/master/rtl/sys_gen/tst_mig/nexys4d/sys_tst_mig_n4d.vhd) and +[sys_tst_sram_n4d](https://github.com/wfjm/w11/blob/master/rtl/sys_gen/tst_sram/nexys4d/sys_tst_sram_n4d.vhd) +as well as the w11 implementation +[sys_w11a_n4d](https://github.com/wfjm/w11/blob/master/rtl/sys_gen/w11a/nexys4d/sys_w11a_n4d.vhd) worked right away. + +The [tst_sram](https://github.com/wfjm/w11/tree/master/rtl/sys_gen/tst_sram) +designs show nicely that the DDR2 on the Nexys A7 board is slightly slower +than the DDR3 on the Arty A7 board +``` + Board test time clock period UI_CLK + Nexys A7 37.36 s 3333 ps 75.0 MHz + Arty A7 35.77 s 3000 ps 83.3 MHz +``` + +Closed with commit +[563e230](https://github.com/wfjm/w11/commit/563e230). + +### V0.66-1 {[issue #8](https://github.com/wfjm/w11/issues/8)} -- TM11 controller doesn't support odd transfer size +#### Original Issue +The TM11 controller transfers data byte wise (all disk do it 16bit +word wise) and allows for odd byte length transfers. Odd length transfers +are currently not supported and rejected as invalid command. Odd byte +length records aren't used by OS, so in practice this limitation +isn't relevant. +#### Fix +Odd record length support added with commit +[5b52e54](https://github.com/wfjm/w11/commit/5b52e54). + +### V0.742-1 {[issue #14](https://github.com/wfjm/w11/issues/14)} -- SEGFAULT core dump after detach +#### Original Issue +The detach of a `tcp` type virtual terminal or a `tap` type virtual +ethernet device can lead to a SEGFAULT core dump, e.g. after a +`cpu0ttb0 det` command. +This is caused by a race condition between the detach run-down and the +implementation of `ReventLoop::RemovePollHandler()`. +#### Fix +The culprit was a design error in the `RemovePollHandler` flow, which +allowed that `DoPoll` returned while poll list updates were still pending +and the subsequent execution of `DoCall` called removed handlers. +`DoPoll` now loops until there are no pending poll list updates and +`DoCall` quits processing poll change notifications when it detects +pending poll list updates. + +Fixed with commit [6f56f29](https://github.com/wfjm/w11/commit/6f56f29). + +### V0.64-1 {[issue #3](https://github.com/wfjm/w11/issues/3)} -- Bad throughput for DL11 emulation for low speed links +#### Original Issue +The large default transfer size for disk accesses leads to bad +throughput in the DL11 emulation for low speed links, like the +460kBaud the S3board is limited to. Will be overcome by a DL11 +controller with more buffering. +#### Fix +Fixed Resolved with buffered DL11 in commit +[1c9dbeb](https://github.com/wfjm/w11/commit/1c9dbeb). + +### V0.50-10 {[issue #20](https://github.com/wfjm/w11/issues/20)} -- DL11: output chars lost when device polling used +#### Original Issue +Part of the console output can be lost when `xxdp` test `eqkce1` is +run on FPGA, also some kernel messages during the 2.11bsd boot sequence. +In both cases very simple polling output routines are used. Most likely +cause is that device ready polls timeout before the rlink interface can +serve the output request. +#### Fix +Is overcome with buffered DL11 controller with much higher throughput and +improved interrupt rate control. + +Fixed with commit [1c9dbeb](https://github.com/wfjm/w11/commit/1c9dbeb). + +### V0.77-1 {[issue #19](https://github.com/wfjm/w11/issues/19)} -- tcl getters accessing a const reference crash with a SIGSEGV +#### Original Issue +tcl commands like +``` + cpu0 get type + cpu0rka get class + rlc get timeout +``` +crash with a `SIGSEGV`. Apparently all getters which internally return a +const reference are affected. Observed with gcc 5.4.0. Unclear whether this +is a coding bug introduced when `boost::bind` was replaced by lambdas +(in commit [1620ee3](https://github.com/wfjm/w11/commit/1620ee3)) or a +compiler issue. +#### Fix +The culprit was that automatic return type determination for the getter +lambdas was used. This fails when the called method returns a reference of +an object. The deduced lambda return type will the object, not a reference. +Unfortunately this doesn't lead to a compile time error but to a run time error. + +Bottom lime is +- automatic return type detection for lambda's can be error prone +- it is safer and also more compact to use `std:bind` as method forwarder + +Fixed with commit [6024dce](https://github.com/wfjm/w11/commit/6024dce). + +### V0.73-3 {[issue #11](https://github.com/wfjm/w11/issues/11)} -- dmscnt and dmcmon disabled in Vivado based flows +#### Original Issue +The 'state number generator' code in `pdp11_sequencer` causes in Vivado +2016.1 (and .2) that the main FSM isn't re-coded anymore, which has high +impact on achievable clock rate. The two optional debug units depending on +the state number, `dmscnt` and `dmcmon`, are therefore currently deactivated in +all Artix based systems (but are available on all Spartan based systems). +#### Fix +At least mitigated with [d14626c](https://github.com/wfjm/w11/commit/d14626c) +which allows to use `dmcmon` without the full state number generation logic +in `pdp11_sequencer`. Reintroduced `dmcmon` in `sys_w11a_n4` again. `dmscnt` is +still deconfigured for Vivado designs, but this has much less practical impact. + +## Closed issues + +### V0.73-1 {[issue #9](https://github.com/wfjm/w11/issues/9)} -- Vivado xelab sometimes extremely slow +#### Original Issue +as of Vivado 2016.2 `xelab` shows sometimes extremely long build times, +especially for generated post-synthesis VHDL models. But also building a +behavioral simulation for a w11a design can take 25 min. Even though +post-synthesis or post-routing models are now generated in Verilog working +with `xsim` is cumbersome and time consuming. + +#### Reason for closure on 2022-07-05 +Re-checked with Vivado 2022.1. +Building models with `xelab` is now quite fast. +The issue disappeared somewhere between Vivado 2016.3 and 2022.1. + +### V0.76-2 {[issue #17](https://github.com/wfjm/w11/issues/17)} -- Help wanted: Testing with Arty S7 appreciated +#### Original Issue +The w11a design for Arty S7 (50 die size), see rtl/sys_gen/w11a/artys7, +was provided to support also an up-to-date Spartan-7 based board. Turned +out that speed is equivalent to Artix-7. It is so far only simulation tested. + +Testing done with a real Arty S7, would be highly appreciated. Please double +check the pin assignments (see _mig_a.prj and artys7*.xdc_) with the +documentation of your board to avoid potential damage. + +Looking forward to receive test reports. + +#### Reason for closure on 2020-04-20 +Apparently nobody invested into an Arty S7. +The sys_w11a_as7 will be marked untested, removed from the default build +and test flows, but kept in the repository.