There's a company, DRC, that sells a high-performance FPGA board that
plugs into cpu sockets on multi-cpu motherboards:

That's another virtuous cycle: usually the problem with selling accelerator boards is that it normally just takes the problem of crunching some ops and turns it into the hassle of feeding the board with data and getting the results back. Presumably the sockets on a multi-cpu motherboard are able to communicate in a way that looks much more like a coprocessor call than a DMA.

I expect FPGAs to grow in popularity for general computing.  Perhaps
some day every computer will have a CPU, RAM, FPGA, and IO.  Will
programmers study circuit design or will they write code in high level
languages that can be compiled to the FPGA?  I guess that it would be
much easier to compile Haskell code to a circuit than C code.

There are several Haskell/FP hardware design languages. (the only one that comes to mind immediately is "Ruby", which is probably far too old to be a good example, and is noteworthy mostly for the name collision with the software language)

I believe computing HW design is the converse of SW design in that:

- parallel pattern matching is easy, but
- sequential pattern matching (looping) is difficult

If you look at what Horowitz and Hill had to say about how the introduction of PLDs made hardware cleaner*, it has many parallels with the FP approach to software. Basically, they liked PLDs because one could have inputs (and last register state) flow into the logic, and then take the outputs directly out of the registers, inputs->logic->registers->output, breaking up the customary feedback loop of inputs->logic->registers->logic->outputs and meaning that the register clock was synchronous: no longer several gate delays away from the ultimate outputs. (timing and synchronization seem to be to hardware what memory and GC are to software)

From a software point of view, a little ravioli of logic with some registers stuffed in the middle and wires going in all directions looks very much like an OO view of the world, while a system in which the information flow through the logic gates is in one direction, with the outputs (and state feedback) provided at a single well-defined place, looks much more like an FP view of the world, with IO and State being done in monads which are "run" at well defined places.

-Dave

* cf "FPGA end-user programmability: how to achieve?"
http://www.mail-archive.com/kragen-discuss@canonical.org/msg00194.html

also, Dan Piponi's embedded lazy FP led-proto:
http://sigfpe.blogspot.com/2006/06/monadic-lightswitch.html


Reply via email to