The Analog Computing Module (ACM) is an analog based computational unit
designed to provide mathematical support (similar to an Arithmetic
Logic Unit) for a TTL-based 8-bit Forth hardware engine computer.
The homebrew Forth computer is named MAX. This computer consists of a
passive backplane with insertable cards for various purposes, such as:
Data Stack, ROM Stack, Return Stack, Memory Stack, Clock, Controller,
NAND ALU, ACM, Counter, Input, and Output. The MAX Computer is
programmed using 32 Forth primitives as machine opcodes. Here is a link
to a forum thread with additional information about MAX: ANYCPU.ORG
Forum
Our interest in the MAX Computer design was initially focused on the
Forth hardware aspects, such as the stacks. The first Arithmetic Logic
Unit we incorporated was a simple NAND function using 74LS00 integrated
circuits. Later, we added a parallel ALU with FULL ADDER function using
74LS283 integrated circuits. Both ALU designs work well for their
purposes. Our original thought was to eventually incorporate a Look-Up
ALU, similar to our LALU
Single Board Computer Design.
It was around this time that we began to consider the possibility of
incorporating ALU functionality using analog circuitry. (We had seen
some of the classic analog benchtop computers during our time as an
engineering student at the University of Michigan.) Our research
returned numerous design resources for analog computing, with much of
it from the 1950's and 1960's. For example "Electronic Analog
Computers" by Korn, 1956 and "Basic Analog Computation" by Peterson,
1967. Computers which combine digital and analog computing
elements are called Hybrids. There is a modern book on this topic "Analog and Hybrid Computer
Programming" by Ulmann, 2023.
Figure 2: Analog Computer
Books
Classic analog computing
circuits generally use operational ampfliers for integrators, summers,
differentiators, etc. Operational amplifiers classically use a split
power supply with positive and negative rails. (e.g. +/- 15 V) Our
first experiments have focused on identifying useful single-supply
integrated circuits. For example, we found the AD557 to be useful
as an 8-bit digital to analog converter. The ADC0820 was likewise found
to be useful as an 8-bit analog to digital converter. Both of these
devices work well from a single +5VDC supply, and they are TTL
compatible. We found that switching can be accomplished using the
74HCT4066, a 4-Channel Analog Switch. (Essentially performing the
function of 'patch cords' in a classic analog computer.) We designed
and tested several PCB cards using these devices separately.
Eventually, we decided to design and build the first prototype of
an Analog Computing Module (ACM) for our MAX Computer. The MAX
computer is an 8 bit hardware forth engine, constructed using TTL
logic, operating at 1 MHZ. The MAX computer does not use a standard
CPU. The Controller for MAX consists of 3 custom programmed 27C256
ROMs. This arrangement gives us complete control over the hardware
control signals. The Forth primitives are coded into the ROMs as a
sequence of hardware operations during a cycle. A cycle consists of 6
rings from a ring counter. The first 2 rings are used for
instruction fetch and stack indexing, leaving 4 rings for instruction
synthesis.
Analog computers excel at solving Ordinary Differential Equations
(ODE), typically involving R/C integrators. For our proof of principle
ACM we started with a simple combinatorial analog function which
does not involve time. We chose to use an AD633 Multiplier chip to
perform high-byte multiplication. (Multiplication of two 8-bit
bytes results in a 16-bit word result. High byte multiplication is an
approximation, sometimes used in video games. Only the high byte of the
product is returned.) The conceptual layout of our ACM Multiplier
is shown in Figure 3.
Figure 3: Multiplier Analog
Computing Module for MAX
An ACM prototype PCB was designed and fabricated, as shown in
Figure 4. We decided to add an adjustable gain stage to the output of
the Multiplier IC for calibration. The gain stage is based on an
MCP6022 single supply operational amplifier. The analog multiplier
requires a split supply of +/- 15V, which is provided by a
small RH-0515D power conversion module. We decided to test the
module by computing the high byte square of N, divided by 2. The
agreement between theoretical and measured output is good, as shown in
Figure 5.
Figure 4: Prototype PCB for
the ACM
Figure 5: Experimental Results for Analog Computing Module
Figure 6:
Circuit Schematic for the Analog Computing Module for MAX
We were quite surprised that
this works as well as it does. The circuit schematic is shown in Figure
6. Note: We added a divide-by-2 by reducing the gain of the MCP6022
amplifier stage. (We found this was necessary to avoid clipping near
the 5 volt rail.) The ACM is able to compute the product in a single
machine cycle. Here is a breakdown for the operations performed during
the 6 rings of the Multiply operation.
Ring 1: Fetch Instruction (Default)
Ring 2: Index ROM Stack (Default)
Ring 3: Setup NEXT on Bus (Allows Multiplier to Stabilize)
Ring 4: Trigger A/D conversion, keeping NEXT active on Bus
Ring 5: Move Calculation Result to TOS Register
Ring 6: Drop NEXT from Data Stack
We are in
the process of designing an updated ACM which will have more computing
functions, including a summing junction and possibly an integrator.