MEM11 Status Update

Guy Sotomayor ggs at
Mon Jan 19 23:27:59 CST 2015

As some of you know I've been working (on and off again) a 
multi-function Unibus board that contains all of the more difficult 
items to allow a PDP-11/20 to run Unix V1 entirely within the CPU 
chassis.  Other than the CPU and the RK11-D controller, everything else 
will be on the MEM11 board.  Here's the background on what the MEM11 is 
and the current progress.

What's on the board is the following:

  * Up to 124KW of non-volatile memory
  * Console Emulator ROM
  * 4 Boot ROMs selected from 32 images on the board
  * 2 DL11 SLUs
  * RF11 controller with non-volatile memory emulating 8 RS11 drives
  * KE11 EAE
  * KW11K
  * KW11L
  * KW11P
  * KW11W

I know I went overboard with the KW11s as only the KW11L (line-time 
clock) is needed.

Early on, because of the number of devices and trying to fit all of this 
on a SPC-sized board so it can fit in the 11/20 chassis (can't fit in 
hex sized cards) I decided to "soft" configure everything.  That is, all 
of the configuration of the MEM11 will be done over one of the serial 
ports.  To get everything to fit on a board that small, I would need to 
have a reasonable level of integration.  This meant that I would be 
using an FPGA and with a few exceptions all components will be SMT 
(sorry folks, no kits on this one).

I originally thought I would do everything in Verilog with no 
microprocessor (for a whole host of reasons).  I quickly realized that 
my Verilog coding skills were not up to a task that large so I put the 
project on hold while I regrouped.  I figured that I would have to 
integrate some sort of microprocessor core into the FPGA but was not 
happy with any that I was finding.  They were either very simple cores 
with poor tools support or very complex (ie big) cores that had 
reasonable tools.

About 18 months ago, I came across a paper by James Bowman titled "J1: a 
small Forth core for FPGAs".  Best of all it was implemented in about 
200 lines of Verilog (ie it was incredibly small).  Also available was a 
complete cross environment (written in Forth of course).  It produced 
very tight code.  I spent a while trying to understand the J1, the cross 
build environment and getting familiar with Forth again.

I got serious in November 2014 in laying out the structure of how to put 
everything together.  I decided that the J1 would be fast enough (should 
see ~100MIPs on the FPGA I plan to use) to actually do most of the 
device emulation code in Forth with only enough Verilog to offload some 
of the more performance critical bits. For example, the J1 is fast 
enough to actually receive the Unibus transaction, read a word from the 
FRAM and complete the Unibus transaction and still be close to maximum 
Unibus throughput.

I've spent most of my time writing Forth code to implement the emulation 
of the devices and the configuration UI.  I decided that by writing the 
Forth code first, I would have a pretty good idea of how everything will 
go together.  What the H/W will look like will fall out from that and if 
I do have to change the H/W interface only small changes will need to be 
made to the S/W. Forth lends itself to building up from a very low level 
to a high level where the high level is isolated from many of the low 
level details.

I've been coding furiously.  As of tonight I have ~60% of the emulation 
code written and 100% of the configuration UI (and it all builds).  I'll 
be working on finishing off the emulation code and then starting on the 
Verilog.  Since I want to get familiar with running the J1 in a real 
FPGA, I'll be building code and testing the configuration UI on one of 
my FPGA development boards.  This also has the advantage of having 
(mostly) tested code when I actually have real MEM11 hardware.

A few comments on the capabilities.  Everything is configurable through 
the configuration UI (ie you'll be able to change everything regarding 
what devices are enabled, what they're base addresses are, the interrupt 
vector, priority, frequency of the line clock, etc, etc).  Basically, as 
I've been reading up on the devices, if there's a jumper or option on 
the device, there will be a way to set it through the configuration UI.  
I also decided that to upload/download ROM images, memory images, etc 
that I would provide XMODEM capabilities.

One thing that I decided on was that I wanted to be able to send code 
updates to folks and not require them to have a JTAG probe in order to 
perform an update (and hence the desire for XMODEM).  So the code in the 
FPGA is basically just a boot-loader that loads an image from an area of 
non-volatile memory on the board.  I'm allowing for 4 J1 images (16KB 
each...the code address space for the J1) plus a "safe" boot image that 
no matter how screwed up everything is, you'll be able to fall back to 
that image.

As I was competing the configuration UI, I found that I couldn't have 
both the configuration UI and the emulation code both fit in 16K 
(strings take up a lot of space).  By the time I was done with the 
configuration UI I was hitting up against the 16K limit (presently 
there's about 200 bytes free and there's a bit more refactoring that I 
could do if I need to get really aggressive). So my insight in having a 
boot loader and organizing along those lines paid off.  ;-)

I'm sure there are a number of folks who will want one and are eager to 
know what it'll cost.  ;-)

I have a basic BOM for the MEM11, but I haven't cost it out in a while 
so while I *think* I know what it'll cost to produce, I'm not going to 
give out pricing (even though a few folks know what my target is) until 
after I have a prototype built and working.

Also, since there will be a high level of integration, I'm only going to 
offer this only as a fully assembled and tested unit with all of the 
FPGA programming, ROM emulation images, J1 code images and a reasonable 
configuration setup.

As I said, as of tonight, I've finished the configuration UI. I'll be 
working on finishing up the emulation code.  This is the biggest risk 
since I won't really be able to test the emulation code until I have an 
actual prototype board built.  Once all of the code is written, I'll be 
working on the Verilog.  During all of this, I'll be doing some testing 
on my FPGA evaluation board.

Given my progress so far, I'm hoping (fingers crossed) to be testing a 
prototype some time in June/July 2015.  Once I have the prototype 
tested, I'll have a good idea of the remaining work that needs to be 
done.  At that point, I'll let folks know what the cost will be and will 
start to take orders.  Once I have a reasonable number of (committed) 
orders, I'll do a production run.

Ok, so this has been much longer than I expected.  ;-)

I'll update folks as the project progresses.

TTFN - Guy

More information about the cctalk mailing list