## Die photo ![Die photo](/vm3/img/vm3a.jpg) Links to raw panoramic photos (CAUTION: files are VERY LARGE, browser might hang): - [1801BM3 Top metal, 22Kx18K, 607M](http://www.1801bm1.com/files/retro/1801/images/vm3a-met.jpg) - [1801BM3 Diffusion, 19Kx16K, 397M](http://www.1801bm1.com/files/retro/1801/images/vm3a-dif.jpg) ## 1801BM3 The 1801BM3 is a single-chip microprocessor, was designed in the second half of 1980-th and had PDP-11 compatible architecture. Notable, it was not an exact clone of one of the original DEC processors but had its own internal architecture. The 1801BM3 is the further development of 1801BM1/1801BM2 and is the most performance microprocessor in the 1801 series, encompasses MMU, and provides an integrating option for external FPP (dedicated 1801BM4 chip). Its ALU takes 3 clocks per micro-operation, there is the dedicated PC adder (i.e ALU is not used to update PC), and 1801BM3 is capable to execute a register-register command only in 3 clocks. The 1801BM3 is not based on the static design, there is presumably a lower limit of operating frequency about 100kHz. ## Compatibility The closest DEC model 1801BM3 matches is PDP-11/34, it supports: - odd address trap - PSW mapping to 177777768 - mtps and mfps instructions - ash, ashc, mul, div instructions - MMU SR0 diagnostics M-bit - exception on 012 and 102 CPU mode - non advancing (Rx)+, @(Rx)+ in case of exception - fully compatible 11/34 MMU in 18-bit mode - 22-bit MMU extension (absent in original 11/34) ## Known 1801BM3 incompatible issues - all reserved SR3 register bits are readonly and read out as ones - if instuction runs into bus timeout and on exception handling the MMU exception occurs, the SR2 contains the address of the next instruction - special HALT mode is implemented to handle halt instruction and double error exceptions in kernel mode, provides ODT functionality with external ROM program ## Models passed the factory tests The factory tests passed by the asynchronous model in simulation: - [fkaac0](/vm3/tst/org/fkaac0.mac) - 11/34, basic instructions test - [fkabd0](/vm3/tst/org/fkabd0.mac) - 11/34, traps and exceptions test - [fkaca0](/vm3/tst/org/fkaca0.mac) - 11/34, extended instruction set test (EIS) - [fkthb0](/vm3/tst/org/fkthb0.mac) - memory management unit test (11/34, 18-bit MMU) - [jkdad0](/vm3/tst/org/jkdad0.mac) - memory management unit test (F11, 22-bit MMU) - [haltm](/vm3/tst/org/haltm.mac) - halt mode test, 1801BM3 specific ## Directory structure #### \hdl - the directory contains HDL-related materials, sources, and sample projects for Quartus and ISE. There are three models: original asynchronous, refactored synchronous and Wishbone compatible #### \hdl\org - asynchronous Verilog HDL model is as close as possible to the original gate-level schematics. In practice can be used for modeling purposes only, because processor contains latches (note, it differs from flip-flops), ones work in non-reliable fashion on synchronous FPGAs. Also model does not contain line delays, in some simulating environment it can be very critical. Nonetheless, this model is included in the package as a demo of the closest possible approximation to the original die. May not be synthesizable with some tools, presented for simulation purposes only. #### \hdl\syn - synchronous Verilog HDL model, the frontend bus is Q-Bus, uses single clock to operate, does not contain latches, and whole model can be synthesized for synchronous FPGAs. This model is intermedate step for final Wishbone-compatible version. #### \hdl\wbc - synchronous Wishbone compatible version of 1801BM3 synchronous core uses a single clock, is FPGA-optimized, follows the original command execution timings, is intended for SoC building. #### [\cad\vm3](https://github.com/1801BM1/cad11/tree/master/vm3) (moved to dedicated repo) - topology in Sprint Layout format - topology in PCD-2004 pcb format - schematics in PCD-2004 pcb format - schematics in pdf (gate level) ## How to simulate - run "tst\build.bat haltm" to prebuild desired test software image (haltm is a sample) - run ModelSim simulator - set "vm3/hdl/org/sim/de0" as working directory in ModelSim (File->Change Directory) - execute "do run.do" console command - wait, simulation may take some time till complete - see the results in waveform and console output ## Implemented resources - RAM 16Kx16bit at 0000008 with initialized content from test.mif file - TTY at 1775608, 608/648 vector interrupts, tx/rx with cts/rts handshake, 115200/8/N/1, RS-232 levels (board dependent). - 50Hz system timer interrupt (IRQ2, edge sensitive, vector 1008), enabled by board switch[0], if timer is enabled the board led[0] lights - 4x7-segment display, segments attached to output registers at 1777148/1777168, see the test software source for the details - halt mode debug register, write only at 1777108 - switches and buttons can be read from input register at 1777148 - board button[0] is reset, short press less than 1 sec causes system reset, long press over 1 second simulates power reset (excluding RAM content) ## Fmax and FPGA resources - Wishbone compatible 1801BM3 core - register file and constant generator in flip-flops, no RAM block - speed optimization chosen - slow model, worst corner All results are just approximate estimations by synthesis tools (Quartus/XST) on sample projects. | Board | FPGA | Family | Fmax | LUTs | FFs | MEM | |---------|------------------|--------------|---------|------|------|--------| | DE0 | EP3C16F484C6N | Cyclone III | 99 MHz | 3397 | 1340 | 1 M9K | | DE1 | EP2C20F484C7N | Cyclone II | 74 MHz | 3834 | 1515 | 1 M4K | | DE2-115 | EP4CE115F29C7N | Cyclone IV | 87 MHz | 3981 | 1558 | 1 M9K | | DE10-LT | 10M50DAF484C7G | Max 10 | 81 MHz | 3048 | 1198 | 1 M9K | | QC5 | 5CEFA2F23I7N | Cyclone V | 105 MHz | 1562 | 1483 | 1 M10K | | QC10 | 10CL006U256CN8 | Cyclone 10 | 73 MHz | 3421 | 1423 | 1 M9K | | EG4 | EG4S20BG256 | Eagle EG4S20 | 71 MHz | 3949 | 1221 | 1 M9K | | QA7 | XC7A35TFTG256-1 | Artix 7 | 85 MHz | 2302 | 1289 | 8.5 BR | | QK7 | XC7K325TFFG676-1 | Kintex 7 | 133 MHz | 2462 | 1645 | 8 BR |