It's kind of hopeless to try to prove that a microprocessor works according to spec, since you're dealing with physical objects in the real world. For instance, early versions of Intel's 386 processor had a 32-bit multiply problem that only showed up in some chips under particular combinations of temperature, voltage, and frequency, probably due to a transistor that wasn't large enough to provide an electrical margin under worst-case conditions.
Chip makers would disagree. They use tools that simulate at the electrical circuit level for just such problems, and using massive amounts of testing and inspection to statistically bound variations in chip geometry caused by process variation.
It is the quantum effects that occur at tiny geometries that make this hard, but every chip you buy has passed extensive variation.
To account for individual variation and random glitches there are other techniques, like triple modular redundancy or lockstep processors. Or for less stringent software, just computing it twice in different cores and memory blocks.
Serious question: does Figure 1 in the article make sense to anyone? If you understand the symbols, do you look at the diagram and it's clear how logistics works?
Yes. It depicts how supplies arrive at a port, move via roads to a logistics organization that is brigade-sized, assigned to support a corps. It depicts the subordinate units within that logistics organization (the Army calls these "Sustainment Brigades"). From there supplies go to the corps's subordinate divisions. Within one of those divisions, the supplies go to/between sustainment batalions. From there, supplies go to support battalions and maintenance companies at the division's subordinate brigades. Also, along the top you can see supplies delivered from outside of the AO directly to airfields within a Division Support Area. They can also be moved via air from Corps-level airfields. The icons there depict medium and heavy lift utility helicopters.
The short answer is the "14-day" rule, which doesn't allow development of the embryo beyond 14 days. The article gives specifics under the heading "Ethical and legal compliance"
Yes, the low density and TTL chips (instead of MOS) helped against radiation. When the Shuttle computers moved to semiconductor RAM, they needed extensive error correction, as well as a process that constantly fixed bit errors, as the memory would get multiple errors per flight due to cosmic rays.
As far as redundancy, it's complicated. During critical flight phases, four computers would run the main software (PASS, Primary Avionics Software System), while the fifth computer was ready with the Backup Flight Software (BFS). The backup software was written by a completely different team to ensure that a software bug couldn't crash all the computers at once. In orbit, they used fewer redundant computers to free up computers for payload operations and stuff.
The four computers constantly checked the results from each other and would vote out a faulty system. Voting ensured that a bad computer couldn't vote out the good ones (Byzantine failure). Moreover, the actuators hydraulically voted on the results from the computers: if one computer tried to push a valve in a different direction, the three good computers would physically overpower the bad computer's action at the level of the hydraulic pistons.
Thanks so much for the information. I am familair with the voting logic (I've worked on systems that implemented the same thing, odd-number of processor cores and the majority wins).
One question, were any "misbehaving" processor or actuation requests ever logged? As in, were there examples where one actuator or CPU didn't agree in the Shuttle flights?
There have been a fair number of GPC failures [1], and computers have been voted out. I haven't looked closely enough to see how many were "disagreements" versus hard failures or self-check failures.
It's unlikely that you'd get a simultaneous tie; you'd expect one computer to go bad before the other. But I think in that case, the astronauts switch to the Backup Flight System, the fifth computer.
Mission STS-9 had two computer failures, causing landing to be delayed by 7 3/4 hours. They carried a sixth computer as a backup for following missions.
As far as how the voting works, each computer has a signal indicating what it thinks the status is of each computer, including itself. (Computers can detect many failures from self-checking, such as parity errors.) Each IOP uses these votes to determine the "redundant set", calculating the votes in hardware. The status is also displayed to the astronauts in a 5×5 grid. Astronauts can power down a computer or reboot it.
Favorite story I heard about voting was an anecdote relating to the flight computers on one of the Boing 7xx jets (probably the 757, but I don't know).
The story was that they were planning to fly with 3 computers, and that they would "vote" on important decisions.
The real trick was that they intended to build those computer with 3 separate teams, using clean room implementation (no coordinating with the other teams), and that they were going to use 3 separate CPU architectures, and even 3 different implementation languages.
As I understand it, they conceded on the language choice, they were all going to use the same language, but I don't know about the rest.
The goal was to avoid some catastrophic "unknown unknown" that might have crept into the implementation if they simply rolled out 3 copies of the same system.
It's pretty tiny in the grand scheme of things. Wikipedia says it's 30ft long, 14ft wide and 9 ft tall (https://en.wikipedia.org/wiki/Boeing_X-37#Specifications_(X-...). The space shuttle was 122ft long, so around 4x the size. When you don't need to put space station modules inside the payload bay, or humans in the cockpit, you can make it pretty small and hard to find against the vastness of space
Amazing article, thanks! However, I think when you said "...heat was transmitted by convection through the metal plate inside each page...", you probably meant conduction, right?
Convective heat transfer in metal would be a worrying event on the Space Shuttle!
I don't know if these boards were flown. They were coated with conformal coating (which I hate for reverse-engineering), which is usually omitted from prototypes. I believe that bodge wires are okay for flight if they are done properly.
> conformal coating (which I hate for reverse-engineering), which is usually omitted from prototypes
Bad memory from a couple years ago. Debugging a machine under development at a customer site, which was luckily only a few blocks from the office, since I was there a lot, I would get random resets, hangs, and loss of debug information from the SWD probe. Swapping boards, debug probes, nothing we could think of fixed it and it was so random it was hard to track down.
Long story short, after it happened on one occasion when the project EE was also debugging something and he touched one of my probes, we found that there was conformal coat residue on some of the debug pins and the probes would occasionally vibrate onto an insulated section, causing loss of signal.
No idea why the board house put it on a prototype, but we probably lost a few dozen hours due to that one problem.
Using another metric which I called consistency (I think it was just minimizing the biggest bucket possible afterwards, trying to beat absurdle fast), the best starting word was tied between "arise", "raise", "aesir", "reais" and "serai". All of these have a worst-case scenario of 168 valid words remaining.
I find it interesting that different implementations seem to come up with slightly different rankings. Maybe the dictionaries are different?
A couple years ago, I wrote some js to sort a 5 letter word file. The value for a word was based on letter frequency in each letter location. Then I took the words that didn't have repeating letters. The I choose a word at the top that I liked and grep'd for some other words to use for the 2nd and 3rd try. In 3 tries, you have used over half the alphabet and all vowels. This usually lets me get the word by the 4th try. Here are some word sets you can start with.
I think it depends on whether you use a conventional dictionary as the population of possible words, the valid guess list, or the (known, at the time, for the originally version of the game at least) possible solution list. I guess you could also use the possible solution list minus the words that had already been guessed in previous iterations.
I mean, you had to give yourself an artificial constraint because IIRC the next solution was actually built into the page anyway, not obfuscated in any way.
Yes, you can use a "logarithmic shifter". The CDC 6600 supercomputer (1964) used that approach. The tradeoff is that you need more stages with the logarithmic approach (six versus two for 64 bits).
If you're using MOS pass transistors for each stage, you lose some voltage at each stage, which limits the number of stages. I think this is why the 8087 (and the 386) used two-stage shifters rather than logarithmic shifters. I don't know how the circuit area compares between the two approaches--two more complex stages vs six simpler stages--but I suspect the two-stage approach wins.
CAD was a very incremental process. Early chips were drawn by hand and the Rubylith masks were cut by hand with the help of a Coordinatograph. Later, Intel used a Xynetics plotter to cut the Rubylith. By 1974, layouts were digitized with a Calma GDS I so repeated cells could be handled automatically. By the time of the 8087, there was a lot of automation.
You might think that the 8087's shifter would be a regular grid, easy to lay out by hand. It turns out to be very optimized and irregular. (I traced it out by hand and it was a pain.)
That's a very interesting board! It came out in 1976 (four years before the 8087) and cost $499 assembled, equivalent to $2900 in current dollars, so it was expensive. It was really a decimal processor built from simple TTL parts, and had four microcoded instructions: add, subtract, multiply, and divide. Arithmetic used the 74LS181, the very popular ALU chip. (It did multiplication with repeated addition; there's no ROM with digit products, unless that was a later version.) The "small RAM" was very small by modern standards: four 4-bit registers that each held 16 digits. Each register was implemented with a 74S189 chip.
The microcode is available, so it would be a fun project to write a simulator that runs the microcode.
My mistake -- what I wrote was from memory so I got the bit wrong about the multiplier ROM. I must have confused that detail with the design of the Wang 2200 computer, which had double precision BCD float math and did in fact have a 4b x 4b multiplier ROM.
Lovely page, I enjoyed it lots. Especially this: “The first time I programmed a computer was in the fall of 1978 at LTHS, Lyons Township High School, in La Grange, IL. It changed my life. For a long time I couldn't think of anything else but programming computers, and it hasn't yet completely worn off.”
Calms me down and gives hope. I started feeling like losing the programming spark is just behind the corner more and more during the past decade (working for money), yet decade and some before that was so exhilarating. But now I think, you've started 20 years before I was born!
reply