QSIC – QBUS Storage and I/O Card

Overview

The old disks for PDP-11s being somewhat difficult to find, Noel and Dave decided to build a card to interface with modern storage devices. The QSIC is a QBUS card to make SD cards and USB mass storage devices appear as traditional disks. It will consist of an FPGA with bus transceivers to connect to the QBUS and I/O ports to connect to a couple SD cards and a USB A socket.

Our plans are to emulate traditional disks and their controllers (initially the RK11 and RP11). There will be some slight extensions to make these older controllers fit the QBUS (22-bit addressing). For those who are able to write their own device drivers, we have plans to extend the RP11 to support disks up to 128 GiBytes.

Additionally, we've designed an LED indicator panel circuit board that replicates the appearance and functionality of DEC's indicator panels. The mechanical mounting and electrical interface are different than DEC's but they would fit behind the bezel and inlay of a traditional DEC PDP-11 indicator panel. We've designed our own inlays for our disk controllers or for monitoring the bus and have a start on being able to fabricate our own bezels. We use an RS422 serial interface that allows us to daisy-chain indicator panels so you can have all the blinkenlights you could want. We ought to be able to handle at least four indicator panels if you have space to put them.





Status

2015 Oct 10
We talked about the project all summer and now we're getting started. Have some Verilog code running under simulation and putting prototype hardware together to test it out. We expect to work on it over the winter and hope to have something running by spring of 2016.
2016 Feb 14
We have a wire-wrapped prototype board (with a second nearly ready to go) that is running simple QBUS slave cycles. Bus-mastering and interrupts are next, followed by interfacing to some sort of actual storage.
2016 Mar 5
We have DMA operations working in a simple fashion (only one transfer for each bus arbitration and not a hint of block mode) against an equally simple RK11 controller and a small amount of FPGA internal block RAM to make up a RAM disk.
2016 Mar 28
Added an indicator panel that monitors the QBUS; love those blinkenlights. A short video clip is here. If you know where to look, this clip shows a bug in the DMA implementation. The bug is fixed now but it tickles me that the indicator panel was useful so quickly and unexpectedly.
2017 Apr 26
This winter was time to work on interfacing to the storage medium itself and the SD cards were first up. Work went slower than anticipated, for some reason I was totally blocked on these things, and they're not quite working yet. Finally we switched over to a very simple micro-coded design and it started moving forward. We're getting through the SD card initialization sequence but don't yet have data transfers working.

The work on the QBUS protocol lead us to some interesting insights into how to implement bus arbitration. We decided to write that down in a paper that's available here.

2017 Dec 28
Got the SD card reading and writing blocks of data and wired it to the simple RK11 controller through asynchronous FIFOs. It's mostly working though there are a few bugs still to work out and there's lots of RK11 emulation that could be added.
2018 Jan 29
Turns out that Unix needs the ability to read and write partial blocks that the RK11 has and that I hadn't implemented. Now that that's working, we're able to boot v6 Unix off an SD card pretending to be an RK11/RK05.
2020 Jan 31
After a long gap of feeling intimidated by the next thing I wanted to do, I learned about the AXI4 interface to memory. It's amazingly powerful and, at the same time, quite easy to use. The QSIC now has working access to the DDR3 SDRAM and so we can have full-sized RAM Disks. Okay, it's still only an RK05 but fixing that is next on the list. The RP11 is not nearly so intimidating so hopefully it won't take so long.

You want to help?

Awesome! We'd love help. We want to get a prototype running first and we're busy working on that now using a wire-wrapped board and an FPGA module. Before too long, we'd like to transition to a circuit board of our own. If you have knowledge and experience with designing, manufacturing, and soldering up boards with BGA parts, we'd love to have your help with this.

The indicator panels will be a lot of fun but they'll need graphic design for the different inlays and manufacturing of the mechanical bits. We have ideas for most of it but not yet for fabricating the bezel. You want to take a crack at that?

Update: I have been experimenting with an idea about how to mill a bezel out of a PVC trim board. It seems to work but I think it could use a lot of refinement. For anyone who wants to play around with CNC routers, this could be a good project.

In addition to the hardware, there's the firmware for the FPGA. We may well stop after the RK11 and RP11 controllers. Do you need an RL11 or maybe even an MSCP controller? The design will be open to that. Or how about a mag-tape controller? Maybe it's a little weird but I could see USB thumb drives as stand-ins for mag tape for doing backups. It's probably best to wait until we have at least something working before getting too far afield with hordes of different device controllers.

We don't just need firmware but also software. We're looking at putting an embedded PDP-11 inside the FPGA. Its main function will be handling the USB protocol but it'll have a secondary, though still quite important, role of handling the configuration of the QSIC. That embedded processor is another venue, if you will, for doing development on the QSIC. It might be the right place to put MSCP, for example. Or, another idea that's been floated, is that it could handle a USB-connected Ethernet and emulate one of the Ethernet boards from back in the day.

Future

Beyond the QSIC, we're contemplating a Unibus board as well. In addition to emulating disk controllers, it could act like the ENABLE board did in giving 18-bit Unibus machines access to 222 bytes of memory like a PDP-11/70. To do that, we'd probably just put the memory on the board too as that simplifies the design considerably. Since the smallest DDR3 memory chip we can find that works with the Artix7 FPGA we're looking at is 256MB, we ought to have ample memory.