This CPU11 repository contains the results of historical PDP-11 microprocessors reverse engineering.
Typically the results include:
There are a few words regarding the reverse engineering process stages:
The 1000 signs of Pi calculation test is based on spigot algorithm. The digits are the times in 50Hz ticks. All models were Wishbone-compatible and run on the DE0 board with the same system configurations, software was placed into static memory with zero wait states and 4 minimal clocks per cycle (seems to be the bottleneck for the 1801BM3, it is capable to fetch ans execute reg-2-reg every 3 cycles). LSI-11 was running at 80MHz and results are multiplied by 0.8 to match with other ones. M4 was running at 50MHz and results are multiplied by 0.5. There are three variants of the test with various combinations of supported EIS instructions.
Model | Frequency | no EIS | MUL only | MUL/DIV | cpm |
---|---|---|---|---|---|
LSI-11 | 100MHz(80MHz) | 746 | 422 | 284 | x1 |
F-11 | 100MHz | 693 | 429 | 323 | x2 |
1801BM1A | 100MHz | 586 | --- | --- | x2 |
1801BM1Г | 100MHz | 588 | 458 | --- | x2 |
M4 | 100MHz(50MHz) | 532 | 275 | 154 | x1 |
1801BM3 | 100MHz | 388 | 205 | 137 | x1 |
1801BM2 | 100MHz | 340 | 190 | 123 | x2 |
Notes: "cpm" means core clocks per microinstruction, how many clocks model takes to execute single microcode instruction. For LSI-11 the four phases c1-c4 were refactored to the single core clock, for F-11 four phases were refactored to two core clocks. In addition the 1801ВМ2/1801BM3 performs the instruction prefetch gaining some boost.
Icarus Verilog is an implementation of the Verilog hardware description language compiler that generates netlists in the desired format (EDIF). It supports the 1995, 2001 and 2005 versions of the Verilog standard, portions of SystemVerilog, and some extensions.
There are builds of Icarus Verilog for Windows available on site.
We would recommend installing iverilog
version 12. However version 10 should be sufficient as
it comes as part of Ubuntu 20.04 LTS distribution.
There are run_iverilog.sh
scripts added per each CPU model.
All scripts have similar structure:
iverilog
for specified top-level module and create *.vvp
filevvp
command:For example, LSI CPU has following script:
iverilog -c iverilog.cf -o tb_lsi.vvp -s tbl
vvp -n -v ./tb_lsi.vvp
The iverilog.cf
file contains list of Verilog files to be added to desing (to be compiled and simulated).
The synchronous models are planned to be run (and appropriate sample projects to be included in repo) on the following Development Kits: