(this is a reformatted version, in two parts, of a paper originally proposed for a conference)
Abstract: making custom integrated circuits at home or school that are more powerful and much more flexible than the popular Open Source Arduino platform is still a relatively unknown concept. This activity, however, is not just much more affordable and easy today than just a few years ago thanks to FPGAs: it may also have important social and educational consequences. This page sums up the current status of certain technologies. The second part discusses why and how to spread this knowledge through society.
Arduino is a system for building interactive microcomputers that include, or can be connected to, physical sensors to monitor the surrounding environment and/or control other physical devices like lights, motors, and other physical outputs. The microcomputers are simple printed boards, that can be assembled by hand or purchased preassembled, built around a microcontroller chip, the Atmel AVR. The complete hardware design of the board, the software development environment and all the related documentation are available online, free of charge and with an Open Source license. A vibrant community already exists around Arduino, with thousands of designs for all possible purposes, from game joysticks to hydroponic controllers.
Field Programmable Gate Arrays (FPGAs) are digital integrated circuits, that is thin slices of silicon enclosed in plastic packages, on which many thousands, if not millions, of transistors are printed in regular structures (the arrays). Today, FPGAs are closed source, proprietary products (just like, by the way, the Atmel AVR at the center of the open Arduino platform) that are manufactured by Altera, Xilinx and a few other multinational manufacturers. FPGAs have, however, one unique characteristics, that is the driver for the thesis of this article.
Unlike what happens in other integrated circuits, inside an FPGA the connections between all internal transistors, that is the actual functionality of that circuit (modem, CPU, graphic engine, encryption device, router or anything else) are created after that circuit has been manufactured, sold and soldered on a printed board. The instructions (bitfile) that specify which connections to be activated are downloaded at power up inside the FPGA by its end user.
Technical difference between FPGAs and ATMEL/Arduino systems
The “creation” of the hardware circuit layout at power-up time that FPGAs are capable of is a huge difference with respect to platforms like Arduino: no matter how much one can customize it, Arduino remains a board built around one fixed microprocessor, the Atmel AVR: what if somebody needs a processor with more pins, or some extra instruction, than the AVR?
An FPGA instead, depending on how its transistors are connected every time it’s turned up, can be a video controller, a crypto-engine, a modem, a TV-decoder or almost any other circuit that works at the same operating frequencies, with the same number of transistors, and it doesn’t even end here. In fact, the types of circuits that can be designed for, and embedded inside FPGAs together with other hardware functions, includes several microprocessors able to run generic software! This has already led to two very interesting and promising facts. The first is that FPGA clones of the Atmel AVR processor, that is the core of Arduino, already exist as FPGA design modules. In other words, it is already possible to make of many existing Arduino boards simple design blocks inside FPGAs.
The other fact is that some of the processors already available as FPGA design blocks are capable of running stripped down versions of Linux, which means that adding to, and running inside, FPGAs many Free Software applications is much simpler than a few years ago.
Status of FPGA development platforms
Today, many circuit boards built around low to medium complexity FPGAs are available starting from 150/200 USD, or can be manufactured on demand by several vendors. With the right knowledge it is possible to transform any of these boards in a completely custom computer at home or in the classroom. Debugging is easy because, once found, mistakes in the circuit design can be fixed by loading another bitfile, without replacing physical components on the board on which the FPGA is mounted. The necessary knowledge, as well as free online support, is available in active communities like www.opencores.org, that also publish many designs under Open Source licenses. Besides, it is possible to design FPGA circuits on cheap software environments like Linux. In short, any teenager (or any adult already interested in bricolage and looking for a new job) with access to a few hundred dollars of equipment that would fit on most desks could learn the basis of FPGA design and use them to scratch a personal itch or find a better job.