2001 Perspective

I'm in the process of cleaning out some of the materials I've accumulated over the last 30+ years, and it had been some time since I looked at my digital electronics explorations from 1975-1977. At this time there was no such thing as personal computers and one either analyzed physiologic data manually, making incredibly tedious measurements on large stacks of pen-recorder paper, or one was fortunate to have million dollar plus grants and be able to utilize mainframe computers to do ones data analysis in real-time. I've been trying to find the power of the IBM 360/65 computer (which seemed to be a standard mainframe at most university computing centers in the 1970's), but it was unfortunately present before the internet and IBM's corporate memory doesn't seem to extend that far back. My closest guess is that it was probably about as powerfull as my MacIIvx which had more RAM than the 360/65 could possibly address as the 360 had a 24 bit address space.

There are few things that I hate more than doing something manually that a machine can do (only if it is mental work; if it is physical work that is simple enough so I can let my spinal cord control the body, I enjoy doing something physical like planting trees, while I simultaneously creating a program in my mind). If I wanted to avoid spending months with calipers, ruler and pen digitizing my data, I needed to come up with a cheap way of digitizing my experimental data.

My MSc research project involved looking at synaptic connections between neurons in cultures of mouse brainstem by performing extracellular recordings from two neurons simultaneously and using cross-correlation analysis of the extracellular spike trains to infer connectivity. All data was recorded on analog tape and, in the case of two cells that were firing at rates of 10-20/second, measuring the interspike intervals in a 20 minute period manually was something that even the most obsessive-compulsive lab tech fed liberal quantities of amphetamines would likely balk at.

If I wanted to do this project now, I would still need to make a circuit which would amplify the input signals and trigger at the appropriate point so that I could obtain digital pulses corresponding to spikes. These could be applied to parallel port inputs on a computer and a DOS program would time the interval between pulses on each channel. There would be no need to transmit this information to another computer for analysis and the interspike times could be dumped to a disk file while they were being accumulated. My device had a 200 microsecond time resolution; easily within the capabilities of any modern computer unless it happens to be running windoze.

What I realized a couple of years ago was that assuming that one needs external signal processing/digitization was utilizing outmoded techniques as most computers are now equipped with a sound card which can simultaneously record 2 channels of analog data using 16 bit resolution at 44.1 KHz. This is far better than any A/D converter I have ever used in my previous life as an electrophysiology researcher; a system I built in 1983 that I was most proud of was capable of 12 bit resolution at a sampling rate of 20 KHz using an A/D converter/channel to get truly simultaneous multichannel data acquisition. My system was DC coupled whereas sound cards are AC coupled, but for the types of signals I was analyzing in 1976, an AC coupled system would have worked just fine. I did write a program last year which allowed me to analyze 2 channels of analog data recorded as a huge disk file (some 350 Mb for 30 minutes of data). To pick out spikes from neurons, I can apply any spike recognition algorithm I want in software and have the program display which spikes are being selected for analysis. I can even select a representative template for a waveform and have program do a point by point computation of sum of squares differences between template and analog waveform to find exact matches if I want. This type of analysis used to take days for a few thousand points on a PDP-8 computer in 1979, but my 900 MHz Athlon can run through 360 Mb of analog data performing this template matching algorithm in 3 minutes in a program written on compiled Visual Basic.

The hardware one needs to do what I used to want to do is so ubiquitous that no-one appears to even think about it. The average computer now has the capacity of what would have been considered to be a supercomputer 30 years ago. My hardware hacking these days is confined to things like simple op-amp circuits that I interface to a sound card, but the peak of my digital design expertise occurred in 1976. At that time I could heartily agree with Steve Ciarcia when he stated "my favorite programming language is solder".

