A Review of a Design Document for the uPD7281 Processor The document under review may be found here: http://merlintec.com/download/nec7281.pdf An acquaintance of mine is fascinated with data-flow machines, as am I. The base concept is that of computations being carried out once all needed inputs become available. The most pure thought stuff out of which I may frame the idea is as a network of computational units which pluck packets of data out of a stream thereof, whenever one such unit identifies the packet as being applicable to itself. An analogy I enjoy is the comparison of a ``von Neumann'' machine to a factory in which an invisible man is running around, to inch along all conveyer belts in sequence, performing work when a conveyed item reaches some machine which manipulates it; it's clear how any such factory would be foolish and wasteful, and that it would only approximate a real factory if that man were incredibly fast. Every ``von Neumann'' machine has such an invisible man, called the Central Processing Unit, and no amount of speed will ever correct his fundamental flaws. The data-flow machine, however, can be thought of as exactly like a real factory, but this analogy does little to help me think about its realization. A better analogy than factories may be to compare data-flow machines to live cells, and how proteins are synthesized by the necessary materials floating around and eventually matching up, but again the analogy helps little in the realization of such a machine, and I'd not seen real data-flow machines. Reading this document, which amounts to an educational advertisement, gave me something concrete for my reasoning about data-flow machines and other ``non-von Neumann'' designs, for which I'm thankful. The machine described therein is pipelined; input tokens are changed from external to internal forms in steps, and then queued as necessary in small memories, before reaching a computational unit which ends the cycle. At first I'd thought it queer that the machine would have any such memories at all, but then saw the necessity, and learned more intimately how the ``von Neumann bottleneck'' is caused not by memories, but one memory to rule them. This is a machine that has no pipeline stalls so long as it has some way to progress, and that also gave to me a more intimate understanding of what makes these machine types different. If all individual units in a machine are operating at their greatest capacity, then I suppose there's no real bottleneck, but ``von Neumann'' machines with pipelines are prone to stalling by nature, which reintroduces the bottleneck. One way data-flow machines increase capacity is by removing global state stored in one memory, like a program counter, or a variable for a variable, or other such nonsense; thus, if one memory be needed at some point, its capacity can be effectively increased, by the reduction of unnecessary nonsense tangential to the machine's problem. This document is littered with nice diagrams, examples, and a very simple program across many steps. It was already clear to me that data-flow machines are akin to graph-reduction machines, but it very much helps to have a concrete deconstruction of the process in terms of its possible steps. There's no replacement for a simple example. Ever since reading the document, I've had pleasant dreams of a new kind of data-flow machine, new to me anyway, and greater understanding of hardware and software. These realizations are obvious, at least in hindsight, yet I struggled to reach some of them with no example to study, and I suppose that's not bad or unnatural. Regardless, forevermore shall I have a concrete example of a data-flow machine against which to compare all others, for which I'm thankful. .