Lunar Reconnaissance Orbiter, 2007-8

Rich Katz's Office of Logic Design at Goddard Space Flight Center was tasked with creating a small moderate-speed computer embedded in the LOLA-DU, the Digital Unit of the Lunar Orbiter Laser Altimeter. LOLA's mission was (and is) preparing a very high-accuracy topographical map of the entire Moon, poles and all, by firing short laser pulses at the surface while the LRO's polar orbit brings slices of the surface within view, and timing the returns like a boat's depth sounder.

The DU's software triggers the pulses emitted simultaneously in five beams, interprets the return, and buffers the data until the LRO's antenna can "see" an appropriate Earth-based antenna, then dumps it down while still collecting more data.

To survive cosmic ray impacts over years, the DU has to be highly radiation-hardened, which eliminated "civilian" microprocessors from consideration. Katz simplified his design task by implementing, in a rad-hardened FPGA, the architecture of a 1970s-era processor chip, the Intel 8085. Aside from not being rad-hardened, an actual 8085 would be way too slow and not available any more, but its dozens of instructions were a repertoire of well-established efficacy for embedded control applications, even though none of them performed multiplication or division. Even better, that architecture was supported by available development tools, like an assembler and simulator, with a long track record.

The only open question was whether the programming of the FPGA to create this 80k85 would in fact produce a clone of the 8085. Katz needed a detailed functional self-test program to certify this point, and he knew from our MAPLD encounters that my "down-to-the-metal" approach to programming would achieve the "rigorous and thorough" treatment required.

My program used every trick in the book to test the instructions while avoiding "conflicts of interest" where parts of the machine's logic might mislead the checking by using the same circuits as the instruction being tested. It did uncover a bug in the FPGA programming logic, as well as a less-than-robust overuse of some logical signals. Then it was made to cycle continuously while Rich Katz and Igor Kleyner varied supply voltage, ambient temperature, and clock rate, thereby revealing where the margins were.

Finally, they decided that my program's small size (9.2 kbytes) made it a no-brainer to include in the DU's memory, for possible use if the LOLA subsystem should start acting squirrely, to pin the tail on the right donkey. That's how I got my own 21st-century set of ones and zeros into orbit around the Moon.