An Array of Gates Arrays All Randomly Deployed

This is named after Prof Aagaard who was my E&CE 427 (Digitial Hardware Engineering) course, although it isn't inspired by him or his course, it relates to the subject area and the acronym was cool.

When you start up your computer, you are presented with an operating system that provides a handful of generic functions. The real magic of this computer is that you can transform it into another tool by loading more software supported by the OS. I might describe this as a hardware operating system. Basically, create a large collection of FPGAs to provide generic computing power. Controllers could rewrite the hardware to be building a new computer customised to the current load of the system.

The system would be made of small modules containing several FPGAs connected to a controller. All of them would be connected to a bus. Instructions from the bus would load new designs onto any of FPGAs. The FPGAs could then communicate with each other to exchange data and possibly even send the commands to reprogram other FPGAs. Each of these modules would then connect to a larger bus infrastructure with some kind of routing technology to allow the traffic to be high speed. General purpose computers and devices could provide the data necessary to start the system working.

[Schematic]

Say you were trancoding an video file. Your computer could download a decoder to some of the FPGAs and an encoder to others, ideally, trying to pair them based on physical geography. It can then just dispatch frames onto the bus and read the transcoded frames.

If one could develop a sophisticated programming language, you could generate generic interpreters that could run in parallel to execute code for the system. If a profiler detected an extremely frequently used section of code, it could hot-spot compile it into totally new hardware and run it on as many chips are as necessary. The real problem is being able to generate hardware fast enough. Current VHDL synthesis tools (and VHDL itself) would be woefully inadequate. Such a language would need to combine ideas from functional languages, hardware description languages, byte-code interpreted languages and distributed systems.

Mon, 8 Dec 2008 22:26:15 -0500 View History