Now programming has the connotation of doing something purely in software without any physical connection at all (aside from the media the program is run on), but in 1976 my conception of a program was much different. The timing device described is a complex machine; it would be trivial to impliment it in software now on a microprocessor, but I didn't have a microprocessor to work with in 1976. Instead, I utilized a hierarchy of state machines; on the lowest level, there existed state machines which implimented a dual interval timer function, dual FIFO stack and serial output device. On the next level up was a state machine that ensured data flowed smoothly from timer to FIFO to output board. The design was made by first writing a high level flowchart, and then taking each lower level operation and writing flowcharts to impliment the lower level operations. This procedure ceased once a 1:1 mapping between operations and circuit elements could be established. At this point, the hierarchy of flowcharts was the algorithm; I could convert this to a program in any language, or make a hardware device to impliment the algorithm. At no other time have I ever experienced the duality between hardware and software implimentations of an algorithm as I did in 1976.

One of the things I started to do today was to check my logic and seeing if I could optimize any of the design further with 25 years of hindsight; I was somewhat distressed when I found large chunks of my notes made no sense to me now. I could see what steps I was following when I wrote out a state diagram for circuit and logic equations which defined transitions to new states as a function of various inputs, but when I started to get into simplification of the obvious circuit in an iterative fashion, I was lost. In 1976 I had internalized the digital design process from July to November and neat hacks appeared though subconscious processes that I no longer seem to be able to activate. The possibilities for malfunction in this set of circuits are immense, yet I seemed to be able to zoom in on problems very quickly and fix them. Some of my fixes of race conditions and similar phenomena are simply a mystery to me now; all I know is that I built this thing and it worked. It was only a minor step in the process of getting my MSc, but every time I start looking at the circuitry in detail I marvel that I managed to get this thing to work.

In the next few months, I plan on firing up this device one last time just to see it in action again. It uses a very sedate, by todays standards, using a 1 MHz clock and taking 8 microseconds to perform insertion of a word into FIFO. I probably could jack up the clock rate a bit, but SRAM's from that era have access time of 500 nsec which means I might be able to double speed at best unless I cheat and use newer SRAMS. Data rate of serial output is a mere 2400 baud (I used to think this was really fast), and each BCD word of timer data is transmitted in 1-4 bytes with the upper nibble of every byte being used for control codes and the lower nibble for data with leading zeroes removed. I used BCD counters because overflow in a counter is indicated by the value F000.

The type of low-level design that I did for this device is now generally only done by people who lay out ASICS as the whole functionality of this device can easily be fit on one chip. The only simulation tools I had in 1976 were squared paper and a pencil and eraser to draw out timing diagrams, but a lot of the circuit simulation was delegated to wetware subroutines. I was looking through my notes I made in 1976, and there were some preliminary explorations of making this device into a microcontroller to increase its flexibility; I did have 512 words of RAM that were unused and when the cost of an 8008 is around $200, making ones own microcontroller is a reasonable thing to consider.

If I were to design this device today, I would make far greater use of tri-state logic and also use PROMS as to directly impliment truth tables instead of using random logic in the state machines. PROMS were just too expensive in 1976 for me to experiment with, and besides, I had considerable design experience with random logic doing a smaller project the year before.

It wasn't until I started looking at this device in detail that I realized how much of a difference low cost and ubiquitous microprocessors have made in research. While unearthing various files for this project, I ran across a box of PDP-11 QBus boards which were cutting edge minicomputer technology from about 1978 onwards. I probably could have gotten a PDP-11/23 based system in 1976 if I had been willing to fork out $5000+ for the hardware. This was almost double my annual research stipend back then, and the labs that had such fancy hardware were very few. Now, the PDP-11/23 board that I recall my UBC lab paying $2000 for is available for $5 at the surplus computer facility where I picked it up. It was an incredibly powerfull machine for its time, but now only those who have programmed a PDP-11 appreciate the significance of owning one at about the cost less than that of a sixpack of beer (in Canada, the price is mainly taxes).

A CPU board, 16 Kwords of RAM with serial port, a parallel interface board and a realtime clock would allow me to impliment the complete system I built in software with just waveshaping circuitry required to feed signals to parallel port inputs. I wouldn't even need an operating system as the program to perform the identical function to my circuit could be entered manually in octal form through the serial port monitor interface that comes up at boot time. QBus based PDP-11 systems are ideal machines for replacing custom logic circuits in various data acquisition/analysis applications and there is nothing that I know of that so nicely fits in this niche.